4. 雅虎郵件存儲型 XSS
難度:低
URL:Yahoo Mail
報(bào)告鏈接:https://klikki.fi/adv/yahoo.html
報(bào)告日期:2015.12.26
獎金:$10000
描述:
雅虎郵件編輯器允許人們將圖片通過 HTML IMG 標(biāo)簽嵌入到郵件中。這個漏洞在 HTML IMG 標(biāo)簽格式錯誤或者無效時(shí)出現(xiàn)。
多數(shù) HTML 標(biāo)簽接受屬性,它是有關(guān) HTML 標(biāo)簽的額外信息。例如,IMG 標(biāo)簽接受src屬性,指向要渲染的圖像的地址。此外一些屬性是布爾屬性,意思是如果他們存在,他們在 HTML 表現(xiàn)為真值,而當(dāng)他們被忽略時(shí),他們表現(xiàn)為假值。
對于這個漏洞,Jouko Pynnonen 發(fā)現(xiàn),如果它將布爾屬性添加到 HTML 標(biāo)簽中,并帶有一個值,雅虎郵件就會移除該值但保留等號。這里是來自Klikki.fi的一個例子:
<INPUT TYPE="checkbox" CHECKED="hello" NAME="check box">
這里,輸入標(biāo)簽可能包含checked屬性,表示復(fù)選框是否渲染為選中。根據(jù)上面描述的歇息,這會變成:
<INPUT TYPE="checkbox" CHECKED= NAME="check box">
要注意 HTML 從擁有checked值變成了沒有值但是仍然包含等號。
這看起來是無害的,但是根據(jù) HTML 規(guī)范,瀏覽器將這個CHECKED看做擁有值NAME=”check,并且該input標(biāo)簽有用第三個屬性box,它沒有值。這是對于沒有引號的屬性值,因?yàn)?HTML 允許零個或多個空格字符在等號周圍。
為了利用它,Jouko 提交了下面的 IMG 標(biāo)簽:
<img ismap='xxx' itemtype='yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//'>
雅虎郵件會把它變成:
<img ismap=itemtype=yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//>
因此,瀏覽器會渲染 IMG 標(biāo)簽,它占據(jù)整個瀏覽器的窗口,當(dāng)鼠標(biāo)移到圖片上的時(shí)候,會執(zhí)行 JavaScript。
重要結(jié)論
傳遞格式錯誤或損壞的 HTML 是個不錯的方法,來測試站點(diǎn)如何解析輸入。作為一個黑客,考慮到開發(fā)者沒有考慮的東西十分重要。例如,使用常規(guī)的圖片標(biāo)簽,如果你傳遞兩個
src屬性會怎么樣?它會如何渲染?
5. Google 圖片搜索
難度:中
URL:images.google.com
報(bào)告鏈接:http://zombiehelp54.blogspot.ca/2015/09/how-i-found-xss-vulnerability-in-google.html
報(bào)告日期:2015.9.12
獎金:未知
描述:
2015 年 9 月,Mahmoud Jamal 使用 Google 圖像來為它的 HackerOne 資料尋找一個圖片。在瀏覽的時(shí)候,它注意到 Google 圖片的 URL 中有一些有趣的東西。
http://www.google.com/imgres?imgurl=https://lh3.googleuser.com/...
注意到實(shí)際的 URL 中存在 imgurl的引用。在鼠標(biāo)移到縮略圖上的時(shí)候,Mahoumd 注意到了錨標(biāo)簽的href屬性包含了相同的 URL。因此,它嘗試將參數(shù)改為javascript:alert(1),并且注意到錨標(biāo)簽的href也改為了相同值。
它這個時(shí)候非常激動,點(diǎn)擊了鏈接,但是沒有執(zhí)行 JavaScript,因?yàn)?Google URL 改為了別的東西。結(jié)果,Google 的代碼在鼠標(biāo)按下時(shí),通過onmousedown JavaScript 回調(diào)修改了 URL。
考慮到這個,Mahmoud 決定使用它的鍵盤,嘗試使用 TAB 鍵在頁面上切換。當(dāng)他來到View Image按鈕時(shí),觸發(fā)了 JavaScript,產(chǎn)生了 XSS 漏洞。這里是圖片:
Google XSS 漏洞
重要結(jié)論
始終留意這種漏洞。很輕易就能假設(shè),僅僅由于公司太大或者太知名,任何東西都被找到了。但是,公司始終會修改代碼。
此外,有大量方法來執(zhí)行 JavaScript,這里在看到 Google 使用
onmousedown事件處理器修改值之后,很容易就放棄了。這意味著任何時(shí)候使用鼠標(biāo)點(diǎn)擊了鏈接,值都會改變。
6. Google Tagmanager 存儲型 XSS
難度:中
URL:tagmanager.google.com
報(bào)告鏈接:https://blog.it-securityguard.com/bugbounty-the-5000-google-xss
報(bào)告日期:2014.10.31
獎金:$5000
描述:
2014 年 10 月,Patrik Fehrehbach 在 Google 上發(fā)現(xiàn)了存儲型 XSS 漏洞。這個報(bào)告的有趣部分是,他如何設(shè)法繞過 Google 獲取載荷。
Google Tagmanager 是一個 SEO 工具,使?fàn)I銷人員添加和更新站點(diǎn)標(biāo)簽變得容易 -- 包含轉(zhuǎn)化追蹤、站點(diǎn)分析、重營銷、以及更多。為此,它擁有大量的表單,便于用戶交互。所以,Patrik 以嘗試將 XSS 載荷輸入到表單字段中開始,類似于#>imgsrc=/ onerror=alert(3)>。如果接受了,這就會閉合現(xiàn)有的 HTML >,之后嘗試加載不存在的圖片,這會執(zhí)行onerror JavaScript,alert(3)。
但是,這沒有效果。Google 合理處理了輸入。Patrik 注意到了一個替代方案 -- Google 提供了上傳帶有多個標(biāo)簽的 JSON 文件的功能。所以,它下載了樣例并上傳:
"data": {
"name": "#"><img src=/ onerror=alert(3)>",
"type": "AUTO_EVENT_VAR",
"autoEventVarMacro": {
"varType": "HISTORY_NEW_URL_FRAGMENT"
}
}
這里,你會注意到,標(biāo)簽的名稱就是他的 XSS 載荷。結(jié)果,Google 沒有處理來自上傳文件的輸入,并執(zhí)行了載荷。
重要結(jié)論
這里有兩個有趣的事情。首先Patrik 發(fā)現(xiàn)了替代方案來提供輸入 -- 要留意這個東西,并測試目標(biāo)提供的所有方法來輸入數(shù)據(jù)。其次,Google 處理了輸入,但是在渲染時(shí)沒有轉(zhuǎn)義。假設(shè)它轉(zhuǎn)義了 Patrik 的輸入,載荷就不會生效,因?yàn)?HTML 會被轉(zhuǎn)換成無害的字符。
總結(jié)
XSS 漏洞對站點(diǎn)開發(fā)者展現(xiàn)了真實(shí)的風(fēng)險(xiǎn),并且仍然在站點(diǎn)上流行,通常顯而易見。通常簡單提交 JavaScript alert方法的調(diào)用,alert('test'),你可以檢查輸入字段是否存在漏洞。此外,你可以將它與 HTML 注入組合,并提交 ASCII 編碼的字符來觀察文本是否被渲染和解釋。
在搜索 XSS 漏洞時(shí),這里是要記住的一些事情:
-
測試任何東西
無論你在瀏覽什么站點(diǎn)以及什么時(shí)候?yàn)g覽,總是要保持挖掘!不要覺得站點(diǎn)太大或者太復(fù)雜,而沒有漏洞。機(jī)會正在注視著你并請求你的測試,就像
wholesale.shopify.com那樣。Google Tagmanager 存儲型 XSS 漏洞就是尋找替代方案來向站點(diǎn)添加標(biāo)簽的結(jié)果。 -
漏洞可能存在于任何表單值
例如,Shopify 的禮品卡站點(diǎn)上的漏洞,通過利用和上傳文件相關(guān)的名稱字段來時(shí)間,并不是實(shí)際的文件字段本身。
-
總是在測試時(shí)使用 HTML 代理
當(dāng)你嘗試提交來自網(wǎng)站自身的惡意值時(shí),當(dāng)站點(diǎn)的 JavaScript 檢查出你的非法值時(shí),你可能會碰到假陽性。不要浪費(fèi)你的時(shí)間。通過瀏覽器提供合法值,之后使用你的代理修改這些值來執(zhí)行 JavaScript 并且提交。
譯者注:對于所有前端(包括移動和桌面)滲透,都應(yīng)該這樣。就算不存在 XSS,也有可能挖到繞過和越權(quán)漏洞。
-
XSS 漏洞發(fā)生在渲染的時(shí)候
由于 XSS 在瀏覽器渲染文本時(shí)發(fā)生,要確保復(fù)查了站點(diǎn)的所有地方,其中使用了你的輸入值。逆天家的 JavaScript 可能不會立即渲染,但是會出現(xiàn)在后續(xù)的頁面中。這非常麻煩,但是你要留意站點(diǎn)何時(shí)過濾輸入,以及轉(zhuǎn)義輸出。如果是前者,尋找辦法來繞過輸入過濾器,因?yàn)殚_發(fā)者可能會犯懶,并且不會轉(zhuǎn)義渲染的輸入。
-
測試非預(yù)期的值
不要總是提供預(yù)期類型的值。當(dāng) HTML 雅虎郵件的漏洞被發(fā)現(xiàn)時(shí),提供了非預(yù)期的 HTML IMG 屬性。要跳出思維定式,思考開發(fā)者要尋找什么,并且之后嘗試提供一些不匹配這些預(yù)期的東西。這包含尋找新的方式來執(zhí)行潛在的 JavaScript,例如繞過 Google 圖片的
onmousemove事件。