2022-10-20
前言
接到一个测试目标,开局cloudflare,最后运气不错还是拿下了。因授权测试等原因,文章仅展示思路历程。
过程
信息搜集
给的目标是test.com
,前期经过一些基本的信息搜集,发现了一个求职子域employee.test.com
,其他子域要么是一些静态站,要么就是mail.test.com这类的邮件服务域名,故把目标放在这个子域上。
cloud flare真不错
访问域名,有登录和注册功能,按照要求格式注册了一个账号,进去溜到了一圈,有一处简历附件上传,burp抓包修改,先试试后缀是否可控,改为php,过了,以为是个软柿子,试试echo 123,结果
好嘛,虽然知道cloud flare很牛,但是想着自己文件上传waf bypass基本都是在靶场,所以就着这次机会熟悉下操作吧。
前面上传php后缀时没有拦截,那么后缀可控,接下来就是内容的事情了,因为尝试的上传代码是在正常简单不过的echo 123
,所以猜测可能是对php标签进行了检测拦截
将<?php echo 123;?>
修改为<?php echo 12;
,过了,
以为有戏,改为<?php phpinfo();
,拦截
难道拦截了phpinfo()函数?改为phpinfo(1)试一下(注:这里忘了是哪篇文章看的了,自己本地试了下,确实可以)
虽然本地测试过了,但是在目标环境中依然被拦截,
再换成<?php echo 123123;
,拦截,可是刚刚echo 12
没拦截呀,难道标签还没过,换几个短标签试一下
<?=`echo 1`; /*拦截
<? echo 1; ?> /*不拦截,但是目标没有开短标签扩展,无果
<% echo 1; %> /*不拦截,但是不解析
<script language="php"> echo 1; </script> /*目标php版本过高,不解析
短标签不行,回看一下第一次echo成功和第二次echo失败的问题,发现长度不同,经过fuzz发现,当内容中含有<?php php代码;
时,只允许算上标签只允许14个字符(<?php echo 12;
),而当出现短标签<?=`php代码`;
时直接拦截,试了很多短小的webshell,要么长度过不了,要么关键字过不了。
同事提了句分块传输,想起以前有看到过一篇利用分块传输过sql注入waf的文章唯快不破的分块传输绕WAF - FreeBuf网络安全行业门户,不知道这里行不行,我这里直接用burp插件转换,工具地址:https://github.com/c0ny1/chunked-coding-converter
但结果还是不行。
还得是你啊 real ip
最后没有办法,只能去试试能不能找到真实IP(之所以一开始不去找,是因为这个比较花时间,而且现在很多目标都是一上来直接就挂了cdn,以前网传的一些什么证书查找啥的基本没搞了,还有些多地ping,邮箱服务,子域啥的,反正我是没成功过)。
回到目标,要找真实ip,既然php代码过不了,那么其他的能不能过呢,简单试了些xss、xml代码,不出所料,这些明显危害的代码过不了,思考下,既然现在要ip,想起这篇文章奇安信攻防社区-文件导出功能的SSRF (butian.net)
,文章中有个点是利用了svg构造了一个ssrf,那么我这里依葫芦画瓢,看看能不能通过ssrf把目标服务器ip带出来,文章中环境是因为文章导出功能出了问题,而我这里是附件上传,试了一下jpg和其他图片格式都不行,但是我可以控制php后缀,而php是能解析html之类的代码的,所以直接构造一个ssrf的请求
IP过来了,和浏览器插件爬到的IP不同,以为找到了,结果同事看着这个ip不对劲,查了一下,发现也是cloud flare,寄,nnd,出口流量也是cloud flare。
折磨了一天,下班前想着,算了都磨了这么久了,就再用常规信息搜集方式找找ip吧。
经过了一系列的dns历史记录查找,翻看目标网页源码,提取搜索关键字,然后一直组合命令用搜索引擎搜,倒是找到了一些IP,但是不能太确定关系,然后想到了这篇文章host碰撞 - FreeBuf网络安全行业门户,因为IP不是很多,所以没用工具,直接burp重放修改,然后运气不错,真的给我逮到了,upload之后变成了302,不再是cloud flare了,寄!
最后上shell,清理痕迹,藏后门,可惜是个workgroup,没几台机子,算了,下班!