前言
某次实战中,进行文件上传绕过时,发现会校验数据内容
尝试上传正常图片,发现头部被添加了gd-jpeg v1.0,判断使用了PHP-GD库
简要说明
PHP-GD库不仅会对图片内容进行检测,
通过imagecreatefromjpeg()函数进行转换,
还会删除exif里的元数据
利用过程
1.利用工具jpg_payload.php把php代码注入到图像的exif标头中
php jpg_payload.php image.jpg image-gd.jpg
可以看到代码确实被注入到了图像中脚本通过判断被添加gd-jpeg v1.0头部和原图像中相同的地方,通过十六进制匹配相同的值,找到这个值后,转换php代码为十六进制,注入到匹配值里
但是在我的测试环境里,发现被注入的图像还是会被二次渲染
Bypass
经过多次测试,发现原来是图片里面的特殊字符渲染后被转换成php可执行字符
测试发现图像转换成gif特殊字符变少很多,用windows自带的画图工具画一张空白的图像,就不会有多余的特殊字符
利用这个思路即可绕过当时测试等环境
脚本注入
python gd-gif.py 1.gif '<?php phpinfo()?>' 2.gif
交流群(应后台表哥要求,方便payload发放~)
本公众号文章以技术分享学习为目的。
由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。
一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
原文始发于微信公众号(极梦C):PHP-GD上传绕过实战