《白帽子講Web安全》3-跨站指令碼攻擊(XSS)
阿新 • • 發佈:2019-01-01
第3章 跨站指令碼攻擊(XSS)
3.1 XSS簡介
- Cross Site Script,跨站指令碼攻擊,簡稱XSS。
- XSS攻擊,通常是指黑客通過“HTML注入”篡改了網頁,插入了惡意的指令碼,從而在客使用者瀏覽網頁時,控制使用者瀏覽器的一種攻擊。
- XSS分類
- 反射型XSS
- 儲存型XSS
- DOM Based XSS
3.2 XSS攻擊進階
- XSS Payload
- JavaScript指令碼
- 最簡單的:竊取Cookie的XSS Payload
- Cookie的“HttpOnly”標識可以防止“Cookie劫持”
- 強大的XSS Payload
- 構造GET與POST請求
- 刪除部落格:JacvaScript程式碼
- 提交表單:JavaScript發出POST請求
- HTML程式碼構造表單
- XMLHttpRequest傳送POST請求
- 瀏覽器的擴充套件和外掛
- CSS History Hack
- 獲取使用者的真實IP地址
- Javascript本身沒有此能力。藉助第三方軟體來完成
- 如呼叫Java Applet的介面獲取客戶端的本地IP地址。
- 構造GET與POST請求
- XSS攻擊平臺
- Attack API
- BeEF
- XSS-Proxy
- 終極武器:XSS Worm
- Samy Worm
- 一般來說,使用者之間發生互動行為的頁面,如果存在儲存型XSS,則比較容易發起XSS Worm攻擊。
- 百度空間蠕蟲
- Samy Worm
- 除錯JavaScript
- 除錯JavaScript,需要有很好的JavaScript工地,除錯JavaScript是必不可少的技能。
- Firebug
- IE 8 Developer Tools
- Fiddler
- HttpWatch
- XSS構造技巧
- 利用字元編碼
- 繞過長度限制
- 利用事件(Event)縮短所需要的位元組數
- 最好的辦法是把XSS Payload寫到別處,再通過簡短的程式碼載入這段XSS Payload
- loacation.hash
- 利用註釋符繞過長度限制
- 使用
<base>
標籤 - window.name的妙用
- 變廢為寶:Mission Impossible
- Apache Expect Header XSS
- Anehta的迴旋鏢
- 容易被忽視的角落:Flash XSS
- 在Flash中是可以嵌入ActionScript指令碼的
- 真的高枕無憂嗎:JavaScript框架
3.3XSS的防禦
- HttpOnly
- 輸入檢查
- 輸出檢查
- 安全的編碼函式
- 只需一種編碼嗎
- 正確地防禦XSS
- XSS的本質還是一種“HTML”注入,使用者的資料被當成了HTML程式碼一部分來執行,從而混淆了原來的語義,產生了新的語義。
- 想要根治XSS問題,可以列出所有XSS可能發生的場景,再一一解決。
- 下面用變數“$var”表示使用者資料,它將被填充入HTML程式碼中。可能存在以下場景:
- 在HTML標籤中輸出
- 在HTML屬性中輸出
- 在
<script>
標籤中輸出 - 在CSS中輸出
- 在地址中輸出
- 處理富文字
- HTML
- CSS
- 防禦DOM Based XSS
- 換個角度看XSS的風險
- 前面談到的所有XSS攻擊,都是從漏洞形成的原理上看的。下面從業務風險的角度來看。
- 一般來說,儲存型XSS的風險會高於反射型XSS
- 從攻擊過程來說
- 反射型XSS,一般要求攻擊者誘使使用者點選一個包含XSS程式碼的URL連結。
- 儲存型XSS,則只需要讓使用者檢視一個正常的URL連結。
- 從風險的角度來看
- 使用者之間有互動的頁面,是可能發起XSS Worm攻擊的地方。
- 根據不同頁面的PageView高低,也可以分析出哪些頁面受XSS攻擊後的影響會更大。
- 從攻擊過程來說
3.4 小結
理論上,XSS漏洞雖然複雜,但卻是可以徹底解決的。
在設計XSS防禦方案時,深入理解XSS攻擊的原理,針對不同的場景使用不同的方法。