upload-lab-17 -二次渲染绕过

365 阅读2分钟

这一关上传图片进行了判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,

最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,

添加一句话,通过文件包含漏洞执行一句话,使用蚁剑进行连接

补充知识:

二次渲染:后端重写文件内容

basename(path[,suffix]) ,没指定suffix则返回后缀名,有则不返回指定的后缀名

strrchr(string,char)函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

这里有个小提示,对于做文件上传之二次渲染建议用GIF图片,相对于简单一点

GIF:

上传正常的GIF图片下载回显的图片,

用010Editor编辑器进行对比两个GIF图片内容,找到相同的地方(指的是上传前和上传后,两张图片的部分Hex仍然保持不变的位置)并插入PHP一句话,

上传带有PHP一句话木马的GIF图片

为了方便大家测试,这里提供一张网上某个大佬提供的GIF图片,当时我也找了很久,大家可以保存一下wwe.lanzoui.com/iFS

wwn53jaf

————————————————

PNG:

2.2 使用php脚本写入IDAT数据块:

1、创建一个IDAT_png.php(通过这个脚本生成一个绕过渲染的图片马):

脚本内容:

构造了一个一句话木马 长这样:

测试探针要传递的参数:

get传参0=assert 加上 post传参1=phpinfo();

这里还利用了文件包含

最后构造的pauload:

///http://192.168.48.110/upload-labs-master/include.php

?file=upload/12648.png & 0=assert

post参数: 1=phpinfo();

连接蚁剑传递参数:

get传参0=assert 加上 密码 = 1

///http://192.168.48.110/upload-labs-master/include.php?file=upload/12648.png & 0=assert

JPEG:

成功不了 摆了摆了 看别的啦s