upload-labs Pass01 to 12
写在前面:windows部署和Linux部署的部分题目顺序不一致,下面以windows部署结果为例
Pass01-前端后缀检查
前端检查文件后缀
判断方法
绕过
方法1:关闭js
前提是关闭后不对网页其他功能构成影响
方法2:burpsuite修改数据包
- 将写好的脚本ant.php修改为ant.jpg
- 开启burpsuite proxy,上传,然后拦截到数据包
- 这时候上传ant.jpg已经绕过本地前端检查
- 将拦截到的ant.jpg修改为ant.php即可
Pass02-mime检查/文件名00截断
服务器检查Content-type
- 测试是否前端js检查-结果:否
- 开始测试是否存在00截断或者修改Content-type检查
方法1:00截断
要求PHP<5.3.29,而且GPC关闭
拓展:00截断和%00的区别 参考
- 准备上传文件,修改ant.php名为ant.php.jpeg
- 开启burpsuite proxy拦截流量
- burpsuite专职hex标签页,找到ant.php.jpeg位置,将.jpeg的’.‘的十六进制2e修改为00
- burpsuite forward数据包即可
方法2:burpsuite修改Content-type
- 正常上传ant.php
- burpsuite将拦截到的数据包的application/x-php修改为image/jpeg
- forward
Pass03-不完整的黑名单
不安全的黑名单
大小写后缀做了处理 - 无法通过大小写绕过
黑名单虽然没有htaccess限制,但是上传的文件被重命名 - 无法使用.htaccess绕过
- 尝试使用其他后缀赖绕过,例如ant.php5
- 但是需要修改apache配置,让服务器将php3当成php处理
- 注意文件被重命名,需要访问重命名之后的地址
httpd.conf需要增加配置 AddType application/x-httpd-php .php3
|
|
Pass04-htaccess绕过
.htaccess绕过
- 黑名单限制没有.htaccess,而且文件没有重命名
- 上传.htaccess,将ant.jpg设置为php
- 再上传ant.jpg
.htaccess文件内容
|
|
Pass05-后缀大小写绕过
服务器没有处理大小写,使用大小写绕过即可
文件被重命名
Pass06-后缀空格绕过
后缀加空格绕过后缀检查
注意这题的题目提示与源码提示不一致
Linux环境无法复现
- 添加空格绕过即可
|
|
这里也无法利用apache的多后缀解析漏洞,例如上传一个ant.php.xxx时,服务器只保留了后缀.xxx,ant.php都被当成是文件名替换掉了,所以网页返回的是一个.xxx的路径
所以,凡是遇到只保留后缀的,基本都无法使用多后缀解析漏洞
|
|
Pass07-apache多后缀解析漏洞
文件没有被重命名
.htaccess和.user.ini 不能上传
- 测试apache多后缀解析漏洞
|
|
Pass08-windows::$DATA绕过
只能在windows下复现
增加::$DATA,让服务器认为后面是数据流,不去检验后缀
|
|
Pass09-apache多后缀解析漏洞
文件没有被重命名
.htaccess 不能上传
.user.ini可以上传,但是upload文件夹没有可执行的php文件,无法触发
尝试apache多后缀漏洞,通过。同Pass07
|
|
Pass10-复写
构造复写后缀绕过即可
Pass11-上传路径可控+白名单
文件被重命名
存在白名单限制,无法使用00截断,00截断会导致后缀校验不通过
上传路径save_path可控制,尝试%00截断路径
原理
- 漏洞位置move_uploaded_file,通常用来移动上传的文件
- 如果路径产生%00截断,就会产生漏洞并可被重命名
|
|
Pass12-请求体内的上传路径可控
与pass11雷士,只是路径位于请求体内
注意请求体内的数据
- 路径截断
- 与pass11不同,pass11的阶段发生在url上,url上的%00(url编码)其实对应编码前数据NUL
- post请求体实现路径截断也应该填入NUL,不应该是%00
- 所以这里可以先填入%00,然后选择url-decode还原