Web Hacking 101 中文版 十、跨站腳本攻擊(二)

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值變成了沒有值但是仍然包含等號(hào)。

這看起來(lái)是無(wú)害的,但是根據(jù) HTML 規(guī)范,瀏覽器將這個(gè)CHECKED看做擁有值NAME=”check,并且該input標(biāo)簽有用第三個(gè)屬性box,它沒有值。這是對(duì)于沒有引號(hào)的屬性值,因?yàn)?HTML 允許零個(gè)或多個(gè)空格字符在等號(hào)周圍。

為了利用它,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è)黑客,考慮到開發(fā)者沒有考慮的東西十分重要。例如,使用常規(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)擊了鏈接,但是沒有執(zhí)行 JavaScript,因?yàn)?Google URL 改為了別的東西。結(jié)果,Google 的代碼在鼠標(biāo)按下時(shí),通過(guò)onmousedown JavaScript 回調(diào)修改了 URL。

考慮到這個(gè),Mahmoud 決定使用它的鍵盤,嘗試使用 TAB 鍵在頁(yè)面上切換。當(dāng)他來(lái)到View Image按鈕時(shí),觸發(fā)了 JavaScript,產(chǎn)生了 XSS 漏洞。這里是圖片:

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銷人員添加和更新站點(diǎn)標(biāo)簽變得容易 -- 包含轉(zhuǎn)化追蹤、站點(diǎn)分析、重營(yíng)銷、以及更多。為此,它擁有大量的表單,便于用戶交互。所以,Patrik 以嘗試將 XSS 載荷輸入到表單字段中開始,類似于#>imgsrc=/ onerror=alert(3)>。如果接受了,這就會(huì)閉合現(xiàn)有的 HTML >,之后嘗試加載不存在的圖片,這會(huì)執(zhí)行onerror JavaScript,alert(3)

但是,這沒有效果。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)簽的名稱就是他的 XSS 載荷。結(jié)果,Google 沒有處理來(lái)自上傳文件的輸入,并執(zhí)行了載荷。

重要結(jié)論

這里有兩個(gè)有趣的事情。首先Patrik 發(fā)現(xiàn)了替代方案來(lái)提供輸入 -- 要留意這個(gè)東西,并測(cè)試目標(biāo)提供的所有方法來(lái)輸入數(shù)據(jù)。其次,Google 處理了輸入,但是在渲染時(shí)沒有轉(zhuǎn)義。假設(shè)它轉(zhuǎn)義了 Patrik 的輸入,載荷就不會(huì)生效,因?yàn)?HTML 會(huì)被轉(zhuǎn)換成無(wú)害的字符。

總結(jié)

XSS 漏洞對(duì)站點(diǎn)開發(fā)者展現(xiàn)了真實(shí)的風(fēng)險(xiǎn),并且仍然在站點(diǎn)上流行,通常顯而易見。通常簡(jiǎn)單提交 JavaScript alert方法的調(diào)用,alert('test'),你可以檢查輸入字段是否存在漏洞。此外,你可以將它與 HTML 注入組合,并提交 ASCII 編碼的字符來(lái)觀察文本是否被渲染和解釋。

在搜索 XSS 漏洞時(shí),這里是要記住的一些事情:

  1. 測(cè)試任何東西

    無(wú)論你在瀏覽什么站點(diǎn)以及什么時(shí)候?yàn)g覽,總是要保持挖掘!不要覺得站點(diǎn)太大或者太復(fù)雜,而沒有漏洞。機(jī)會(huì)正在注視著你并請(qǐng)求你的測(cè)試,就像wholesale.shopify.com那樣。Google Tagmanager 存儲(chǔ)型 XSS 漏洞就是尋找替代方案來(lái)向站點(diǎn)添加標(biāo)簽的結(jié)果。

  2. 漏洞可能存在于任何表單值

    例如,Shopify 的禮品卡站點(diǎn)上的漏洞,通過(guò)利用和上傳文件相關(guān)的名稱字段來(lái)時(shí)間,并不是實(shí)際的文件字段本身。

  3. 總是在測(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)漏洞。

  4. 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)殚_發(fā)者可能會(huì)犯懶,并且不會(huì)轉(zhuǎn)義渲染的輸入。

  5. 測(cè)試非預(yù)期的值

    不要總是提供預(yù)期類型的值。當(dāng) HTML 雅虎郵件的漏洞被發(fā)現(xiàn)時(shí),提供了非預(yù)期的 HTML IMG 屬性。要跳出思維定式,思考開發(fā)者要尋找什么,并且之后嘗試提供一些不匹配這些預(yù)期的東西。這包含尋找新的方式來(lái)執(zhí)行潛在的 JavaScript,例如繞過(guò) Google 圖片的onmousemove事件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 十、跨站腳本攻擊 作者:Peter Yaworski 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 描述 跨站...
    布客飛龍閱讀 617評(píng)論 0 7
  • HTML注入 HTML 注入向站點(diǎn)和開發(fā)者展示了漏洞,因?yàn)樗梢杂糜谡`導(dǎo)用戶,并且欺騙它們來(lái)提交一些敏感信息,或者...
    Cherishao閱讀 1,087評(píng)論 0 5
  • 跨站腳本(XSS)是web應(yīng)用中的一種典型的計(jì)算機(jī)安全漏洞。XSS允許攻擊者可以在其他用戶瀏覽的web頁(yè)面中注入客...
    留七七閱讀 8,300評(píng)論 1 26
  • 1、漏洞概述 XSS 是指攻擊者在網(wǎng)頁(yè)中嵌入客戶端腳本,通常是 JavaScript 編寫的惡意代碼,當(dāng)用戶使 用...
    linkally閱讀 1,785評(píng)論 2 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139

友情鏈接更多精彩內(nèi)容