最近工作要求解決下web的項目的漏洞問題,掃描漏洞是用的AppScan工具,其中有很多是關於跨站點腳本編制問題的。下面就把這塊東西分享出來。
原創文章,轉載請注明
-----------------------------------------正題-------------------------
測試類型:
應用程序級別測試
威脅分類:
跨站點腳本編制
原因:
未對用戶輸入正確執行危險字符清理
安全性風險:
可能會竊取或操縱客戶會話和cookie,它們可能用於模仿合法用戶,從而使黑客能夠以該用戶身份查看或變更用戶記錄以及執行事務
受影響產品:
該問題可能會影響各種類型的產品。
引用:
CERT Advisory CA-2000-02
Microsoft How To: Prevent Cross-Site Scripting Security Issues (Q252985)
Microsoft How To: Prevent Cross-Site Scripting in ASP.NET
Microsoft How To: Protect From Injection Attacks in ASP.NET
Microsoft How To: Use Regular Expressions to Constrain Input in ASP.NET
Microsoft .NET Anti-Cross Site Scripting Library
跨站點腳本編制培訓模塊
技術描述:
AppScan 檢測到應用程序未對用戶可控制的輸入正確進行無害化處理,就將其放置到充當Web 頁面的輸出中。這可被跨站點腳本編制攻擊利用。
在以下情況下會發生跨站點腳本編制(XSS) 脆弱性:
[1] 不可信數據進入Web 應用程序,通常來自Web 請求。
[2] Web 應用程序動態生成了包含此不可信數據的Web 頁面。
[3] 頁面生成期間,應用程序不會禁止數據包含可由Web 瀏覽器執行的內容,例如JavaScript、HTML 標記、HTML 屬性、鼠標事件、Flash 和
ActiveX。
[4] 受害者通過Web 瀏覽器訪問生成的Web 頁面,該頁面包含已使用不可信數據注入的惡意腳本。
[5] 由於腳本來自Web 服務器發送的Web 頁面,因此受害者的Web 瀏覽器在Web 服務器的域的上下文中執行惡意腳本。
[6] 這實際違反了Web 瀏覽器的同源策略的意圖,該策略聲明一個域中的腳本不應該能夠訪問其他域中的資源或運行其他域中的代碼。
一旦注入惡意腳本后,攻擊者就能夠執行各種惡意活動。攻擊者可能將私有信息(例如可能包含會話信息的cookie)從受害者的機器傳輸給攻擊者。攻
擊者可能以受害者的身份將惡意請求發送到Web 站點,如果受害者具有管理該站點的管理員特權,這可能對站點尤其危險。
網絡釣魚攻擊可用於模仿可信站點,並誘導受害者輸入密碼,從而使攻擊者能夠危及受害者在該Web 站點上的帳戶。最后,腳本可利用Web 瀏覽器本
身中的脆弱性,可能是接管受害者的機器(有時稱為“路過式入侵”)。
主要有三種類型的XSS:
類型1:反射的XSS(也稱為“非持久性”)
服務器直接從HTTP 請求中讀取數據,並將其反射回HTTP 響應。在發生反射的XSS 利用情況時,攻擊者會導致受害者向易受攻擊的Web 應用程序提
供危險內容,然后該內容會反射回受害者並由Web 瀏覽器執行。傳遞惡意內容的最常用機制是將其作為參數包含在公共發布或通過電子郵件直接發送給
受害者的URL 中。以此方式構造的URL 構成了許多網絡釣魚方案的核心,攻擊者借此騙取受害者的信任,使其訪問指向易受攻擊的站點的URL。在站
點將攻擊者的內容反射回受害者之后,受害者的瀏覽器將執行該內容。
類型2:存儲的XSS(也稱為“持久性”)
應用程序在數據庫、消息論壇、訪問者日志或其他可信數據存儲器中存儲危險數據。在以后某個時間,危險數據會讀回到應用程序並包含在動態內容
中。從攻擊者的角度來看,注入惡意內容的最佳位置是向許多用戶或特別感興趣的用戶顯示的區域。感興趣的用戶通常在應用程序中具有較高的特權,
或者他們會與對攻擊者有價值的敏感數據進行交互。如果其中某個用戶執行惡意內容,那么攻擊者就有可能能夠以該用戶的身份執行特權操作,或者獲
取對屬於該用戶的敏感數據的訪問權。例如,攻擊者可能在日志消息中注入XSS,而管理員查看日志時可能不會正確處理該消息。
類型0:基於DOM 的XSS
在基於DOM 的XSS 中,客戶機執行將XSS 注入頁面的操作;在其他類型中,注入操作由服務器執行。基於DOM 的XSS 中通常涉及發送到客戶機的
由服務器控制的可信腳本,例如,在用戶提交表單之前對表單執行健全性檢查的Javascript。如果服務器提供的腳本處理用戶提供的數據,然后將數據
注入回Web 頁面(例如通過動態HTML),那么基於DOM 的XSS 就有可能發生。以下示例顯示了在響應中返回參數值的腳本。
參數值通過使用GET 請求發送到腳本,然后在HTML 中嵌入的響應中返回。
[REQUEST]
GET /index.aspx?name=JSmith HTTP/1.1
[RESPONSE] HTTP/1.1 200 OK Server: SomeServer Date: Sun, 01 Jan 2002 00:31:19 GMT Content-Type: text/html Accept-Ranges: bytes Content-Length: 27 <HTML> Hello JSmith </HTML>
攻擊者可能會利用類似以下情況的攻擊:
[ATTACK REQUEST] GET /index.aspx?name=>"'><script>alert('PWND')</script> HTTP/1.1
[ATTACK RESPONSE] HTTP/1.1 200 OK Server: SomeServer Date: Sun, 01 Jan 2002 00:31:19 GMT Content-Type: text/html Accept-Ranges: bytes Content-Length: 83 <HTML> Hello >"'><script>alert('PWND')</script> </HTML>
在這種情況下,JavaScript 代碼將由瀏覽器執行(>"'> 部分在此處並不相關)。