XSS(跨站腳本)概述
Cross-Site Scripting 簡稱爲“CSS”,爲避免與前端疊成樣式表的縮寫"CSS"衝突,故又稱XSS。
一般XSS可以分爲如下幾種常見類型:
- 反射性XSS;
- 存儲型XSS;
- DOM型XSS;
XSS漏洞一直被評估爲web漏洞中危害較大的漏洞,在OWASP TOP10的排名中一直屬於前三的江湖地位。
XSS是一種發生在前端瀏覽器端的漏洞,所以其危害的對象也是前端用戶。
形成XSS漏洞的主要原因是程序對輸入和輸出沒有做合適的處理,導致“精心構造”的字符輸出在前端時被瀏覽器當作有效代碼解析執行從而產生危害。
因此在XSS漏洞的防範上,一般會採用“對輸入進行過濾”和“輸出進行轉義”的方式進行處理:
輸入過濾:對輸入進行過濾,不允許可能導致XSS攻擊的字符輸入;
輸出轉義:根據輸出點的位置對輸出到前端的內容進行適當轉義;
反射型xss
get傳參
頁面輸入kobe,有返回,所構造出的鏈接如下,可見是get形式傳參。
https://www.bihuoedu.com/vul/xss/xss_reflected_get.php?message=kobe&submit=submit
將鏈接中的kobe參數改爲xss代碼,如下,成功彈窗。
https://www.bihuoedu.com/vul/xss/xss_reflected_get.php?message=<script>alert(document.cookie)</script>&submit=submit
post傳參
先登錄,具有登錄的cookie,再輸入kobe,發現鏈接沒有變化,所以不再是get傳參而是post傳參。
直接在搜索框里加入xss代碼,如果有限制,可以更改html參數或者抓包進行修改繞過。
<script>alert(document.cookie)</script>
是可以得到登錄人的cookie的。
存儲型xss
在留言板上留下xss代碼,發表留言,代碼將插入數據庫中,
代碼將長期留在這個頁面,除非管理員刪除該留言,
只要有人訪問這個頁面,就會執行代碼。
DOM型xss
初步觀察,點擊 click me! 後會出現 what do you see? 的鏈接按鈕,其指向是當前目錄/you_input,審查元素時發現onclick後會執行函數 domxss() ,其作用是讀取input的值並將其拼接到新創建的link節點中,源碼如下:
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//試試:'><img src="#" onmouseover="alert('xss')">
//試試:' οnclick="alert('xss')">,閉合掉就行