商城首页欢迎来到中国正版软件门户

您的位置:首页 >HTML编码绕过转义的存储型XSS攻击方法

HTML编码绕过转义的存储型XSS攻击方法

  发布于2026-03-16 阅读(0)

扫一扫,手机访问

如何利用 HTML 编码绕过转义实现存储型 XSS 攻击

本文详解在引号被反斜杠转义、尖括号被过滤的受限环境下,如何通过 HTML 实体编码构造合法的 onerror 事件 payload,成功触发存储型 XSS,重点演示 eval() 配合编码绕过的实战技巧。

本文详解在引号被反斜杠转义、尖括号被过滤的受限环境下,如何通过 HTML 实体编码构造合法的 `onerror` 事件 payload,成功触发存储型 XSS,重点演示 `eval()` 配合编码绕过的实战技巧。

在实际渗透测试中,遇到存储型 XSS 时,常会遭遇服务端的多重防护:如对单/双引号自动添加反斜杠(\)、移除或编码 < > 标签、甚至过滤关键词(如 script、javascript:)。此时直接注入 <img src=x onerror="alert(1)"> 会被拦截或破坏语法结构,导致 payload 失效。

但关键在于:HTML 解析器会在执行 JavaScript 前,先完成 HTML 实体解码。这意味着,只要将 JS 代码中的敏感字符(如引号、括号、字母)转换为十进制 HTML 实体(如 &#97; → a),就能在不使用原始符号的前提下,拼出可执行的 JS 表达式。

例如,目标存在如下受控 <img> 标签:

<img class="br64 mr15" onerror="this.onerror=null;this.src=`https://www.examplesite.zcs/default.png`;" width="100" height="100" src="xss is here">

虽然 " ' ( ) < > 等字符被转义或过滤,但我们可以将 alert('1') 全量 HTML 编码为:

&#97;&#108;&#101;&#114;&#116;&lpar;&apos;&#49;&apos;&rpar;

对应解码后即为 alert('1') —— 注意:&lpar; 是 ( 的命名实体,&rpar; 是 ),&apos; 是 ',均属标准 HTML 实体,兼容性好且绕过所有基于正则的引号/括号检测。

最终构造的绕过 payload 如下:

<img class="br64 mr15" 
     src="badurl.png" 
     onerror="eval(&#97;&#108;&#101;&#114;&#116;&lpar;&apos;&#49;&apos;&rpar;);" 
     width="100" 
     height="100" 
     src="xss is here">

✅ 优势分析:

  • 无任何原始双引号 " 或单引号 ',规避反斜杠转义;
  • 无 < > 符号,绕过标签过滤;
  • eval() 动态执行解码后的字符串,语义完整;
  • 所有实体均为 W3C 标准,主流浏览器(Chrome/Firefox/Safari/Edge)均支持。

⚠️ 注意事项:

  • 不要混淆 &apos;(单引号)与 &#39;(等价但更通用),推荐优先使用 &apos; 提高可读性;
  • 若目标环境严格过滤 eval,可改用 Function 构造器:Function(&#97;&#108;&#101;&#114;&#116;&lpar;&apos;&#49;&apos;&rpar;)();
  • 存储型 XSS 需确保 payload 被持久化并渲染在用户上下文中,建议配合 onload/onerror 等事件属性使用;
  • 切勿在非授权系统中实操——本技术仅限合规渗透测试与安全研究。

总结而言,HTML 实体编码是突破基础输入过滤的高效手段。它不依赖特殊字符,不触发常见 WAF 规则,且与 DOM 渲染流程天然契合。掌握 &#xx; + &named; 的组合技巧,能显著提升在受限 XSS 场景下的利用成功率。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注