upload-labs通关小记 Pass11-16 含代码审计

upload-labs通关小记 Pass11-16

"upload-labs通关小记"系列相关:
01:upload-labs通关小记 Pass1-10
02:upload-labs通关小记 Pass11-16 含代码审计(当前文章);
03:upload-labs通关小记 Pass17-20 含代码审计

第十一关——%00绕过(GET)

审计代码:

请添加图片描述

我们上传有合法名称的文件,并GET提交方式中修改"save_path"的值。

在其后添加"webshell.php%00",php在解析到%00时会认为是结束标识,从而将停止对$img_path的后续字符拼接,那么save_path的值即是$img_path的最终值,所以我们的文件被服务端保存为"…/upload/webshell.php"。

请添加图片描述

不过此时若要使用蚁剑连接webshell,注意要找对webshell.php的正确路径。

请添加图片描述

第十二关——0x00绕过(POST)

审计代码:

请添加图片描述

原理同第十一关,我们需要在POST提交方式中修改"save_path"的值。

但由于GET和POST对于00截断的处理有所不同:POST不会对%00进行解码,我们只能用0x00绕过。

请添加图片描述

具体操作:

请添加图片描述

webshell上传成功

第十三关——文件内容检查

审计代码:

服务端对文件前两个字节的数据进行了读取,并验证是否对应各类型图片的文件头。

更多关于php中pack()和unpack(),请阅读:PHP中pack、unpack的详细用法PHP:pack - Manual

请添加图片描述

Ⅰ.上传图片马

两种上传图片马的方法可行:

(更多图片马的制作方式:图片木马制作大法

①用copy命令制作一个图片木马并上传。

先准备一个内含"一句话木马"的.php文件和一个trojan.png图片文件:

请添加图片描述

在cmd中,找到对应目录,并使用copy命令制作图片马(pic_trojan.png):

请添加图片描述

此时上传pic_trojan.png即可。

②将webshell.php更改为图片后缀名,并为其添加对应的文件幻数

常见的图片文件格式对应的文件幻数
JPGFF D8 FF E0 00 01 4A 46 49 46
GIF47 49 46 38 39 61
PNG89 50 4E 47 0D 0A 1A 0A

先直接上传webshell.png。

请添加图片描述

然后在Burp Suite中修改其文件内容,在文件前面添加89 50两个字节。

请添加图片描述

然后便可成功上传。

Ⅱ.利用本pass中的文件包含漏洞来运行图片马中的恶意代码

请添加图片描述

分析如下:

请添加图片描述

在本页面以GET方式提交file=上传至服务端的图片马路径。

请添加图片描述

蚁剑也可以成功连接

请添加图片描述

第十四关——文件内容检查

审计代码:

请添加图片描述

更多关于getimagesize(),请阅读:PHP: getimagesize - Manual

制作图片马:

添加GIF文件头(HEX)构造了webshell.gif

请添加图片描述

PNG文件头(HEX)构造了webshell.png

请添加图片描述

但不知为何,此pass中,有jpg文件头的webshell.jpg不能成功上传,另选择用copy命令直接将恶意代码写入一张.jpg图片的文件尾,可以成功上传jpg_webshell.jpg。

请添加图片描述

添加了jpg文件头却无法成功上传的webshell.jpg

请添加图片描述

本Pass的文件包含漏洞的利用方式同Pass-13。

第十五关——文件内容检查

审计代码:

请添加图片描述
exif_imagetype()如果发现了文件中恰当的签名则返回一个对应的常量,否则返回false,返回值和getimagesize()返回的数组中的索引 2 的值是一样的;更多关于exif_imagetype(),请阅读:PHP: exif-imagetype - Manual

此Pass需要打开php的exif扩展,否则无法正常交互,关于详细内容,请阅读:PHP exif扩展方法开启详解

  1. 先在phpstudy中勾选php_exif选项
    请添加图片描述
  1. 然后在php.ini中删除extension=php_exif.dll之前的分号’‘;’’

请添加图片描述

随后便可成功上传图片马。

而在Pass-14不能上传的webshell.jpg(手动添加jpg文件头构造的那一个图片马)在此pass却可以成功上传。

个人猜测可能是Pass-14的getimagesize()和Pass-15的exif_imagetype()对文件类型的检测机制不同所导致。

本Pass的文件包含漏洞的利用方式同Pass-13。

第十六关——二次渲染

先上传一张gif图片马。
请添加图片描述

上传成功后,保存服务器经过二次渲染后返回的新图片,记为gif_trojan_return.gif。

请添加图片描述

通过WinHex打开两张图片。

请添加图片描述

点击"“查看(V)”=>“同步和比较(&)”,随后WinHex会比较两文件,相同处是白底,不同处是黑底。

请添加图片描述

我们用一句话木马覆盖一块儿未被服务端替换的区域(这里不应该是文件开头,如下图中偏移量未96和112的两行),然后保存修改记录。

在这里插入图片描述

再次上传图片马(我们重新添加过一句话木马后的gif_trojan_return.gif)

请添加图片描述

保存服务器第二次返回各我们的图片文件,记为gif_trojan_return_2.gif,

并使用文件内容查看工具WinHex检查一下,我们之前写的一句话木马是否仍然存在。

请添加图片描述

如上图,一句话木马在gif_trojan_return_2.gif中仍然存在,那么说明我们的一句话木马绕过了服务端的二次渲染。

接下来就可以像Pass-13一样,利用文件包含漏洞打开webshell了。

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neonline

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值