1.直接上传,没有绕过方式
2.绕过前端js过滤进行上传
关闭浏览器中的js,然后进行上传;禁用js或者F12修改即可
通过burpsuit进行抓包,修改后缀名进行上传
3.MIME-TYPE检测绕过;Burp截包,修改Content-Type,然后放行,即可绕过
4.文件头绕过上传;添加jpg等的二进制头部
文件头检查
添加GIF图片的文件头GIF89a
,绕过GIF图片检查。
5.黑名单方式绕过
文件名后缀大小写混合绕过。
.php
改成.phP
然后上传即可。感觉和XSS的一些过滤绕过非常相似。这种只删除一次php的,即可:双写文件名绕过,文件名改成
xx.pphphp
利用Windows系统的文件名特性 文件名最后增加点和空格,写成
.php.
,上传后保存在Windows系统上的文件名最后的一个.
会被去掉,实际上保存的文件名就是.php
Windows文件流特性绕过 文件名改成
.php::$DATA
,上传成功后保存的文件名其实是.php
上传路径名%00截断绕过 上传的文件名写成
11.jpg
, save_path改成../upload/11.php%00
,最后保存下来的文件就是11.php
要使用截断上传需要在php.ini中将magic_quotes_gpc改为off,并需要确保php版本在5.3以下
6.白名单绕过
渲染函数导致可用图片webshell
原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试 基本是不可能构造出能绕过渲染函数的图片webshell的。
条件竞争
利用条件竞争删除文件时间差绕过。
通过图片马进行绕过上传
制作图片马
通过上传图片马直接执行php文件,需要修改http.conf中的以下文件添加执行的文件后缀名
通过文件包含漏洞进行php文件的执行
文件包含
图片渲染上传绕过
将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。
条件竞争
利用条件竞争删除文件时间差绕过。