本文记录文件上传学习过程,教程为 《Upload Attack Framework V1.0》
解析攻击
网络渗透的本质
主体就是代码注入+代码解析/执行
像缓冲区溢出攻击,sql 注入攻击,文件上传攻击,文件包含攻击,脚本代码注入等等
主要分为两种情况
-
直接解析/执行攻击
像缓冲区溢出和sql 注入攻击,脚本代码注入就是很明显的属于这里攻击
直接将代码注入到一个解析/执行环境里,直接就能让代码得到执行
所以危害性也来得最大,效果最明显
shellcode 注入程序后,直接劫持EIP,进行该系统环境权限做任何操作
sql 命令注入数据库后,直接就能执行该数据库账号权限下的任何操作
-
配合解析/执行攻击
算是一种组合攻击,在这类情况下
往往不像第一种情况能拥有直接的解析/执行环境
比较明显的就是我们的上传攻击
我们需要先上传数据(注入代码)到服务端上去
然后想办法去调用解析/执行环境(比如Web 应用程序解析漏洞)
来解析/执行已经注入到了服务端的代码
1. 直接解析
能以asp,php 之类的扩展名存储在服务器上
2. 本地文件包含解析
主要是php 的本地文件包含(远程文件包含不属于上传攻击绕过范畴)
3. .htaccess解析
用户自己定义如何去调用解析器解析文件就可以了
4. web应用程序解析漏洞以及其原理
-
[*] Apache 解析漏洞
解析: test.php.任意不属于黑名单且也不属于Apache 解析白名单的名称
描述:一个文件名为x1.x2.x3 的文件,Apache 会从x3 的位置往x1 的位置开始尝试解析如果x3 不属于Apache 能解析的扩展名,那么Apache 会尝试去解析x2 的位置,这样一直往前尝试,直到遇到一个能解析的扩展名为止
测试:测试了下面这些集成环境,都以它们的最新版本来测试,应该能覆盖所有低版本
WampServer2.0 All Version (WampServer2.0i / Apache 2.2.11) [Success] WampServer2.1 All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success] Wamp5 All Version (Wamp5_1.7.4 / Apache 2.2.6) [Success] AppServ 2.4 All Version (AppServ - 2.4.9 / Apache 2.0.59) [Success] AppServ 2.5 All Version (AppServ - 2.5.10 / Apache 2.2.8) [Success] AppServ 2.6 All Version (AppServ - 2.6.0 / Apache 2.2.8) [Success] 上面测试过的集成环境都有这个扩展名解析顺序漏洞(muma.php.jpg)(%00 截断), 然后所有测试过的集成环境都有对 php3 扩展名按 php 解析这个小洞 (本质上来说这个不算漏洞,只是在针对一些名单不全的黑名单时,能有绕过的机会)。
-
[*] IIS 解析漏洞
解析:test.asp/任意文件名| test.asp;任意文件名| 任意文件名/任意文件名.php
描述:IIS6.0 在解析asp 格式的时候有两个解析漏洞,一个是如果目录名包含".asp"字符串,那么这个目录下所有的文件都会按照asp 去解析,另一个是只要文件名中含有".asp;“会优先按asp 来解析 IIS7.0/7.5 是对php 解析时有一个类似于Nginx 的解析漏洞,对任意文件名只要在URL 后面追加上字符串”/任意文件名.php"就会按照php 的方式去解析(IIS6.0 没测试)
测试:测试了下面这些集成环境,都以它们的最新版本来测试,应该能覆盖所有低版本
IIS6.0 (Win2003 SP2 + IIS6.0) [Success] IIS7.0 (Win2008 R1 + IIS7.0) [Success] IIS7.5 (Win2008 R2 + IIS7.5) [Success] 针对IIS6.0,只要文件名不被重命名基本都能搞定 对于 {任意文件名/任意文件名.php} 这个漏洞其实是出现自 php-cgi 的漏洞, 所以其实跟IIS 自身是无关的
-
使用文件名为 evil2.asp;xxxxxxx 的文件
-
使用 test.asp 目录下的文件名为 eval 文件
-
使用文件名为 evilcode 文件
-
-
[*] Nginx 解析漏洞
解析:任意文件名/任意文件名.php | 任意文件名%00.php
描述:目前Nginx 主要有这两种漏洞,一个是对任意文件名,在后面添加/任意文件名.php 的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php 进行解析攻击。还有一种是对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。
测试:测试了下面这些环境
nginx 0.5.* [Success] nginx 0.6.* [Success] nginx 0.7 <= 0.7.65 [Success] nginx 0.8 <= 0.8.37 [Success]
对于任意文件名/任意文件名.php 这个漏洞其实是出现自php-cgi 的漏洞,所以其实跟nginx 自身是无关的
上传图片,然后通过xx.jpg%00.php 解析漏洞连接一句话木马
-
从漏洞原理来说总归有4 类web 应用程序解析漏洞
[*] Apache 的扩展名顺序解析漏洞 - 这个是Apache 自身的漏洞
[*] IIS 的asp 解析漏洞 - 这个是IIS 自身的漏洞
[*] Nginx 的%00 解析漏洞 - 这个是Nginx 自身的漏洞
[*] php-cgi 的默认配置漏洞 - 这类漏洞主要出现在IIS 和Nginx 这类以CGI 形式调用php 的web 应用程序而Apache 通常是以module 的形式去调用php,所以很少出现这个漏洞
-
php-cgi 的默认配置漏洞
Bug #50852 FastCGI Responder’s accept_path_info behavior needs to be optional
地址: https://bugs.php.net/bug.php?id=50852&edit=1
这个漏洞由cgi.fix_pathinfo 的值造成的
php-cgi 默认的配置里cgi.fix_pathinfo 是被注释掉的
实际运行效果是以cgi.fix_pathinfo = 1 在运行
而通常安全意识不高的管理员在安装IIS+php 或Nginx+php 的时候都是以默认配置在安装自然这种情况下,这类服务器全都会产生漏洞