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

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
【前言】其实就是废话,又到了一年一度的回家季,说真心的12306的验证码设计者真TM日过狗吧。让我找飞碟,除了科幻片我上TM哪见飞碟去我。算了,然后去别的网站买票吧。先看看这个网站的SEO信息。
百度权重:9 360权重:7 GooglePR:7
【正文】先随便搜索一下,搜一下去哈尔滨的票吧。然后随后闭合一下参数,如下图。
呃。。。这个水印好像有点大。。。哈哈哈,不过应该可以看到,已经闭合了,似乎可以直接构造了。然后接下来look一下。
大家可以看一下,输入的内容变成了乱码?!为什么?而且输入的内容除了冒号之外也都不存在了。经过尝试发现。有WAF,而且发现WAF可能扮演两种角色,一是过滤有恶意的代码,二是碰到某些关键函数直接报错不过滤。如下图:
到这里我想着,要不试验一下fuzll一下参数,看看都过滤了那些。结果发现了他的规则。
WAF规则(请无视【】):
一、组合【on (+) 任何字母数字 (+) =】 结果:必定被过滤
二、组合【< (+) 任何字母数字 】 结果:必定被过滤
三、单个符号【 ' = 】(等,这里没办法一一举例) 结果:触发WAF报警
到这里荣我想一想哈,特么的,这还玩个乱啊,如果闭合标签用事件,那么被过滤,如果整个intpu闭合那么还是被过滤。默默的想放弃了。但是就在我准备放弃的时候发现如下代码。
哎呦,真的都准备放弃了,但是习惯性看一下控制台,结果发现,哎呦我去。。。这事情有转机啊。。。
其中两行代码如下:
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获得的值,所以上下一致。如果上面我正常匹配了。但是下面就会报错,如图:
从图中的意思就可以看明白,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里面的传参真心的怪异,跟上面不一样,上面并没有过滤/(反斜杠),但是这个/反斜杠到这里面就会被替换成:冒号。。。
不过还好,最终还是成功了。图下图
下图是最新版谷歌浏览器,也成功。。。。高兴的不要不要的。
虽然一个反射XSS,可能就算提交SRC都有可能被忽略,或者1积分。。但是真的让自己又一次的明白了,细心,细心,细心,坚持,坚持,坚持!!!最终才能胜利!!! 转载请保留本文链接谢谢。
🙂 js玩的6