记录upload-labs通关过程
使用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 | <FilesMatch "shana"> |
意思就是如果文件里面有一个名字为”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代码。