绕过
前端验证绕过
对于前端验证的校验,可以直接修改前端 js ,添加允许PHP扩展名。
或者上传.gif 文件然后用burp抓包,修改文件修改成PHP。
mime 限制扩展名绕过
修改concent-type
服务端黑名单校验后缀名的绕过
黑名单的意思就是服务端不允许哪些后缀名通过,但是存在一定的遗漏,可以尝试以下的后缀名,更改大小写或双写。
php php3-5 phtml PHP pHp phtm pphphp
jsp jspx jspf
asp aspx asa cer
exe exee
phtml 被解析的条件是Apache的配置文件中 AddYtpe 去掉#号
伪静态文件绕过
先创建一个.htaccess文件上传上去
写入 SetHandler application/x-httpd-php 这样所有上传的文件都可以用php来解析执行
再上传一个恶意代码的图片文件
访问上传图片,webshell 执行成功
Apache的解析机制绕过
APACHE默认文件名中可以带.号,当解析文件遇到.号时,从右至左依次解析。比如:test.php.xxx.aaa,.xxx和.aaa这两种后缀是apache不可识别解析,apache就会把test.php.xxx.aaa解析成test.php
利用Windows操作系统的特性绕过
Winserver下的xx.jpg[空格] 或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点
所以可以利用windows默认取出后缀名的空格和点的特性,在上传文件后缀后面添加空格和点可以绕过。
利用Windows操作系统NTFS文件流格式的解析特性,在文件名后添加:: D A T A , 可 以 绕 过 。 虽 然 在 网 页 上 显 示 的 后 缀 是 带 有 : : DATA,可以绕过。 虽然在网页上显示的后缀是带有:: DATA,可以绕过。虽然在网页上显示的后缀是带有::DATA的,但在系统里面就没有后面的符号了,可以直接访问。
服务端白名单校验后缀名的绕过
00截断
主要存在于PHP 5.3.4以下的版本,通常存在于构造上传文件路径的时候。当服务器判断文件名后缀正常时,存入路径后便不再检查,这时候使用截断,服务器在存入路径的过程中识别到00后便抛去其后的字符。
通常使用%00或16进制0x00来截断。
服务器解析漏洞
iis5.x-6.x版本,默认不解析;号后面的内容,因此test.asp;.jpg就被当成asp文件解析;
nginx,在8.03版本以下,并且配置文件中cgi.fix_pathinfo开启为1,访问www.xxx.com/shell.jpg/1.php时,nginx会将shell.jpg当做shell.php进行解析(其中1.php是一个随意构造的不存在的文件)。
结合文件包含绕过
制作图片马,利用文件包含的漏洞来执行,将webshell和图片合二为一。
copy x.jpg/b + shell.php/a shell.jpg
检验上传文件内容
超大内容绕过
有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验。
二次渲染绕过
二次渲染指的是服务器对上传的文件进行重塑,会改变原有内容,上传失败。这种情况就需要比较上传前和上传后的文件16进制数据的差异,在上传前后均没有变化的数据位置加入恶意代码。
先用开源代码生成一个1.png 文件,上传这个文件,被二次渲染并且改名为新的18233.png。直接通过文件包含访问/include.php?file=upload/18233.png&0=assert 执行成功。