使用upload-labs靶场
环境:WIN10,php5.3.29

Pass-01

代码审计,为js脚本,明显的前端验证(形同虚设),直接禁用js即可。也可以使用第二关的思路,直接抓包,保证MIME值为png/jpg/gif的类型即可。

Pass-02

代码审计,发现仅仅是验证MIME属性。直接抓包,保证MIME值为png/jpg/gif的类型即可。

Pass-03(!)

代码审计,发现过滤类型为黑名单验证,但不完整。php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml等都会被当成php代码执行,所以上传一个这类类型的文件即可。

Pass-04(!)

发现上述类型的也被列入了黑名单,那么可以使用.htaccess(配置文件)文件上传。在upload-labs目录下创建一个.htaccess文件,内容为

1
2
3
<FilesMatch "shana">
SetHandler application/x-httpd-php
</FilesMatch>

意思就是如果文件里面有一个名字为”shana”的文件,他就会被解析成.php。先上传一个1.png文件,然后上传这个.htaccess,再访问1.png,完成。
(这里不知道为什么,按照迪的步骤来,就是不成功)

Pass-05

运用到了一点点php代码审计。
图一
如图,此代码对于上传的文件的验证时是先去掉末尾的一个点,再去掉末尾以及首部的空格。那么我们可以利用此处代码的瑕疵。
图二
burp抓包发到重发器,将filename的字段值改为1.PHP. .,之后send,发现成功绕过上传。
访问此文件地址:
图三

Pass-06(!)

继续代码审计,发现并没有大小写过滤
图四
那么直接上传php文件,抓包并把filename值后缀改为.Php看下行不行。
图五
提示成功。
但是此时我访问不了这个文件,报错显示
图六
不知道什么原因,望指点,谢谢。

Pass-07

接着代码审计,发现没有空格过滤
图七
那么直接上传php文件,抓包并把filename值后缀改为.php
图八
访问此文件地址,成功解析。

Pass-08

接着代码审计,发现没有文末.过滤
图九
那么直接上传php文件,抓包并把filename值后缀改为”.php.”
图十
访问此文件地址,成功解析,对应的文件目录出现上传的文件。
图十一

Pass-09

代码审计,发现并没有::$DATA过滤
图十二
直接抓包在burp修改即可。在filename字段值添加::$DATA即可。
图十三
发现文件成功上传至指定目录,访问这个文件也可以正常执行php代码。
图十四

Pass-10

与Pass-5相同。

Pass-11

代码审计,发现将匹配到的黑名单的名字进行空串替换,由于其只是替换一次,没有循环判断。
图十五
所以直接抓包将filename值改为.pphphp即可。
图十六
发现文件成功上传至指定目录,访问这个文件也可以正常执行php代码。

Pass-12

代码审计,发现此处换成了白名单验证,且提交方法为GET,更难绕过,但是发现是代码存在一个”save_path”
那么可以使用%00截断。如:a.php.txt是txt类型文件,但是a.php%00.txt是一个php类型文件。
图十七
直接抓包修改,如图所示:
图十八
发现文件成功上传至指定目录,访问这个文件也可以正常执行php代码。

Pass-13

代码审计,发现此处换成了白名单验证,且提交方法为POST,更难绕过,但是发现是代码存在一个”save_path”
图十九
然后是和Pass-12一样思路,只不过这里为POST方法提交数据,那么就是0x00截断。
直接抓包修改,如图所示,post方式不会自行解码,所以要对%00进行urldecode编码:
图二十
发现文件成功上传至指定目录,访问这个文件也可以正常执行php代码。