文件上传靶场upload-labs实战
前言
来具体学习一下文件上传的相关知识,参考教程:https://blog.csdn.net/qq_43390703/article/details/104858705,dalao写的很全面了,后续我应该还会再补上一个上传user.ini配置文件的。
Pass-01
前端F12删除CheckFile无法绕过,查看源代码,发现后台对扩展名进行了过滤,限制只能传图片,上传png一句话木马,burp抓包修改扩展名为php后放包,蚁剑连接即可。
Pass-02
和Pass-01同样的方法处理即可,我们来看看源码:
- file_exists:检查所给的文件或目录是否存在,若存在则返回true;
- move_uploaded_file(file, newloc):将指定文件file移动到新目录newloc;
- $_FILES['file']['type']:文件的MIME类型,在数据包的Content-Type中可以看到;
- $_FILES['file']['tmp_name']:文件被上传后在服务端储存的临时文件名;
- $_FILES['file']['name']:文件在客户端主机上的原名称;
首先检查是否存在上传路径,之后对文件的MIME类型进行判断(可以用burp抓包修改),判断是否为jpeg,png或gif图片;之后声明temp_file和img_path是为了后面move_upload_file。总的来说只有一层MIME类型验证,所以和上一题使用同种方法即可。(或者先上传php文件,抓包改Content-Type也可以)
Pass-03
先和第一题一样处理,但被ban了,应该是后端要过滤扩展名了:
这些扩展名不让用,改成phtml文件,可以成功上传。不知道为什么蚁剑连接不上其他扩展名,明明我已经设置了phtml之类的解析......
转战BUU上的靶机,成功连接。
Pass-04
基本上能过滤的扩展名都过滤了,但是没有过滤.htaccess,.htaccess文件可以设置对文件的解析。可以考虑先上传.htaccess文件修改配置,再传一句话木马。.htaccess文件配置如下:
SetHandler application/x-httpd-php
该配置会将所有上传图片解析为php,之后直接一句话木马连接即可。(还有其他的配置方式)
另一种方法——扩展名冗余绕过(限Apache):
本质是Apache解析漏洞。Apache中的主配置文件httpd.conf中存在DefaultType用于告诉apache该如何处理未知扩展名的文件,默认参数为text\plain。Apache认为一个文件可以拥有多个扩展名,并且是从右往左解析,如果第一个扩展名不是可解析的扩展名,就直接解析第二个,因此.php.aaa这样的扩展名会被解析为php。
Pass-05
过滤了.htaccess,但是把.ini放了出来,我们采取上传.user.ini的方式绕过,关于.user.ini的知识看这位dalao的文章:https://blog.csdn.net/u014029795/article/details/117252533
Pass-06
这关把.htaccess过滤了,但是少了一个关键的strtolower函数,因此直接.Php即可绕过。
Pass-07
tolower加回来了,但是首尾去空的trim不见了。我们采取空格绕过的方式,即扩展名添加空格,上传名字为"xxxx.php "的文件。不过直接修改文件名是不能保留住空格的,需要在burp里改包放包