反射型XSS漏洞详解
反射型XSS漏洞
如果一個應用程序使用動態頁面向用戶顯示錯誤消息,就會造成一種常見的XSS漏洞。通常,該頁面會使用一個包含消息文本的參數,并在響應中將這個文 本返回給用戶。對于開發者而言,使用這種機制非常方便,因為它允許他們從應用程序中調用一個定制的錯誤頁面,而不需要對錯誤頁面中的消息分別進行硬編碼。
例如,下面的URL返回如圖12-1所示的錯誤消息:
https://wahh-app.com/error.php?message=Sorry%2c+an+error+occurred
分析被返回頁面的HTML源代碼后,我們發現,應用程序只是簡單復制URL中message參數的值,并將這個值插入到位于適當位置的錯誤頁面模板中:
| ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0 |
| 一條動態生成的錯誤消息 |
提取用戶提交的輸入并將其插入到服務器響應的HTML代碼中,這是XSS漏洞的一個明顯特征;如果應用程序沒有實施任何過濾或凈化措施,那么它很容易受到攻擊。讓我們來看看如何實施攻擊。
下面的URL經過專門設計,它用一段生成彈出對話框的JavaScript代碼代替錯誤消息:
請求這個URL將會生成一個HTML頁面,其中包含以下替代原始消息的腳本:
可以肯定,如果該頁面在用戶的瀏覽器中顯示,彈出消息就會出現,如圖12-2所示。
| 一次概念驗證XSS攻擊 |
進行這個簡單的測試有助于澄清兩個重要問題:首先,message參數的內容可用任何返回給瀏覽器的數據替代;其次,無論服務器端應用程序如何處理這些數據(如果有),都無法阻止提交JavaScript代碼,一旦錯誤頁面在瀏覽器中顯示,這些代碼就會執行。
在現實世界的Web應用程序中存在的XSS漏洞,有近75%的漏洞屬于這種簡單的XSS bug。由于利用這種漏洞需要設計一個包含嵌入式JavaScript代碼的請求,隨后這些代碼又被反射到任何提出請求的用戶,因而它被稱作反射型 XSS。攻擊有效載荷分別通過一個單獨的請求與響應進行傳送和執行。為此,有時它也被稱為一階XSS。
利用漏洞
下文將會介紹,利用XSS漏洞攻擊應用程序其他用戶的方式有很多種。最簡單的一種攻擊,也是我們常用于說明XSS漏洞潛在影響的一種攻擊,可導致攻擊者截獲一名通過驗證的用戶的會話。劫持用戶的會話后,攻擊者就可以訪問該用戶經授權訪問的所有數據和功能。
實施這種攻擊的步驟如圖12-3所示。
?
| 反射型XSS攻擊的實施步驟 |
(1) 用戶正常登錄應用程序,得到一個包含會話令牌的 cookie:
?
(2) 攻擊者通過某種方法(詳情見下文)向用戶提交以下 URL:
?
和前面生成一個對話框消息的示例一樣,這個URL包含嵌入式 JavaScript 代碼。但是,這個示例中的攻擊有效載荷更加惡毒。
(3) 用戶從應用程序中請求攻擊者傳送給他們的URL。
(4) 服務器響應用戶的請求。由于應用程序中存在XSS漏洞,響應中包含攻擊者創建的 JavaScript代碼。
(5) 用戶瀏覽器收到攻擊者的JavaScript代碼,像執行從應用程序收到的其他代碼一樣,瀏覽器執行這段代碼。
(6) 攻擊者創建的惡意JavaScript代碼為:
?
這段代碼可讓用戶瀏覽器向wahh-attacker.com(攻擊者擁有的一個域)提出一個請求。請求中包含用戶訪問應用程序的當前會話令牌:
?
攻擊者監控訪問wahh-attacker.com的請求并收到用戶的請求。攻擊者使用截獲的令牌劫持用戶的會話,從而訪問該用戶的個人信息,并"代表"該用戶執行任意操作。
注解 第6章已經介紹過,一些應用程序保存一個持久性cookie,以在用戶每次訪問時重新對其進行有效驗證,例如,執行"記住我"功能。這時,就 沒有必要執行上述過程中的第一個步驟。即使目標用戶并未處于活動狀態或登錄應用程序,攻擊者仍然能夠成功實現目標。為此,以這種方式使用cookie的應 用程序更易受到XSS漏洞的影響。
完成上述步驟后,讀者可能會心存疑惑:如果攻擊者能夠誘使用戶訪問他選擇的URL,那么他為什么還要費這么大力氣通過應用程序中的XSS漏洞傳送自 己的惡意JavaScript代碼呢?為什么他不在wahh-attacker.com上保存一段惡意腳本,并向用戶傳送一個直接指向這段腳本的鏈接呢? 這段腳本不是可以和上例中的腳本一樣執行嗎?
實際上,攻擊者之所以利用XSS漏洞,有兩個重要的原因。第一個也是最重要的原因在于,攻擊者的目的并不僅僅是執行任意一段腳本,而是截獲用戶的會 話令牌。瀏覽器不允許任何舊有腳本訪問一個站點的cookie,否則,會話就很容易被劫持。而且,只有發布cookie的站點能夠訪問這些cookie: 僅在返回發布站點的HTTP請求中提交cookie;只有通過該站點返回的頁面所包含或加載的JavaScript才能訪問cookie。因此,如果 wahh-attacker.com上的一段腳本查詢 document. cookie,它將無法獲得wahh-app.com發布的cookie,劫持攻擊也不會成功。
就用戶的瀏覽器而言,利用XSS漏洞的攻擊之所以取得成功,是因為攻擊者的惡意JavaScript是由wahh-app.com送交給它的。當用戶請求攻擊者的URL時,瀏覽器向https://wahh-app.com/?error.php提交一個請求,然后應用程序返回一個包含一段JavaScript的頁面。和從wahh-app.com收到的任何 JavaScript一樣,瀏覽器執行這段腳本,因為用戶信任wahh-app.com。這也就是為何攻擊的腳本能夠訪問wahh-app.com發布的 cookie的原因,雖然它實際來自其他地方。這也是為何該漏洞被稱作跨站點腳本的原因。
注解 對腳本能夠訪問的數據實施這種限制,是所有現代瀏覽器所執行的更加通用的同源策略的一部分。實施這個策略是為了在瀏覽器訪問的不同Web站點之間設立障礙,防止它們相互干擾。關于這個策略,必須了解以下一些主要特點。
一個域的頁面可向另一個域提出任意請求(例如,通過提交一個表單或加載一幅圖像),但它不能處理那個請求返回的數據。
一個域的頁面可從另一個域加載一段腳本,并在自己的域內執行這段腳本。這是因為腳本被假定包含代碼而非數據,因此跨域訪問并不會泄露任何敏感信息。如上所述,在某些情況下,這種假設被違反了,從而導致跨域攻擊。
一個域的頁面不能讀取或修改屬于另一個域的cookie或其他DOM數據(如上例所述)。
攻擊者利用XSS漏洞的第二個原因在于,如果攻擊者設計的URL以wahh-app.com而不是wahh-attacker.com開頭,上面的第二個步驟就更有可能成功。假設攻擊者送出數百萬封下面這樣的電子郵件,試圖欺騙受害者:
?
即使對釣魚攻擊有所防范的用戶而言,這種電子郵件也相當可靠。
郵件要求他們用自己常用的書簽訪問賬戶。
郵件要求他們單擊的鏈接指向應用程序使用的正確域名。
與上面第二步的URL不同,郵件中的URL經過模糊處理;它對URL中的一些字符進行了 URL編碼,以使惡意目的不是非常明顯。
該郵件可通過HTTPS安全檢查,因為攻擊者提供的URL確實是由wahh-app.com服務器傳送的。
如果攻擊者不利用XSS漏洞,而是提供一個指向自己惡意Web服務器的鏈接,執行純粹的釣魚攻擊,許多不易受騙的用戶就會懷疑這是一個陷阱,攻擊的成功率也因此降低。
錯誤觀點 "釣魚陷阱是因特網上無法回避的事實,我對它們無能為力。嘗試修復我的應用程序中的XSS漏洞完全是浪費時間。
釣魚攻擊與XSS漏洞完全不同。純粹的釣魚陷阱是指克隆一個目標應用程序,并通過某種方法誘使用戶與其交互。另一方面,XSS攻擊可完全經由易受攻 擊的目標應用程序傳送。許多人混淆XSS與釣魚攻擊,是因為有時它們使用的傳送方法非常相似。但是,以下幾個要點表明,與釣魚攻擊相比,XSS攻擊會給組 織帶來更大的風險。
由于XSS攻擊在用戶當前使用的應用程序中執行,用戶將會看到與其有關的個性化信息,如賬戶信息或"歡迎回來"消息。克隆的Web站點不會顯示個性化信息。
通常,在釣魚攻擊中使用的克隆Web站點一經發現,就會立即被關閉。
許多瀏覽器與反惡意軟件產品內置有一個釣魚攻擊過濾器,可阻止用戶訪問惡意的克隆站點。
如果客戶訪問一個克隆的Web站點,許多銀行并不承擔責任。但是,如果攻擊者通過銀行應用程序中的XSS漏洞攻擊銀行客戶,他們就不能簡單地推卸責任。
如下文所述,有許多方法可以傳送不使用釣魚攻擊技巧的XSS攻擊。
來源:http://www.ttlsa.com/safe/xss-description/
總結
以上是生活随笔為你收集整理的反射型XSS漏洞详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 姓谭的女孩名字文雅 姓谭的女孩叫什么名字
- 下一篇: 取名字多少笔画吉利 关于取名字多少笔画吉