xss
XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應(yīng)用中的計(jì)算機(jī)安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
書上說JavaScript學(xué)的越好,xss的效果越好。
javascript
javascript:alert(/xss/)
PHP中的相應(yīng)函數(shù):
【詳細(xì)看PHP手冊(cè)】
這里可能不全,想了解更多的看手冊(cè)。
strip_tags($str, [允許標(biāo)簽]) #從字符串中去除 HTML 和 PHP 標(biāo)記
htmlentities($str) 函數(shù) #轉(zhuǎn)義html實(shí)體
html_entity_decode($str)函數(shù) #反轉(zhuǎn)義html實(shí)體
addcslashes($str, ‘字符’)函數(shù) #給某些字符加上反斜杠
stripcslashes($str)函數(shù) #去掉反斜杠
addslashes ($str )函數(shù) #單引號(hào)、雙引號(hào)、反斜線與 NULL加反斜杠
stripslashes($str)函數(shù) #去掉反斜杠
htmlspecialchars() #特殊字符轉(zhuǎn)換為HTML實(shí)體
htmlspecialchars_decode() #將特殊的 HTML 實(shí)體轉(zhuǎn)換回普通字符
下有對(duì)策:
<textarea> </textarea> : 這個(gè)標(biāo)簽把xss代碼 嵌入并直接展示了,閉合了它
<textarea> </textarea> 這里xss <textarea> </textarea> 這樣閉合
利用HTML標(biāo)簽屬性值執(zhí)行xss
例如:
<table backgroup="javascript:alert(/xss/)" > </table>
<img src="javascript:alert(/xss/">
用空格或tab分割:
<img src="java script:alert(/xss/">
像這個(gè),IE就會(huì)順利打開
要是沒有換位符,就以分號(hào)結(jié)尾
<img src="java
script:alert(/xss/">
以此繞過過濾
對(duì)標(biāo)簽屬性轉(zhuǎn)碼
源代碼-->ascii碼
或者部分替換掉
產(chǎn)生自己的事件:
<input type="button" value="click me" onclick="alert('click me')"/>
點(diǎn)擊click me后,會(huì)觸發(fā) onclick 事件,然后執(zhí)行JavaScript代碼。
既然事件能讓JavaScript代碼運(yùn)行,用戶就能利用它來執(zhí)行跨站腳本。
<img src="##" onerror="alert(/xss/)" >
解釋標(biāo)記發(fā)生錯(cuò)誤時(shí),就會(huì)加載SRC。
css:
- JavaScript鑲嵌到image:URL 里
- 用expression把css和JavaScript關(guān)聯(lián)起來。
防止過濾:
大小寫混寫
用單引號(hào)而不是雙引號(hào)
不用引號(hào)
以上都能繞過xss filter
在樣式里使用 /* */ 以此方式混入字符干擾欺騙過濾器。
xss也支持十六進(jìn)制,構(gòu)造語句。
shellcode:
利用一個(gè)漏洞時(shí)所執(zhí)行的代碼,在xss里,就是JavaScript等腳本所編寫的xss利用代碼。
expliot:
完整編寫好的漏洞利用工具。
poc:
一段證明漏洞存在的程序代碼片段
存儲(chǔ)型
攻擊者在界面插入xss代碼,服務(wù)器將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫,當(dāng)用戶訪問到存在xss漏洞的頁面時(shí),服務(wù)器從數(shù)據(jù)庫取出數(shù)據(jù)放在頁面,導(dǎo)致xss代碼執(zhí)行,達(dá)到攻擊效果。
需要能插入的地方,而且還能再展示它。
反射型
在URL中插入xss代碼,服務(wù)端將URL中的xss代碼輸出到頁面上,攻擊者將帶有xss代碼的URL發(fā)送給用戶,用戶打開后受到xss攻擊。
比如說在搜索欄里,輸入之后,查看一下源代碼,閉合原標(biāo)簽,然后插入xss代碼。
get參數(shù)試一試,搜索自己的關(guān)鍵字。
HTML實(shí)體化去應(yīng)對(duì)xss,再通過閉合標(biāo)簽xss。
DOM型
攻擊者在URL中插入xss代碼,前端頁面直接從URL中獲取xss代碼并且輸出到頁面,導(dǎo)致xss代碼執(zhí)行,攻擊者將帶有xss代碼的URL發(fā)送給用戶,用戶到開后受到xss攻擊。
和反射型很像,沒有傳入后端,僅在前端
還是搜索欄,放到URL里的。
對(duì)js代碼要求很高。
比如說,我就在我的留言板里,留言: <script> alert(/xss/)</script> 就會(huì)彈個(gè)框
同樣的還有: 在鏈接上:?name=<script> alert(/xss/)</script>
onmouseover 事件
HTML 中:
<element onmouseover="SomeJavaScriptCode">
JavaScript 中:
object.onmouseover=function(){SomeJavaScriptCode};
<input name="p1" size="50" value="2333" onmouseover="alert(document.domain);" type="text">
onmouseover 屬性可使用于所有 HTML 元素,除了: <base>, <bdo>,
, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style>, 和 <title>.