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>.