十、跨站腳本攻擊
作者:Peter Yaworski
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
描述
跨站腳本意系,或者 XSS泥耀,涉及到站定包含非預(yù)期的 JavaScript 腳本代碼,它隨后傳給用于蛔添,用戶在瀏覽器中執(zhí)行了該代碼痰催。它的一個無害示例為:
alert('XSS');
這會調(diào)用 JavaScript 函數(shù)alert
,并創(chuàng)建一個簡單的彈出窗口迎瞧,帶有文本XSS
】淙埽現(xiàn)在,在這本書的前一個版本中凶硅,我推薦你在報告中使用這個例子缝裁。但是,一個非常成功的黑客告訴我這是個糟糕的例子足绅,因為漏洞的接收者通常沒有意識到這個問題的嚴重性捷绑,并且可能由于無害的示例而得到較低的獎金。
所以氢妈,考慮到這種情況粹污,使用示例開判斷 XSS 是否存在,但是報告時允懂,考慮漏洞如何影響站點厕怜,并解釋它。通過這樣蕾总,我并不是告訴廠商什么事 XSS粥航,而是解釋你可以使用它做什么事,來影響他們的站點生百。
這應(yīng)該包含識別你報告了何種 XSS递雀,它們包括:
反射型 XSS:這些攻擊并不是持久的,意思是 XSS 傳遞后通過簡單的請求和響應(yīng)執(zhí)行蚀浆。
存儲型 XSS:這些攻擊是持久的缀程,或已保存搜吧,之后在頁面加載時執(zhí)行給無意識的用戶。
Self XSS:這些攻擊也不是持久的杨凑,通常作為戲弄用戶的一部分滤奈,使它們自己執(zhí)行 XSS。
當你搜索漏洞時撩满,你會經(jīng)常發(fā)現(xiàn)蜒程,廠商不關(guān)心 Self XSS,它們只關(guān)心伺帘,它們的用戶是否自身存在缺陷昭躺,就像反射和存儲 XSS 的例子那樣。但是伪嫁,這并不是說领炫,你應(yīng)該完全忽略 Self XSS。
如果你發(fā)現(xiàn)了一個場景张咳,其中 Self XSS 可以執(zhí)行帝洪,但是不會存儲,你需要考慮該漏洞是否可以利用晶伦,是否有些東西可以結(jié)合起來碟狞,使其不再是 Self XSS?
最著名的 XSS 利用示例之一婚陪,就是 Samy Kamkar 執(zhí)行的 MySpace Samy 蠕蟲。在 2005 年 10 月频祝,Samy 利用了一個 MySpace 上的存儲型 XSS 漏洞泌参,允許它上傳 JavaScript 腳本。這個代碼隨后在任何人瀏覽它的 MySpace 主頁時執(zhí)行常空,因此使任何 Samy 用戶資料的瀏覽者成為其好友沽一。但是,更多的是漓糙,這個代碼也復(fù)制其自身到 Samy 新朋友的頁面铣缠,所以受感染頁面的瀏覽者使用下面這段話更新了它們的資料頁面:“but most of all, samy is my hero”(最重要的是,Samy 是我的英雄)昆禽。
雖然 Samy 的利用并不完全是惡意的蝗蛙,XSS 利用使其能夠盜取用戶、密碼醉鳖、銀行信息以及其他捡硅。雖然具有潛在的影響,修復(fù) XSS 漏洞通常很簡單盗棵,只需要軟件開發(fā)者在渲染時轉(zhuǎn)義用戶輸入(就像 HTML 注入那樣)壮韭。在攻擊者提交它們的時候北发,一些站點也會截斷可能的惡意字符。
鏈接
查看 OWASP XSS 過濾器繞過速查表喷屋。
示例
1. Shopify Wholesale
難度:低
URL:wholesale.shopify.com
報告鏈接:https://hackerone.com/reports/106293
報告日期:2015.12.21
獎金:$500
描述:
Shopify Wholesale 站點是一個簡單的頁面琳拨,擁有不同的操作調(diào)用 -- 輸入商品名稱并且點擊“搜索商品”,這里是截圖:
![](https://raw.githubusercontent.com/wizardforcel/web-hacking-101-zh/master/img/10-1-1.jpg)
Shopify Wholesale 站點截圖
這里的 XSS 漏洞是你可以找到的最基本的漏洞 - 輸入到搜索框中的文本并沒有轉(zhuǎn)移屯曹,所以任何輸入的 JavaScript 都會執(zhí)行狱庇。這里是漏洞披露中的提交文本:test’;alert(‘XSS’);’
。
它生效的原因是是牢,Shopify 接收用戶輸入僵井,執(zhí)行搜索查詢,當沒有結(jié)果返回時驳棱,Shopify 會打印一條消息批什,說該名稱下沒有找到任何商品,之后重新打印出用戶輸入社搅,而沒有任何轉(zhuǎn)義驻债。因此,提交的 JavaScript 打印到了頁面上形葬,瀏覽器將其解釋為 JavaScript 并執(zhí)行合呐。
重要結(jié)論
測試任何東西,特別要關(guān)注一些場景笙以,其中你所輸入的文本渲染給了你淌实。測試來判斷你是否可以包含 HTML 或者 JavaScript,來觀察站點如何處理它猖腕。同時嘗試編碼輸入拆祈,就像在 HTML 注入一章中描述的那樣。
XSS 漏洞并不需要很復(fù)雜倘感。這個漏洞是你能找到的最基本的東西 - 一個簡單的輸入文本字段放坏,這個漏洞并不處理用戶輸入。它在 2015 年 12 月 21 日發(fā)現(xiàn)老玛,并獲得了 $500 的獎金淤年。它所需要的所有東西,就是黑客的思維蜡豹。
2. Shopify 禮品卡購物車
難度:低
URL:hardware.shopify.com/cart
報告鏈接:https://hackerone.com/reports/95089
報告日期:2015.10.21
獎金:$500
描述:
Shopify 禮品卡站點允許用戶使用 HTML 表單設(shè)計它們自己的禮品卡麸粮,具體來說,這包括一個上傳輸入框余素,一些文本框豹休,以及其他。這里是一個截圖:
![](https://raw.githubusercontent.com/wizardforcel/web-hacking-101-zh/master/img/10-2-1.jpg)
Shopify 禮品卡表單截圖
這里的 XSS 漏洞在 JavaScript 輸入到了表單圖像名稱字段時出現(xiàn)桨吊。在使用 HTML 代理完成之后威根,會出現(xiàn)一個不錯的簡單任務(wù)凤巨。所以這里,原始的表單提交會包含:
Content-Disposition: form-data; name="properties[Artwork file]"
這會被解釋和修改為:
Content-Disposition: form-data; name="properties[Artwork file![](test)]";
重要結(jié)論
這里有兩個東西要注意洛搀,這會在尋找 XSS 漏洞時幫助你:
- 這里的漏洞實際上并不在文件輸入字段本身 -- 它在字段的名稱屬性中敢茁。所以當你尋找 XSS 漏洞的機會時,要記住玩轉(zhuǎn)所有可用的輸入值留美。
- 這里的值在通過代理操作之后提交彰檬。在一些場景中這是關(guān)鍵,其中在任何值實際提交給服務(wù)器之前谎砾,客戶端(你的瀏覽器)可能存在 JavaScript 來驗證值逢倍。
實際上,任何時候你看到驗證實時發(fā)生在你的瀏覽器中景图,這都是一個信號较雕,你需要測試這個字段!開發(fā)者可能犯下這個錯誤挚币,一旦這些值提交給了服務(wù)器亮蒋,它們不驗證提交的值是否存在惡意代碼,因為它們認為瀏覽器的 JavaScript 代碼已經(jīng)在輸入接收之前驗證過了妆毕。
3. Shopify 貨幣格式
難度:低
URL:SITE.myshopify.com/admin/settings/generalt
報告鏈接:https://hackerone.com/reports/104359
報告日期:2015.12.9
獎金:$1000
描述:
Shopify 的商店設(shè)置包含修改貨幣格式的功能慎玖。在 12 月 9 日,有報告稱笛粘,這些輸入框的值在建立社交媒體頁面時趁怔,沒有合理處理。
換句話說薪前,惡意用戶可以建立一個商店痕钢,并將貨幣設(shè)置修改為下面這個:
![](https://raw.githubusercontent.com/wizardforcel/web-hacking-101-zh/master/img/10-3-1.jpg)
Shopify 貨幣格式截圖
之后,用戶就可以開啟社交媒體售賣頻道序六。報告中的例子是 Fackbook 和 Twitter,以及當用戶點擊這個售賣頻道的選項卡之后蚤吹,JavaScript 會執(zhí)行例诀,產(chǎn)生 XSS 漏洞。
重要結(jié)論
XSS 漏洞在 JavaScript 文本不安全渲染時產(chǎn)生裁着。文本可能用于站點的多個位置繁涂,所以每個位置都應(yīng)該測試。這里二驰,Shopify 并沒有在商店和收款頁面包含 XSS扔罪,因為用戶允許在它們的商店中使用 JavaScript。在考慮字段是否用于外部社交媒體站點之前桶雀,很容易把這個漏洞補上矿酵。