A-A+

一波三折之某站点反射XSS (绕WAF防御)

2016年12月28日 13:35 漏洞安全 评论 1 条 阅读 382 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

【前言】其实就是废话,又到了一年一度的回家季,说真心的12306的验证码设计者真TM日过狗吧。让我找飞碟,除了科幻片我上TM哪见飞碟去我。算了,然后去别的网站买票吧。先看看这个网站的SEO信息。

百度权重:9         360权重:7        GooglePR:7

【正文】先随便搜索一下,搜一下去哈尔滨的票吧。然后随后闭合一下参数,如下图。

html闭合input参数

html闭合input参数

呃。。。这个水印好像有点大。。。哈哈哈,不过应该可以看到,已经闭合了,似乎可以直接构造了。然后接下来look一下。

内容变乱码

内容变乱码

大家可以看一下,输入的内容变成了乱码?!为什么?而且输入的内容除了冒号之外也都不存在了。经过尝试发现。有WAF,而且发现WAF可能扮演两种角色,一是过滤有恶意的代码,二是碰到某些关键函数直接报错不过滤。如下图:

WAF危险代码提示

WAF危险代码提示

到这里我想着,要不试验一下fuzll一下参数,看看都过滤了那些。结果发现了他的规则。

WAF规则(请无视【】):

一、组合【on (+) 任何字母数字 (+) =】                  结果:必定被过滤

二、组合【< (+) 任何字母数字 】                            结果:必定被过滤

三、单个符号【 ' = 】(等,这里没办法一一举例)      结果:触发WAF报警

到这里荣我想一想哈,特么的,这还玩个乱啊,如果闭合标签用事件,那么被过滤,如果整个intpu闭合那么还是被过滤。默默的想放弃了。但是就在我准备放弃的时候发现如下代码。

dome型XSS?

dome型XSS?

哎呦,真的都准备放弃了,但是习惯性看一下控制台,结果发现,哎呦我去。。。这事情有转机啊。。。

其中两行代码如下:

1
<script type="text/javascript">// <![CDATA[   var xctjName = "PC:xxxxxx:出发地=南京:目的地=哈尔滨";//这里可以加东西?:出发日期=2016-12-29";   _smsm.test(["_testview", "PC:xxxxxx:出发地=南京:目的地=哈尔滨";//这里可以加东西?:出发日期=2016-12-29"]); // ]]></script>

这里我们是不是可以构造代码让它弹窗呢?结果发现,WAF过滤了很多很多关键词和符号,不过还好通过fuzll测试了一下常用的,发现还是有很多是没有过滤的。看一下我构造好的吧。如下

1
<script type="text/javascript">// <![CDATA[   var xctjName = "PC:xxxxxx:出发地=南京:目的地=哈尔滨";setTimeout("ale".concat("rt(docum","ent.cookie",")"),0);//:出发日期=2016-12-29";   _smsm.test(["_testview", "PC:xxxxxx:出发地=南京:目的地=哈尔滨";setTimeout("ale".concat("rt(docum","ent.cookie",")"),0);//:出发日期=2016-12-29"]); // ]]></script>

大家注意上面第一段,因为上下都是通过GET获得的值,所以上下一致。如果上面我正常匹配了。但是下面就会报错,如图:

script报错不执行

script报错不执行

从图中的意思就可以看明白,missing ] after element list,意思下面的一句出错,没有]中括号没阔回(艾玛,憋文绉绉的,给我说明白点,啥意思?呃,语句没闭合),导致报错,所以这段代码并不执行。虽然后面的注释了,但是下面的报错,整个script代码也都不执行,这个地方为了关闭它的报错,我想好好久。因为是上线接收的参数对称,所以怎么都做不到不报错。

1
<script type="text/javascript">// <![CDATA[   var xctjName = "PC:xxxxxx:出发地=南京:目的地=哈尔滨";setTimeout("ale".concat("rt(docum","ent.cookie",")"),0);/*:出发日期=2016-12-29";   _smsm.test(["_testview", "PC:xxxxxx:出发地=南京:目的地=哈尔滨";setTimeout("ale".concat("rt(docum","ent.cookie",")"),0);/*:出发日期=2016-12-29"]); // ]]></script>

就算是全注释掉也不行也是会报错,如下图:

script全注释 报错

script全注释 报错

看到了吧,就算全注释也报错。。。无奈,,,又一次准备要放弃了。仁兄,真的太伤神伤时间了。
此刻,就在我准备关闭页面的一霎那,眼睛瞟到了另一段代码。如下图:

统计系统传参

统计系统传参

真真的是【柳暗花明又又一村】,终于找到一个可以利用的地方。但是发现这个script里面的传参真心的怪异,跟上面不一样,上面并没有过滤/(反斜杠),但是这个/反斜杠到这里面就会被替换成:冒号。。。
不过还好,最终还是成功了。图下图

终于绕过WAF,成功弹窗

终于绕过WAF,成功弹窗

下图是最新版谷歌浏览器,也成功。。。。高兴的不要不要的。

chrome 反射xss

chrome 反射xss

虽然一个反射XSS,可能就算提交SRC都有可能被忽略,或者1积分。。但是真的让自己又一次的明白了,细心,细心,细心,坚持,坚持,坚持!!!最终才能胜利!!! 转载请保留本文链接谢谢。

标签:

1 条留言  访客:1 条  博主:0 条

  1. 路人甲

    🙂 js玩的6

给我留言