【安全】文件上传绕过技巧

1 文件任意上传漏洞

如果能够绕过正常的文件上传类型,上传恶意的webshell ,那么程序就存在任意文件上传漏洞。

2 常见上传过滤规则与绕过方式

  • 页面javascript后缀效验,如判断是否以jpg结尾

绕过方式:先提交符合规则的后缀(如jpg),然后通过burpsuite拦截进行后缀修改(如改为php)

  • 服务端效验content-type(如image/jpeg)

绕过方式:通过burpsuite抓包将content-type修改为符合规则的内容(如image/jpeg)

  • 服务端文件内容头效验,判断文件内容是否以某些字符开头

绕过方式:可以在Webshell头部,添加规则所需字符,如添加GIF标准头部字符,GIF89a

  • 服务端黑名单效验,即不允许某些页面文件上传,如php

绕过方式:

  1. 大小写绕过,如pHp,Jsp
  2. 黑名单不完整绕过,附,可解析扩展名列表:

jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee

  • 服务端白名单效验,指定仅接受某些后缀的文件

绕过方式:

  1. 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)
  2. 寻找利用文件包含等漏洞,包含上传含有webshell 的正常文件
  3. 中间件解析漏洞绕过(下面独立章节说明)
  • 利用操作系统文件命令规则效验

绕过方式:上传不符合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

  • 其余配置问题导致漏洞:
  1. 如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
  2. 如果在 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,以下内容的文件。
');?>

然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

 

 

 

 


爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!

你可能感兴趣的:(安全)