第一关
1.上传php一句话,抓包,发现抓不到,说明没有数据被发送到服务器,典型的前端验证
2.上传个普通图片发现可以,那我不就可以把我要上传的代码改个后缀上传上去了,然后抓个包改回php格式不就好了
3.把要上传的shell.php改成shell.png上传,并抓包
4.shell.php改成shell.png,发送
5.测试成功
第二关
1.看提示mime检查,直接抓包改包
2.上传shell并抓包,修改mime
3.修改为image/png,发出去
4.成功
第三关
1.看提示,黑名单,查后缀,可用.phtml .phps .php5 .pht进行绕过
2.这里改成了shell3.php5
3.注意这时候的文件名已经不是shell3了,看源码可以看到上传到服务器的名字
4.测试成功
第四关
1.查看提示,禁止一大堆,这关考察的是.htaccess这个配置文件,.htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的作用。
首先创建一个.htaccess文件,里面写上代码,这代码作用就是告诉服务器收到名为4.png的文件要用php去打开
<FilesMatch "4.png">
SetHandler application/x-httpd-php
3.将刚才的文件直接上传
4.上传代码4.png,最后直接访问就好
第五关
1.这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。直接上传普通文件,shell5.php改成shell5.php. .,然后直接发送即可
第六关
1.查看提示,一大堆,但是看代码发现没有强制大小写转换,所以直接改成大写PHP就可以直接上传了
2.注意文件名字上传的时候被随机改了,要在源码中找到被改后的文件名访问
第七关
1.查看源码,发现没有收尾去空
2.抓包,直接在后缀加空格,这样上传到服务器识别的时候,服务器会自动去掉最后的空格 7.php后面加空格
3.上传成功后注意地址,在源码里变成了一堆数字
第八关
1.查看源码,发现没有删除文件末尾的点,直接抓包在最后加个点。
第九关
1.查看代码发现没有去除字符串::$DATA,
注意:
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,(也就是说,会自动过滤掉文件的后缀名)
且保持::$DATA之前的文件名,他的目的就是不检查后缀名
例如:
"shell.php::$DATA", Windows会自动去掉末尾的::$DATA变成"shell.php"
2.故直接在后面加上::$DATA
3.注意文件名,访问这个名就成功了
第十关
1.看源码,只做了一次验证,去空,去点,直接在结尾加 . .
第十一关
这关的意思是如果你上传了上面规定的文件,他就会把你的后缀名去掉,比如你上传了11.php,那么他就会把你的php过滤掉。文件没有了后缀名,自然也就无法解析了。但是他是一次过滤,也就是说我们写两个php就可以了:11.pphphp,他过滤掉一个,正好剩下了11.php
黑名单总结
这些全部为黑名单绕过,而且只是验证一次,所以这些关卡全部可以用一个思路解出来,那就是.php. . 都是可以这样的,但作者是想让我们知道一些可以绕过的特殊格式,‘.’,‘::$DATA’,改大小写,结尾加空格,加点,双后缀等
第12关:%00截断
1.%00只能用于php版本低于5.3的,他的作用例如你上传一个11.php的文件,但是服务器解析成11.php12345677.php,而加上11.php%00后,会自动截断后面的文件名
2.在请求方式中的文件地址里面加上文件名+%00即可
第13关
1.和第十二关是差不多的,只不过请求方式变成了post,她两的差别就是get会自行解码,post不会自行解码,我们需要对%00进行编码,选中%00右键