WebGoat學習——跨站腳本攻擊(Cross‐Site Scripting (XSS))


跨站腳本攻擊(Cross‐Site Scripting (XSS))

       XSS(Cross Site Script)跨站腳本攻擊。是指攻擊者向被攻擊Web 頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中的HTML代碼會被執行,從而達到攻擊的特殊目的。XSS和CSRF(Cross site request forgery)合稱Web 殺手組合。黑客洞穿頁面邏輯,使輸入的內容被按照期望內容展示出來,從而達到欺騙或攻擊用戶的效果。常見的xss攻擊類型有存儲xss攻擊和反射型xss攻擊。

存儲型XSS(Stored XSS)

        存儲型xss是應用最為廣泛而且有可能影響到Web服務器自身安全的漏洞,駭客將攻擊腳本上傳到Web服務器上,使得所有訪問該頁面的用戶都面臨信息泄漏的可能。

image

                                                         圖 1 存儲型xss攻擊示例

1. 用戶A修改個人信息,並將帶有威脅性的js代碼作為個人信息發送到server端;

2. server端未加過濾將用戶資料存儲到服務器;

3. 用戶B在好友列表中看到用戶A,並查看用戶A個人資料;

4. server端取出用戶A資料返回到web前端;

5. 前端按照預先規則展示,其中包含了用戶A帶有html標簽和js的前端可執行代碼,從而在用戶B機器上執行了用戶A預先設定好的任意威脅性的代碼。

      例如用戶A修改用戶備注為:<script>alert("haha");</script>,按照上述流程用戶B的頁面上執行這段代碼。

舉個例子,黑客預先調查某bbs展示帖子內容的代碼邏輯,然后發帖:

clip_image003

提交之后,出現在帖子列表:

clip_image004

當其他用戶點擊帖子查看時,悲劇發生了:

clip_image005,還好,只是惡作劇。

解決方案

1. 做xss過濾,將一些不合理的標簽(例如:< > % /)做轉義或者過濾,在存入DB前做xss過濾要比展示前做xss過濾更有效。

2. 限制用戶輸入的字符,比如:碼只允許\s = whitspace: \t\n\x0B\f\r,\w = word: a-zA-Z_0-9

反射型XSS(Reflected XSS)

      如果server端未做輸入參數的過濾或者過濾不完整導致用戶的輸入數據可能返回到前端頁面,Web客戶端使用Server端腳本生成頁面為用戶提供數據時,如果未經驗證的用戶數據被包含在頁面中而未經HTML實體編碼,客戶端代碼便能夠注入到動態頁面中。

clip_image007

             圖 2 反射型xss示例

1. 用戶A構造參數值帶有js代碼URL,並將URL發給好友B,告訴他可以參與活動;

2. 好友B收到請求后發現是官方的URL,於是點擊URL;

3. server端未嚴格校驗請求參數,將參數直接返回到前端頁面;

4. 參數中的js代碼隨着html返回到用戶B瀏覽器並得以執行。

例如某網站輸入用戶信息后,服務器校驗輸入有誤,返回錯誤頁面並“友好”的將錯誤內容展示給用戶看,例如:

clip_image008

      用戶將帶有攻擊性的URL做為輸入源,例如:<img src="www.xxx.com"/>,服務端會跳轉到對應的錯誤頁,如下:

clip_image009

這樣www.xxx.com里的惡意js會被執行。

黑客可以將提交請求的URL進行進行包裝或者直接暴露URL,用戶通常看到可信任網站的URL會不加防范的點擊,從而造成損失,例如上述可以暴露給用戶URL:

http://localhost:8080/WebGoat/attack?Screen=31&menu=900&QTY1=1&QTY2=2&QTY3=2&QTY4=1&field2=1111111&field1=%3Cimg+src%3D%22www.xxx1.com%22%2F%3E&SUBMIT=Purchase

解決方案:

同存儲型xss攻擊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM