1. 程式人生 > 其它 >Chrome XSS審計之SVG標籤繞過

Chrome XSS審計之SVG標籤繞過

在一年前,在我的私人Twitter賬戶 brutal secret ,我分享了一個有趣的方法來通過審計繞過chrome 的xss過濾器。我們將從黑盒測試的角度來觀察,一個邏輯假設和結論, 導致我們的 XSS 向量繞過了xss過濾器。

我們從已知的所有 XHTML 解析器 (瀏覽器) 的麻煩開始:

Scalable_Vector_Graphics(svg):如果你不知道svg可以幹什麼,點選這裡深入瞭解資訊 (點選閱讀原文檢視連結)

我們需要知道的是, SVG 標記比簡單的 XML/HTML 更復雜, 並且對攻擊者充滿了未知的資源。

開始一個簡單的svg標籤,我們再繼續使用a標籤製造一個空錨點.這個a標籤創造了一個超連結。巢狀a標籤我們製造一個矩形來創造一個可點選區域,最後是像這樣的。

注意:由於是國外站。會導致js檔案載入失敗。請使用合理方法獲取國外js檔案

我們現在正在尋找一種與元素互動的方法, 但是由於xss過濾程式, 我們不能使用事件處理程式。所以我們將嘗試創造一個動畫,特別是這個<animate>標籤。

animate 標籤 採用父元素 (在我們的情況下為 rect 標籤) 的一個屬性並操作它的值, 例如 “寬度”。它在自己的屬性 “from”、”to” 和 “dur” (持續時間) 的幫助下建立動畫效果。

有趣的結論是, 我們實際上是在按順序改變 “寬度” 屬性的原始值,

但如果我們針對不同的屬性呢?讓我們取錨點 (a) 的 href, 它我們沒有設定, 但是是隱式的.在屬性和<rect>

中進行一些調整後, 我們就可以開始了。

通過點選我們的<rect>現在, 我們被重定向到谷歌的網站。因此, 要彈出一個警告框,我們只需要嘗試將其更改為 “javascript: alert(1)”

沒那麼容易,即使試圖使用 HTML 編碼欺騙xss過濾器也會被阻止

我們回到 SVG 屬性參考, 找到一個有趣的替代屬性”from” 和 “to”: 動畫元素也可以使用 “value” 屬性, 為動畫提供相同的值.只需將 “值” 設定為 “javascript: alert(1)”, 我們就會再次受阻.但是, 令人驚訝的是, 這次我們使用 HTML 編碼的形式成功彈出一個警報,“javas&#99ript:alert(1)”。

奇怪的是, 任何其他任意屬性與我們的模糊測試使用的有效載荷將觸發一個攔截, 但是似乎是一個 “黑名單”!

我們更改 <rect> 在他前面新增<image> 標籤, 更適合於吸引受害者的單擊。少量新增文字標記..

boom,點選後我們成功了

此繞過在版本51中找到, 儘管它可能在幾個以前的版本中使用,但是它目前仍然可以在本部落格寫作的時候(2017年8月14日)谷歌 Chrome v60最新版本的時候使用。

注:現在我測試依然可用。