Kate Li (Taiwan)的部落格

首頁

google.org點擊劫持dom xss

作者 iacona 時間 2020-03-24
all

摘要

穀歌有一個項目相信許多人可能都沒聽過,那就是穀歌危機地圖(Google Crisis Map)。

雖然它現時仍在使用,但它似乎使用的人並不多。

由於這是一個較老的項目(創建於2012年)且很長一段時間沒有更新,囙此可以說這是一個查找漏洞的絕佳目標。

它被託管在google.org域,該域的嚴重程度雖不如google.com(針對用戶端漏洞),但它仍然是Google所擁有的功能變數名稱。

登入

如果你打開項目的主頁(google.org/crisismap),你將被重定向到默認地圖“天氣和事件”。這對我們來說意義不大,因為我們唯一能做的就是查看地圖。

這裡有一種可以管理和創建新地圖的方法。如果我們在網址末尾添加.maps尾碼,如:google.org/crisismap/.maps

打開此頁面後,你需要使用自己的Google帳戶登入才能繼續。現在,你應該能够看到一個帶有地圖清單的儀錶板。每個帳戶都有三個默認地圖。

出於某種原因,如果你在自己的域上發佈其中的一個地圖,則所有人都能在儀錶板的“已發佈地圖”欄位下看到該地圖。

創建地圖

如果按一下紅色的“Create Map”按鈕,你會看到一條消息顯示,gmail.com域不能用於創建新地圖。

這意味著我們需要使用包含我們自定義域的電子郵件進行登入。我們可以通過使用GSuite帳戶,或使用gmail.com以外域的電子郵件登入來執行該操作。之後,我們就可以創建一個新地圖了。

按一下“Continue”按鈕後,我們將被重定向到我們可以編輯新創建地圖的頁面。

查找XSS

首先,我們將向地圖添加一個新圖層。

將會彈出用於創建新圖層的彈框。

輸入任意內容作為“Title”。

但這只是在將實際保存請求發送到後端之前的用戶端驗證。

修改請求

我們可以使用像Fiddler或Burp Suite這樣的Web調試代理,來修改請求並發送修改後的版本。

測試XSS

現在請求已發送並保存,囙此讓我們重新加載頁面。

打開“Layers”,然後按一下“Download KML”。

點擊下載連結後,XSS將被觸發,並彈出帶有域的警告框!

如何修復

為什麼會這樣?URL驗證僅發生在前端而不是後端。這意味著可以通過驗證後端的URL來解决這個問題。

但穀歌並沒有這麼做。而是在URL保存到後端時檢查URL,顯示在DOM中前URL已被驗證。

囙此,如果URL無效,則不會將其用作連結,並將使用一個無意義的值,如:about:invalid代替。

a href="about:invalid#zClosurez"Download KML/a

影響

好的,現在我們有一個包含payload指向javascript: URI的連結。該連結位於用於管理地圖的頁面上。你必須登入才能獲取該頁面的存取權限。

顯然這是self-XSS,因為只有我們能够執行該XSS。

現在,我們要做的就是如何將self-XSS變成真正的有影響的XSS?

新增嚴重性

這樣,任何人都可以打開此URL並查看我們創建的地圖。想要使XSS正常工作,用戶需要打開或導航到此頁面,打開“Layers”並按一下“Download KML”連結。

這意味著它已不再是self-XSS,但缺點是這需要用戶操作的步驟過多。

點擊劫持

google.org上缺少該標頭,則意味著我們可以將已發佈的地圖嵌入到我們自己網站上的iframe中。

iframe在我們的網站上被加載–這意味著我們可以使用CSS和JavaScript來操作它。

我想到的第一件事,就是將黑色的DIV放置在我們希望用戶點擊的位置。然後檢測按一下事件並將DIV移動到第二個點。

這很有效,但仍需要用戶點擊兩個不同的位置。

但有個更好的方案就是絕對定位iframe,這樣用戶就不必移動光標了。

以下演示我們將iframe縮放了50倍,並將其移動了到我們希望用戶按一下的位置。首先轉到“Layers”選項卡。點擊後,它會在帶有payload的連結上移動。

你可以通過在下麵的iframe中按一下兩次來嘗試該示例:

總結

不要相信用戶輸入。在使用它之前一定要驗證/轉義它,甚至在保存它之前最好檢查它是否有效。

通過正確設定X-Frame-Options標頭,不允許其他域將你的網站嵌入iframe。

在查找漏洞時,請嘗試找到該漏洞可能的最高嚴重性。

例如,如果你找到一個XSS,請嘗試通過查找錯誤配寘的Cookie或端點接管帳戶。

尋找仍然適合bug獎勵計畫範圍的舊項目。我在穀歌危機地圖上發現了另外兩個漏洞,後續我也會發佈有關它們的文章。

時間線

2018.12.09:報告漏洞

2018.12.10:優先權改為P1

2018.12.10:驗證

2018.12.10:確認

2018.12.11:發放獎勵