常见的上传绕过以及解析漏洞

  1. 前端绕过
  2. 服务端验证绕过
  3. 编辑器漏洞
  4. 配合解析漏洞突破上传

通常一个文件以HTTP协议进行上传时,将以POST请求发送WEB服务器,WEB服务器接收到请求并同意后,用户与WEB服务器将建立连接,并传输data。

常见上传检测规则
A. 客户端javascript检测(通常为检测文件拓展名)
B. 服务端MIME类型检测(检测Content-Type内容)
C. 服务端目录路径检测(检测跟path参数相关的内容)
D. 服务端文件名拓展名检测(检测跟文件estension相关的内容)
E. 服务器文件内容检测(检测内容是否合法或含有恶意代码)

客户端检测

客户端检测通常在上传页面里含有专门检测文件上传的JavaScript代码。最常见的就是检测拓展名是否合法。
判断方式:
在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。

  1. 利用burpswite之类的代理工具。
  2. 修改webshell后缀类型为允许上传类型。
  3. 抓包拦截将其后缀名改为对应服务器可以解析的后缀名。

绕过办法
服务端MIME检测服务端MIME类型检测也就是检测Content-Type的内容。下面是一段测试模拟代码:
在这里插入图片描述
我们将request包的Content-Type修改:
图片类型:
在这里插入图片描述
在这里插入图片描述

服务端目录路径检测

  • 一般是检测保存路径是否合法,但一般都没有防御。检测跟path参数相关的内容。
  • 漏洞成因是因为对目录路径的检测不够严谨而导致可以用0x00截断的方式来进行攻击。
  • 0x00截断:上传文件的时候,当系统文件读到(0x00)时,会认为文件已经结束。利用00截断就是利用WEB应用对文件上传的路径过滤的不严格,产生0x00上传截断漏洞。

绕过办法
通过抓包截断将 eval.php.jpg 换成 eval.php_jpg(下划线为0x00)。在上传文件时系统文件遇到0x00。会认为文件已经结束。从而将eval.php.jpg的内容写入到eval.php中。

$FilePath = C:/wamp/www/uploadfile/eval.php_.jpgmove_uploaded_file($_FILES[“upload_file”][“tmp_name”], $FilePath)

在执行move_uploaded_file的这个函数时底层操作调用类似于C语言。遇到0x00会自动截断,真实写入的地址应该是C:/wamp/www/uploadfile/eval.php

服务端文件名拓展检测

基于黑名单检测:
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般有个专门的blacklist,里面包含常见的危险脚本文件。

绕过办法

  1. 文件名大小写绕过(AsP, pHp等等)
  2. 黑白名单绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)cdx,
  3. 特殊文件名绕过修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统会自动去掉 点和空格。Unix/Linux系统没有这个特性。
  4. 0x00截断绕过
  5. .htaccess文件攻击(结合黑名单攻击)
  6. 解析绕过

0x00截断绕过

文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。

例如:
网站上传函数处理xxx.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀名为xxx.php

.htaccess文件攻击

.htaccess文件攻击即结合黑名单攻击服务器的 .htaccess文件 。

通过move_uploaded_file函数把自己写的 .htaccess文件覆盖掉服务器上的这样就可以解析定义名单了。

.htaccess文件用处:
通过.htaccess文件调用php解释器去解析一个文件名中只要包含“haha”这个字符串的任意文件,无论你文件名是什么样子,只要包含”haha”这个字符串,都可以被以php的方式来解析。

.htaccess文件内容:

<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMatch>

服务端文件内容拓展检测

如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难。也可以说它是在代码层检测的最后一道关卡。如果它被突破了,就算代码层的漏洞,也可以结合解析漏洞进行攻击。

  1. 文件幻数检测 jpg(JFIF) gif(GIF89a) png(%PNG)
  2. 文件相关信息检测(文件头加一些图片信息中间夹杂攻击代码)
  3. 文件加载检测(调用API或者函数进行文件加载测试 php的 gd库)

文件幻数检测绕过
主要是检测文件内容开始处的文件幻数,比如图片类型的文件幻数如下:要绕过jpg文件幻数检测就要在文件开头写上下图的值:
在这里插入图片描述
gif文件:GIF89a
png文件:%PNG

制作图片马
cmd下执行:

copy /b 1.jpg+2.php=3.jpg

Apache解析漏洞
test.php.aaa.bbb.ccc任意不属于黑名单且不属于Apache解析白名单之内的后缀名。

说明
一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止。

WampServer2.0All Version (WampServer2.0i / Apache 2.2.11) [Success]
WampServer2.1All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success]
Wamp5 All Version (Wamp5_1.7.4 /Apache 2.2.6) [Success]
AppServ 2.4All Version (AppServ - 2.4.9 /Apache 2.0.59) [Success]
AppServ 2.5All Version (AppServ - 2.5.10 /Apache 2.2.8) [Success]
AppServ 2.6All Version (AppServ - 2.6.0 /Apache 2.2.8) [Success]

IIS 解析漏洞

  • test.asp/任意文件名 | test.asp;任意文件名 | 任意文件名/任意文件名.php

IIS6.0 在解析 asp 格式的时候有两个解析漏洞.

  1. 一个是如果目录名包含".asp 、.asa、.cer"字符串,那么这个目录下所有的文件都会按照 asp 去解析。eg: “test.asp/1.jpg”
  2. 另一个是只要文件名中含有".asp;、.asa;、.cer;会优先按 asp 来解析
    eg:
    “1.asp;.jpg”

IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞, 对任意文件名只要在URL后面追加上字符串"/任意文件名.php"就会按照 php 的方式去解析
eg:http://www.target.com/upload/1.jpg/1.php”

  • IIS6.0 (Win2003 SP2 + IIS6.0) [Success]
  • IIS7.0 (Win2008 R1 + IIS7.0) [Success]
  • IIS7.5 (Win2008 R2 + IIS7.5) [Success]

Nginx 解析漏洞
任意文件名/任意文件名.php | 任意文件名%00.php

目前 Nginx 主要有这两种漏洞:

  • 一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行解析攻击。
    eg:http://www.target.com/upload/1.jpg/1.php”

  • 一种是对低版本的 Nginx 可以在任意文件名后面添加%00.php进行解析攻击。
    • Nginx 0.5.*
    • Nginx 0.6.*
    • Nginx 0.7 <= 0.7.65
    • Nginx 0.8 <= 0.8.37
    • 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂文件1.jpg,然后以1.jpg%00.php进行请求。
    • Nginx 0.8.41 – 1.5.6:
    • 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂文1.jpg,然后以1.jpg%20%00.php进行请求

总结

轻量级的检测绕过攻击

  • 绕过javascript对后缀名的检测
  • 绕过服务端对http requst包MIME类型的检测
  • 绕过文件内容幻术头的检测

路径/拓展名检绕过

1. 黑名单绕过

  • 文件名大小写绕过
  • 名单列表绕过
  • 特殊文件名绕过
  • 0x00截断绕过
  • .htaccess文件攻击
  • Apache解析漏洞
  • IIS解析漏洞
  • Nginx解析漏洞

2. 白名单绕过

  • 文件名后缀0x00截断绕过
  • PHP文件包含漏洞
  • IIS解析漏洞
  • Nginx解析漏洞

猜你喜欢

转载自blog.csdn.net/qq_37133717/article/details/94590348