上传漏洞总结

解析漏洞

常见的 Web 容器: IIS、Nginx、Apache、Tomcat等

IIS解析漏洞

IIS6.0

1. *.asa、*.asp格式的文件夹, 其目录下的任意文件都将被 IIS 当作 asp 文件来解析。
例如:建立文件夹 parsing.asp,在 parsing.asp 文件夹内新建一个文本文档 test.txt, 然后在浏览器内访问。
2.当文件为 *.asp;1.jpg 时, IIS 6.0同样会以 ASP 脚本来执行。
例如:新建文件 test.asp;1.jpg, 然后在浏览器内访问。

WebDav漏洞

WebDav 是一种基于 HTTP 1.1 协议的通信协议, 它扩展了 HTTP 协议,在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法, 使 HTTP 协议更强大。

1. 通过 OPTIONS 探测服务器所支持的 HTTP 方法。
2. 通过 PUT 方法向服务器上传脚本文件。
3. 通过 More 或 Copy 方法改名。

如果服务器开启了 DELETE 方法, 攻击者还可以删除服务器上的任意文件。

Apache1.x 和 Apache2.x

Apache在解析文件:当碰到不认识的扩展名时, 将会从后向前解析, 直到碰到认识的扩展名为止, 如果都不认识, 则会暴露其源代码。
有些程序开发人员在上传文件时, 判断文件名是否是 PHP、ASP、ASPX、ASA、CER、ASPX等脚本扩展名, 攻击者就有可能上传 1.php.rar 等扩展名来绕过程序检测, 并配合解析漏洞, 获取到Webshell。

PHP CGI解析漏洞

Nginx:通常用来作为PHP的解析容器。
访问 http://www.xxx.com/1.jpg/1.php, 此时的 1.jpg 会被当作 PHP 脚本来解析。
此时的 1.php 是不存在的, 却可以看到 1.jpg 已经按照 PHP 脚本来解析了。攻击者可以上传合法的“图片”(图片木马), 然后在URL后面加上“/xxx.php”,就可以获得网站的 Webshell。
在 IIS7.0、IIS7.5、Lighttpd等 Web 容器中也经常会出现这样的解析漏洞。
这种解析漏洞其实是 PHP CGI 的漏洞。在 PHP 的配置文件中有一个关键的选项:cgi.fi: x_pathinfo。这个选项在某些版本中默认是开启的, 在开启时访问 URL, 比如:http://www.xxx.com/x.txt/x.php, x.php是不存在的文件, 所以 PHP 将会向前递归解析, 于是造成了解析漏洞。

客户端检测

FireBug

FireBug 删除 onsubmit 事件, 突破 JavaScript 验证。

中间人攻击

使用 Burpsuite 按照正常的流程通过 JavaScript 验证,然后在传输中的 HTTP 层做手脚。
首先把木马文件扩展名改为一张正常的图片的扩展名,比如 JPG 扩展名, 在上传时使用 Brupsuit 拦截上传数据, 再将其中的扩展名 JPG 修改为 PHP, 就可以绕过客户端验证。
注意:在 HTTP 协议中有请求头 Content-Length, 代表实体正文长度, 如果此时的 filename 修改也就意味着实体正文长度增加或者减少了, 这时就应该修改 Content-Length 请求头。

服务器检测

白名单与黑名单验证

1.黑名单过滤绕过
1)攻击者可以从黑名单中找到 Web 开发人员忽略的扩展名, 如:cer。
2)在 Upload.php 中并没有对接收到的文件扩展名进行大小写转换操作, 那就意味着可以上传 asp、php这样的扩展名程序, 而此类扩展名在 Windows 平台依然会被 Web 容器解析。
3)在 Windows 系统下, 如果文件名以“.”或者空格作为结尾, 系统会自动去除“.”与空格, 利用此特性也可以绕过黑名单验证。如:上传“asp.”或者“asp ”(asp后面加空格)扩展名程序, 服务器端接收文件名后在写文件操作时, Windows 将会自动去除小数点和空格。
2.白名单过滤方式
采用白名单的过滤方式可以防御未知的危险,但白名单并不能完全防御上传漏洞, 例如:Web容器为 IIS6.0, 攻击者把木马文件名改为 1.asp;1.jpg上传, 此时的文件为 JPG 格式, 从而可以顺利通过验证, 而 IIS6.0 却会把 1.asp;1.jpg 当作 ASP 脚本程序来执行,最终攻击者可以绕过白名单的检测, 并且执行木马程序。

MIME 验证

MIME类型用来设定某种扩展名文件的打开方式, 当具有该扩展名的文件被访问时, 浏览器会自动使用指定的应用程序来打开。如:GIF图片 MIME 为 image/gif, CSS 文件 MIME类型为 text/css。 将在HTTP请求中PHP文件的Content-Type:application/php, 更改为 image/jpeg类型。

目录验证

在 HTML 代码中有一个隐藏标签 , 这是文件上传时默认的文件夹, 而我们对此参数是可控的, 比如:使用 FireBug 将 Value 值改为 pentest.asp, 并提交上传一句话木马文件。
程序在接收到文件后, 对目录判断, 如果服务器不存在 pentest.asp 目录, 将会建立此目录, 然后再将图片一句话密码文件写入 pentest.asp 目录, 如果 Web 容器为 IIS6.0, 那么网页木马会被解析。

截断上传攻击

将文件上传名称更改为“1.asp 1.jpg”, 然后单击 HEX 选项卡进入十六进制编辑模式, 将文件名中空格的十六进制数 20 改为 00, 即NULL, 单击“GO”按钮, 可以发现最终上传的文件为“1.asp”, 1.asp 后面的字符已经被截断。

文本编辑器上传漏洞

常见的文本编辑器有CKEditor、Ewebeditor、UEditor、KindEditor、XHeditor等。
下面以FCKeditor编辑器为例,讲述文本编辑器漏洞。(注:FCKeditor、现已改名为CKEditor)

敏感信息暴露

FCKeditor 目录存在一些敏感文件, 如果这些文件不删除, 那么攻击者可以快速得到一些敏感信息。

1.查看版本信息
/FCKeditor/editor/dialog/fck_about.html
2.默认上传页面
/FCKeditor/editor/filemanager/browser/default/browser.html
/FCKeditor/editor/filemanager/browser/default/connectors/test.html
/FCKeditor/editor/filemanager/upload/test.html
/FCKeditor/editor/filemanager/connectors/test.html
/FCKeditor/editor/filemanager/connectors/uploadtest.html
3.其他敏感文件
/FCKeditor/editor/filemanager/connectors/aspx/connector.aspx
/FCKeditor/editor/filemanager/connectors/asp/connector.asp
/FCKeditor/editor/filemanager/connectors/php/connector.php

黑名单策略错误

在FCKeditor<= 2.4.3 版本中采用的就是黑名单机制, 在 config.asp 文件中定义了以下黑名单:

ConfigDeniedExtensions.Add    "File",
"html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm"

在这个黑名单中过滤一些常见的文件扩展名, 但疏忽了 asa、cer 等未知风险扩展名。

上传漏洞形成原因:

1.目录过滤不严, 攻击者可能建立畸形目录
2.文件未重命名, 攻击者可能利用 Web 容器解析漏洞