文件上传漏洞是指用户上传了一个可执行脚本文件,并通过此文件获得了执行服器端命令的能力。在大多数情况下,文件上传漏洞一般是指上传 WEB 脚本能够被服务器解析的问题,也就是所谓的 webshell 问题。完成这一攻击需要这样几个条件,一是上传的文件能够被 WEB 容器执行,其次用户能从 WEB 上访问这个文件,最后,如果上传的文件被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击失败。

更改后缀

  1. PHP:
  2. php4php5phtmlpht(是否解析需要根据配置文件中设置类型来决定)
  3. ASP
  4. asacercdx
  5. ASPX
  6. ascxashxasac
  7. JSP
  8. jspjspxjspf

大小写绕过

类似php改成pHp

更改Content-Type

  1. 常见的媒体格式类型如下:
  2. text/html HTML格式
  3. text/plain :纯文本格式
  4. text/xml XML格式
  5. image/gif gif图片格式
  6. image/jpeg jpg图片格式
  7. image/pngpng图片格式

绕过JS检查

抓包绕过即可

上传.htaccess绕过

SetHandler

  1. SetHandler application/x-httpd-php

这样所有文件都会解析为php,然后再上传图片马

AddHandler

  1. AddHandler cgi-script .xxx

将扩展名为.xxx的文件作为 CGI脚本来处理

AddType

  1. AddType application/x-httpd-php .gif

将以 gif 为后缀的文件当做 php 解析

php_value

用来进行文件包含
all_url_fopenall_url_includeOn时,可以使用远程文件包含或利用伪协议。

  • auto_prepend_file:在主文件解析之前自动解析包含的文件
  • auto_append_file:在主文件解析后自动解析包含的文件

    php_flag

    1. php_flag engine 0
    可以将 engine 设置为 0,在本目录和子目录中关闭 php 解析,造成源码泄露

    .user.ini利用

    基本类似.htaccess

    %00截断

    上传文件名为sky.php.jpg,burpsuit抓包,在.jpg前面加入一个00字节即可。

    文件解析漏洞

    Apache

    Apache多文件后缀

    在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
    所以可上传一个test.php.qwzf文件绕过验证且服务器依然会将其解析为php。

    罕见后缀

    Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,被当php程序执行的文件名要符合正则表达式。也就是说php3,php4,php5,pht,phtml等文件后缀也是可以被当作php文件进行解析的。

    后缀包含换行符\x0A(CVE-2017-15715)

    默认Apache配置就使用了<FileMatch>
    1. <FilesMatch \.php$>
    2. SetHandler application/x-httpd-php
    3. </FilesMatch>
    $可以匹配换行符,所以在php后缀后面加一个换行符,可以绕过黑名单,并且apache可以顺利解析。

    Nginx

    Nginx PHP CGI 解析漏洞

    Nginx漏洞总结

    空字节代码执行漏洞

    Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
  1. 上传一个qwzf.jpg图片文件
  2. 访问[http://x.x.x.x/qwzf.jpg](http://x.x.x.x/qwzf.jpg)%00.php
  3. 就会将qwzf.jpg作为PHP文件进行解析

    Nginx文件名逻辑漏洞

    Nginx漏洞总结

    IIS

    目录解析(6.0)

    形式[http://www.xxx.com/xx.asp/xx.jpg](http://www.xxx.com/xx.asp/xx.jpg)
    原理: 服务器默认会把.asp.asa目录下的文件都解析成asp文件。

    文件解析(6.0)

    形式[http://www.xxx.com/xx.asp;.jpg](http://www.xxx.com/xx.asp;.jpg)
    原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件。

    解析文件类型(默认解析后缀)

    有的网站会设置黑名单上传限制 ,IIS6.0 默认的可执行文件除了asp还包含这三种 :
    1. /xx.asa
    2. /xx.cer
    3. /xx.cdx
    iis把asa,cdx,cer解析成asp文件的原因:这四种扩展名都是用的同一个asp.dll文件来执行。

    IIS 7.0/7.5 CGI解析漏洞

    与Nginx解析漏洞类似