第一关,通过JavaScript进行判断文件的类型,删除掉调用函数或者禁用浏览器的js

1.jpg
2.jpg

第二关,通过文件的MIME进行判断,修改为png的类型

3.jpg
4.jpg

第三关,使用黑名单进行限制,但只限制默认后缀,可使用其他后缀,例如php3,php5,phtml

5.jpg

第四关,同样使用黑名单进行限制,包括了其他后缀,但没有限制.htaccess文件,可控制其他文件都作为php解析

SetHandler application/x-httpd-php  

6.jpg

第五关,禁用了所有的可解析后缀,通过代码发现缺少对大小写的限制,可使用大小写绕过,仅对win有效

7.jpg

第六关,通过抓包,将保存文件名使用win的特性空格进行绕过

8.jpg

第七关,通过抓包,将保存文件名使用win的特性 (.) 进行绕过

第八关,代码中并没有限制 ::$DATA 字符串,可使用数据流进行绕过,访问shell的时候删除掉::$DATA

9.jpg

第九关,通过 (.空格.) 进行绕过删除,删除掉点之后再删除空格,剩下php.进行绕过,win特性

10.jpg

第十关,发现黑名单中的后缀会使用函数进行删除,可使用双拼后缀进行绕过。例如:xxx.pphphp

11.jpg

第十一关,通过抓包,修改文件上传名称和GET%00截断,需要php<5.3 php.ini 中 magic_quotes_gpc=off

12.jpg

第十二关,为POST截断,上十一关同理,需要注意的是post截断%00需要进行url编码

第十三关,使用win下的cmd窗口,将一句话木马追加到图片当中,然后使用文件包含进行包含图片马,从而拿到getshell

copy 原图片.jpg/b + 一句话.php/a  图片马.jpg 

13.jpg
14.jpg

第十四关和十五关同上,一种方法

第十六关,对上传的图片进行了二次渲染,导致上传的图片马被删除掉一句话,可通过二进制分析被改变的块,将一句话写进没有进行二次渲染的块中

15.jpg

第十七关,条件竞争,原理:上传文件后使用函数进行判断,发现非法文件后使用函数进行删除,所以通过一直向服务器发包和访问的情况下,和删除函数进行竞争,在删除之前访问写入一句话的文件从而达到写入一句话文件。

<?php fputs(fopen('webshell.php','w'),'<?php @eval($_POST['Yat']) ?>') ?>

16.jpg
17.jpg
18.jpg

第十八关同理

第十九关 POST截断绕过(URL编码),需要注意的是也会对MIME进行审查。

19.jpg

第二十关 数组加/绕过 原理:数组为后缀名,第一位为php/ 第二位为空 第三位为jpg 绕过审查后进行拼接,发现第二位为空进行拼接第一位数组,达到xx.php/

20.jpg

至此靶场结束。 总结:先看有没有给相应的提示,根据提示来判断类型,学会利用工具来提高效率,感谢学长