4. 雅虎郵件存儲(chǔ)型 XSS
難度:低
URL:Yahoo Mail
報(bào)告鏈接:https://klikki.fi/adv/yahoo.html
報(bào)告日期:2015.12.26
獎(jiǎng)金:$10000
描述:
雅虎郵件編輯器允許人們將圖片通過(guò) HTML IMG 標(biāo)簽嵌入到郵件中。這個(gè)漏洞在 HTML IMG 標(biāo)簽格式錯(cuò)誤或者無(wú)效時(shí)出現(xiàn)纫溃。
多數(shù) HTML 標(biāo)簽接受屬性宽菜,它是有關(guān) HTML 標(biāo)簽的額外信息盼理。例如,IMG 標(biāo)簽接受src
屬性智亮,指向要渲染的圖像的地址忆某。此外一些屬性是布爾屬性,意思是如果他們存在阔蛉,他們?cè)?HTML 表現(xiàn)為真值弃舒,而當(dāng)他們被忽略時(shí),他們表現(xiàn)為假值。
對(duì)于這個(gè)漏洞聋呢,Jouko Pynnonen 發(fā)現(xiàn)苗踪,如果它將布爾屬性添加到 HTML 標(biāo)簽中,并帶有一個(gè)值削锰,雅虎郵件就會(huì)移除該值但保留等號(hào)通铲。這里是來(lái)自Klikki.fi
的一個(gè)例子:
<INPUT TYPE="checkbox" CHECKED="hello" NAME="check box">
這里,輸入標(biāo)簽可能包含checked
屬性器贩,表示復(fù)選框是否渲染為選中颅夺。根據(jù)上面描述的歇息,這會(huì)變成:
<INPUT TYPE="checkbox" CHECKED= NAME="check box">
要注意 HTML 從擁有checked
值變成了沒(méi)有值但是仍然包含等號(hào)蛹稍。
這看起來(lái)是無(wú)害的吧黄,但是根據(jù) HTML 規(guī)范,瀏覽器將這個(gè)CHECKED
看做擁有值NAME=”check
唆姐,并且該input
標(biāo)簽有用第三個(gè)屬性box
拗慨,它沒(méi)有值。這是對(duì)于沒(méi)有引號(hào)的屬性值厦酬,因?yàn)?HTML 允許零個(gè)或多個(gè)空格字符在等號(hào)周?chē)?/p>
為了利用它胆描,Jouko 提交了下面的 IMG 標(biāo)簽:
<img ismap='xxx' itemtype='yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//'>
雅虎郵件會(huì)把它變成:
<img ismap=itemtype=yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//>
因此,瀏覽器會(huì)渲染 IMG 標(biāo)簽仗阅,它占據(jù)整個(gè)瀏覽器的窗口昌讲,當(dāng)鼠標(biāo)移到圖片上的時(shí)候,會(huì)執(zhí)行 JavaScript减噪。
重要結(jié)論
傳遞格式錯(cuò)誤或損壞的 HTML 是個(gè)不錯(cuò)的方法短绸,來(lái)測(cè)試站點(diǎn)如何解析輸入。作為一個(gè)黑客筹裕,考慮到開(kāi)發(fā)者沒(méi)有考慮的東西十分重要醋闭。例如,使用常規(guī)的圖片標(biāo)簽朝卒,如果你傳遞兩個(gè)
src
屬性會(huì)怎么樣证逻?它會(huì)如何渲染?
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
獎(jiǎng)金:未知
描述:
2015 年 9 月抗斤,Mahmoud Jamal 使用 Google 圖像來(lái)為它的 HackerOne 資料尋找一個(gè)圖片囚企。在瀏覽的時(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
也改為了相同值。
它這個(gè)時(shí)候非常激動(dòng)黍特,點(diǎn)擊了鏈接蛙讥,但是沒(méi)有執(zhí)行 JavaScript,因?yàn)?Google URL 改為了別的東西衅澈。結(jié)果键菱,Google 的代碼在鼠標(biāo)按下時(shí),通過(guò)onmousedown
JavaScript 回調(diào)修改了 URL今布。
考慮到這個(gè)经备,Mahmoud 決定使用它的鍵盤(pán),嘗試使用 TAB 鍵在頁(yè)面上切換部默。當(dāng)他來(lái)到View Image
按鈕時(shí)侵蒙,觸發(fā)了 JavaScript,產(chǎn)生了 XSS 漏洞傅蹂。這里是圖片:
![](https://raw.githubusercontent.com/wizardforcel/web-hacking-101-zh/master/img/10-5-1.jpg)
Google XSS 漏洞
重要結(jié)論
始終留意這種漏洞纷闺。很輕易就能假設(shè),僅僅由于公司太大或者太知名份蝴,任何東西都被找到了犁功。但是,公司始終會(huì)修改代碼婚夫。
此外浸卦,有大量方法來(lái)執(zhí)行 JavaScript,這里在看到 Google 使用
onmousedown
事件處理器修改值之后案糙,很容易就放棄了限嫌。這意味著任何時(shí)候使用鼠標(biāo)點(diǎn)擊了鏈接,值都會(huì)改變时捌。
6. Google Tagmanager 存儲(chǔ)型 XSS
難度:中
URL:tagmanager.google.com
報(bào)告鏈接:https://blog.it-securityguard.com/bugbounty-the-5000-google-xss
報(bào)告日期:2014.10.31
獎(jiǎng)金:$5000
描述:
2014 年 10 月怒医,Patrik Fehrehbach 在 Google 上發(fā)現(xiàn)了存儲(chǔ)型 XSS 漏洞。這個(gè)報(bào)告的有趣部分是奢讨,他如何設(shè)法繞過(guò) Google 獲取載荷稚叹。
Google Tagmanager 是一個(gè) SEO 工具,使?fàn)I銷(xiāo)人員添加和更新站點(diǎn)標(biāo)簽變得容易 -- 包含轉(zhuǎn)化追蹤拿诸、站點(diǎn)分析入录、重營(yíng)銷(xiāo)、以及更多佳镜。為此,它擁有大量的表單凡桥,便于用戶(hù)交互蟀伸。所以,Patrik 以嘗試將 XSS 載荷輸入到表單字段中開(kāi)始,類(lèi)似于#>imgsrc=/ onerror=alert(3)>
啊掏。如果接受了蠢络,這就會(huì)閉合現(xiàn)有的 HTML >
,之后嘗試加載不存在的圖片迟蜜,這會(huì)執(zhí)行onerror
JavaScript刹孔,alert(3)
。
但是娜睛,這沒(méi)有效果髓霞。Google 合理處理了輸入。Patrik 注意到了一個(gè)替代方案 -- Google 提供了上傳帶有多個(gè)標(biāo)簽的 JSON 文件的功能畦戒。所以方库,它下載了樣例并上傳:
"data": {
"name": "#"><img src=/ onerror=alert(3)>",
"type": "AUTO_EVENT_VAR",
"autoEventVarMacro": {
"varType": "HISTORY_NEW_URL_FRAGMENT"
}
}
這里,你會(huì)注意到障斋,標(biāo)簽的名稱(chēng)就是他的 XSS 載荷纵潦。結(jié)果,Google 沒(méi)有處理來(lái)自上傳文件的輸入垃环,并執(zhí)行了載荷邀层。
重要結(jié)論
這里有兩個(gè)有趣的事情。首先Patrik 發(fā)現(xiàn)了替代方案來(lái)提供輸入 -- 要留意這個(gè)東西遂庄,并測(cè)試目標(biāo)提供的所有方法來(lái)輸入數(shù)據(jù)寥院。其次,Google 處理了輸入涧团,但是在渲染時(shí)沒(méi)有轉(zhuǎn)義只磷。假設(shè)它轉(zhuǎn)義了 Patrik 的輸入,載荷就不會(huì)生效泌绣,因?yàn)?HTML 會(huì)被轉(zhuǎn)換成無(wú)害的字符钮追。
總結(jié)
XSS 漏洞對(duì)站點(diǎn)開(kāi)發(fā)者展現(xiàn)了真實(shí)的風(fēng)險(xiǎn),并且仍然在站點(diǎn)上流行阿迈,通常顯而易見(jiàn)元媚。通常簡(jiǎn)單提交 JavaScript alert
方法的調(diào)用,alert('test')
苗沧,你可以檢查輸入字段是否存在漏洞刊棕。此外,你可以將它與 HTML 注入組合待逞,并提交 ASCII 編碼的字符來(lái)觀(guān)察文本是否被渲染和解釋甥角。
在搜索 XSS 漏洞時(shí),這里是要記住的一些事情:
-
測(cè)試任何東西
無(wú)論你在瀏覽什么站點(diǎn)以及什么時(shí)候?yàn)g覽识樱,總是要保持挖掘嗤无!不要覺(jué)得站點(diǎn)太大或者太復(fù)雜震束,而沒(méi)有漏洞。機(jī)會(huì)正在注視著你并請(qǐng)求你的測(cè)試当犯,就像
wholesale.shopify.com
那樣垢村。Google Tagmanager 存儲(chǔ)型 XSS 漏洞就是尋找替代方案來(lái)向站點(diǎn)添加標(biāo)簽的結(jié)果。 -
漏洞可能存在于任何表單值
例如嚎卫,Shopify 的禮品卡站點(diǎn)上的漏洞嘉栓,通過(guò)利用和上傳文件相關(guān)的名稱(chēng)字段來(lái)時(shí)間,并不是實(shí)際的文件字段本身拓诸。
-
總是在測(cè)試時(shí)使用 HTML 代理
當(dāng)你嘗試提交來(lái)自網(wǎng)站自身的惡意值時(shí)侵佃,當(dāng)站點(diǎn)的 JavaScript 檢查出你的非法值時(shí),你可能會(huì)碰到假陽(yáng)性恰响。不要浪費(fèi)你的時(shí)間趣钱。通過(guò)瀏覽器提供合法值,之后使用你的代理修改這些值來(lái)執(zhí)行 JavaScript 并且提交胚宦。
譯者注:對(duì)于所有前端(包括移動(dòng)和桌面)滲透首有,都應(yīng)該這樣。就算不存在 XSS枢劝,也有可能挖到繞過(guò)和越權(quán)漏洞井联。
-
XSS 漏洞發(fā)生在渲染的時(shí)候
由于 XSS 在瀏覽器渲染文本時(shí)發(fā)生,要確保復(fù)查了站點(diǎn)的所有地方您旁,其中使用了你的輸入值烙常。逆天家的 JavaScript 可能不會(huì)立即渲染,但是會(huì)出現(xiàn)在后續(xù)的頁(yè)面中鹤盒。這非常麻煩蚕脏,但是你要留意站點(diǎn)何時(shí)過(guò)濾輸入,以及轉(zhuǎn)義輸出侦锯。如果是前者驼鞭,尋找辦法來(lái)繞過(guò)輸入過(guò)濾器,因?yàn)殚_(kāi)發(fā)者可能會(huì)犯懶尺碰,并且不會(huì)轉(zhuǎn)義渲染的輸入挣棕。
-
測(cè)試非預(yù)期的值
不要總是提供預(yù)期類(lèi)型的值。當(dāng) HTML 雅虎郵件的漏洞被發(fā)現(xiàn)時(shí)亲桥,提供了非預(yù)期的 HTML IMG 屬性洛心。要跳出思維定式,思考開(kāi)發(fā)者要尋找什么题篷,并且之后嘗試提供一些不匹配這些預(yù)期的東西词身。這包含尋找新的方式來(lái)執(zhí)行潛在的 JavaScript,例如繞過(guò) Google 圖片的
onmousemove
事件番枚。