下面是文件包含的代码
include.php <?php /* 本页面存在文件包含漏洞,用于测试图片马是否能正常运行! */ header("Content-Type:text/html;charset=utf-8"); $file = $_GET['file']; if(isset($file)){ include $file; }else{ show_source(__file__); } ?>分析代码可以知道它只读2字节,只需要将木马后缀改为图片格式,内容加个图片头部,然后在返回包中找到路径,然后写在file参数后,因为file参数include的原因都会直接执行。如下:
长传成功,配合文件包含漏洞解析图片格式的木马。 pass-15
先看源码:
这里使用getimagesize()函数来验证是否是图片,这里说一下getimagesize(),这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。是可以被绕过的,因为图片头可以被伪造。这里伪造gif的图片头,来进行上传,如下
图片木马上传成功。 pass-16
这一关需要开启php_exif
看源码
这里使用exif_imagetype函数来检查是否是图片,这里说一下exif_imagetype(),它是读取一个图像的第一个字节并检查其签名。所以也是可以通过伪造图片头来进行绕过的。这里同样伪造gif的图片头,来进行上传,如下
上传成功 pass-17
看源码
这一关比较综合,判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染。还是按照第16关的思路走一下,看是否成功。显然失败了。
那就做一个图片木马,上传一个正常图片,抓取数据包,在图片末尾插入恶意代码,如下:
然后,进行上传操作。上传成功,如下。
因为这里进行了二次渲染,所以还没有结束,我们将上传的图片下载到本地查看。
这里发现在进行二次渲染的过程中,我们插入到图片的恶意代码被清理掉了,所以需要对比渲染前后,哪些地方没有变化,我们将恶意代码插入到那里,来绕过二次渲染。对比发现,这里渲染前后没有发生变化。
所以,我将恶意代码插入到这里,如下图:
重新上传,上传成功,再次下载到本地,发现恶意代码没有被清除,绕过了二次渲染。
pass-18