# 第 14 关 - 图片马
第 14 关的要求是上传图片马,也就是用图片加一段 php 代码,在网站有这个包含漏洞的情况下才可以解析这个木马
首先要制作一个图片马,可以直接用文本文档格式编辑,在图片后面加一段 php 代码,但是需要 16 进制编写。还可以用 cmd 生成,语句如下
1 | copy a.png /b + a.php /a webshell.png |
在这个生成文件上传成功之后检测一下是否能成功运行,题目已经给了文件包含漏洞访问
找到文件上传之后的所在路径和文件名,用 bp 抓包看一下
然后在文件包含漏洞页面访问
# 第 15 关 - getimagesize ()
这关和上一关只有一个区别,是一个 getimagesize 函数,这个函数会读取文件的 16 进制头,看是不是符合正常的图片的文件头,看看源码
1 | function isImage($filename){ |
所以只要文件头符合上述三个文件类型即可,其他步骤和 14 关一致
# 第 16 关 - exif_imagetype ()
16 关和 14、15 关的思路依旧是一样的,但是这里的区别是 exif_imagetype,其功能是检测 16 进制文件头并检测其后缀名,功能和 getimagesize 一样,但是速度比其要快得多,在 php 扩展中可以打开这个功能
# 第 17 关 - 二次渲染
现在很多网站都会对用户上传的图片进行再次压缩、裁剪等渲染操作,比如 php 中的 imagecreatefromjpeg (),所以普通的图片马基本上都会被渲染掉
# 绕过
GIF:在渲染前后的两张 GIF 不一样的数据块部分插入 webshell
PNG:要将数据写入到 PLTE 数据块或者 IDAT 数据块
JPG:需要用脚本将数据插入到特定的数据块,而且可能不会成功,要多次尝试