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

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í),這里是要記住的一些事情:

  1. 測試任何東西

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

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

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

  3. 總是在測試時(shí)使用 HTML 代理

    當(dāng)你嘗試提交來自網(wǎng)站自身的惡意值時(shí),當(dāng)站點(diǎn)的 JavaScript 檢查出你的非法值時(shí),你可能會碰到假陽性。不要浪費(fèi)你的時(shí)間。通過瀏覽器提供合法值,之后使用你的代理修改這些值來執(zhí)行 JavaScript 并且提交。

    譯者注:對于所有前端(包括移動和桌面)滲透,都應(yīng)該這樣。就算不存在 XSS,也有可能挖到繞過和越權(quán)漏洞。

  4. XSS 漏洞發(fā)生在渲染的時(shí)候

    由于 XSS 在瀏覽器渲染文本時(shí)發(fā)生,要確保復(fù)查了站點(diǎn)的所有地方,其中使用了你的輸入值。逆天家的 JavaScript 可能不會立即渲染,但是會出現(xiàn)在后續(xù)的頁面中。這非常麻煩,但是你要留意站點(diǎn)何時(shí)過濾輸入,以及轉(zhuǎn)義輸出。如果是前者,尋找辦法來繞過輸入過濾器,因?yàn)殚_發(fā)者可能會犯懶,并且不會轉(zhuǎn)義渲染的輸入。

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

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

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

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

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