当前位置: 首页 > news >正文

文件上传之图片码混淆绕过(upload的16,17关)

目录

1.upload16关

1.上传gif

loadup17关(文件内容检查,图片二次渲染)

1.上传gif(同上面步骤相同)

2.条件竞争


1.upload16关

1.上传gif

imagecreatefromxxxx函数把图片内容打散,,但是不会影响图片正常显示

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES['upload_file']['name'];$filetype = $_FILES['upload_file']['type'];$tmpname = $_FILES['upload_file']['tmp_name'];$target_path=UPLOAD_PATH.'/'.basename($filename);// 获得上传文件的扩展名$fileext= substr(strrchr($filename,"."),1);//判断文件后缀与类型,合法才进行上传操作if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "该文件不是jpg格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else if(($fileext == "png") && ($filetype=="image/png")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefrompng($target_path);if($im == false){$msg = "该文件不是png格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".png";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagepng($im,$img_path);@unlink($target_path);$is_upload = true;               }} else {$msg = "上传出错!";}}else if(($fileext == "gif") && ($filetype=="image/gif")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromgif($target_path);if($im == false){$msg = "该文件不是gif格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".gif";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagegif($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else{$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";}
}

首先copy命令生成图片马

上传之后再在服务器上下载下来,然后使用010editor进行比较,哪些内容没有被混淆,我们就可以把木马写在没有被混淆的内容里

然后直接文件包含,包含图片内的php代码

loadup17关(文件内容检查,图片二次渲染)

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES['upload_file']['name'];$filetype = $_FILES['upload_file']['type'];$tmpname = $_FILES['upload_file']['tmp_name'];$target_path=UPLOAD_PATH.'/'.basename($filename);// 获得上传文件的扩展名$fileext= substr(strrchr($filename,"."),1);//判断文件后缀与类型,合法才进行上传操作if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "该文件不是jpg格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else if(($fileext == "png") && ($filetype=="image/png")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefrompng($target_path);if($im == false){$msg = "该文件不是png格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".png";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagepng($im,$img_path);@unlink($target_path);$is_upload = true;               }} else {$msg = "上传出错!";}}else if(($fileext == "gif") && ($filetype=="image/gif")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromgif($target_path);if($im == false){$msg = "该文件不是gif格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".gif";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagegif($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else{$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";}
}

这一关主要就是使用了imagecreatefrom系列的函数。

这个函数的主要功能就是,使用上传的图片去生成一张新的图片,生成的结果会返回一个变量,

成功返回ture,失败返回false。并且这个函数,可以在他进行重新创建图片的时候,会将我们图片的信息和非图片的信息进行分离,也就是说如果我们在一张图片中加入了代码,那么他会 在你上传后把这张图片在新建的时候把其中的代码筛选出来,并且去除。最后只保留你的图片信息,在进行排序重建。

1.上传gif(同上面步骤相同)

将第一步的合成好的GIF图片使用010 Editor 工具打开,并且把第二步上传完的图片,到upload目录下寻找,将上传完成后已经被二次渲染后的图片,也使用010 Editor工具打开。并且对比, 寻找蓝色部分没有被排列重组的地方。

 在二次渲染后8828.gif图片中加入一句话代码,

点击文件包含漏洞url,传参。

就能完成此题。

2.条件竞争

我们还可以用条件竞争来完成此题

条件竞争型的漏洞在很多漏洞中都有涉及,在文件上传中造成这种漏洞的原因是代码中是先保存上传的文件在服务器上,然后验证再删除的,这就会造成攻击者可以利用文件被保存在服务器上与被删除的时间间隙来访问文件,然后重新生成了一个新木马

我们可以直接上传一个有写功能的php文件,然后bp抓包,一直发包,同时一直访问刚刚上传的php文件,总有一次会成功生成一个新的木马

我们去查看代码片段可以发现文件是先保存在服务器上,然后unlink函数删除的

先上传木马然后抓包

然后随便找个数字

然后选持续发包

然后我们一直访问上传的php文件,让它生成新的木马

http://www.lryc.cn/news/163219.html

相关文章:

  • Jetsonnano B01 笔记5:IIC通信
  • 【网络爬虫笔记】爬虫Robots协议语法详解
  • MATLAB 2022b 中设置关闭 MATLAB 之前进行询问
  • 在SpringBoot框架下,接口有读个实现类,在不改变任何源码的情况下,SpringBoot怎么知道给接口注入哪个实现类的依赖呢?
  • 探索数据库管理的利器 - PHPMyAdmin
  • 大数据技术原理与应用学习笔记第1章
  • 算法从未放弃你,放弃你的只有你自己
  • [Linux 基础] linux基础指令(1)
  • ESP32蓝牙主从站模式:主站发送,从站接收,同时附加简单通信协议
  • Redis布隆过滤亿级大数据
  • 车联网仿真工具Veins学习1
  • 封闭岛屿数量 -- 二维矩阵的dfs算法
  • C语言_指针(1)
  • 建站系列(一)--- 网站基本常识
  • Codeforces Round 895 (Div. 3) A ~ F
  • 【前端知识】Axios——请求拦截器模板
  • 企业架构LNMP学习笔记16
  • redis实现消息队列
  • JVM指令集
  • 如何用SSH克隆GitHub项目
  • sqlx库使用指南
  • 算法篇汇总
  • typeScript 学习笔记(二)
  • redis集群架构详解
  • nodejs设置镜像
  • CSS中如何在table中隐藏表格中从第4个开始的多个 <tr> 元素
  • 【类和对象】③友元类
  • 算法通关村第十六关:黄金挑战:滑动窗口与堆结合
  • 6.2.2 【MySQL】InnoDB中的索引方案
  • 划片机实现装片、对准、切割、清洗到卸片的自动化操作