Pass-11-get 00
截断绕过
1、直接上传.php文件,提示:只允许上传.jpg|.png|.gif类型文件!
2、查看源码,发现是白名单判断,但$img_path是直接拼接,因此可以利用%00截断绕过。
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
这里使用的是php5.2.17+Apache环境
截断条件:php版本小于5.3.4,php的magic_quotes_gpc为Off状态
3、上传图片马抓包,使用%00截断
4、成功上传!
Pass-12-post 00
截断绕过
1、直接上传.php文件,提示:只允许上传.jpg|.png|.gif类型文件!
2、查看源码
save_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改。
3、上传图片马抓包,在hex中修改
4、成功上传!
Pass-13-
图片马+文件包含
1、要求上传图片马到服务器,并且要结合文件包含漏洞来执行图片马中的恶意代码,图片马要.jpg,.png,.gif三种后缀都上传成功才算过关!
2、查看源码
这一关会读取判断上传文件的前两个字节,判断上传文件类型,并且后端会根据判断得到的文件类型重命名上传文件
3、我们先准备三种图片马(这里我是利用了Notepad++将恶意代码直接写入图片)
4、将图片马挨个上传到服务器。
5、最后我们利用文件包含漏洞
Pass-14-getimagesize()
1、要求跟Pass-13一样
2、查看源码
分析源码后,与Pass-14差不多,也是对文件开头做检查,只不过是换了一个函数,通过使用getimagesize()检查是否为图片文件。
3、上传图片马结合文件包含执行恶意代码
Pass-15-exif_imagetype()
1、要求还是和前两关一样
2、查看源码,发现只是换了个函数,使用了exif_imagetype()来检查是否为图片文件,并且需要开启php_exif模块。
3、上传图片马,结合文件包含执行恶意代码
Pass-16-
二次渲染绕过
原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。
尝试了很多次都以失败告终,没办法,只能附上大佬链接
https://xz.aliyun.com/t/2657#toc-2
Pass-17-
条件竞争
1、直接上传.php文件
2、查看源码
这里是条件竞争,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可。
Pass-18-
条件竞争
1、查看源码发现也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。
2、我们可以发现由于条件竞争可能来不及重命名的文件
3、利用文件包含执行恶意代码
Pass-19-00
截断
1、查看源代码
发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过。
注意:POST接收的时候 %00 需要URL编码。
2、上传.php文件
2、在Hex中进行修改
3、成功上传!
Pass-20-数组绕过
1、查看源码
if (!is_array($file)) {
$file = explode('.', strtolower($file));
}
// 这组代码判断如果file不是数组的话,就会以点将文件名区分,这样我们的php文件名就没有用了,所以要构造数组结构的数据来绕过这个。
2、上传图片马,抓包,构造数组格式数据
3、成功上传!
总结:
花了差不多两天打完这个靶场,中间还是遇到了很多问题,但也是一步一步的解决掉了一些,希望这两篇文章能够帮到一些刚刚步入安全的师傅。
我们后会有期,我是小白,大佬勿喷!