记录一道非常有意思的CTF题
字数 1298 2025-08-22 12:23:24
Chromowana Tęcza CTF 题目分析与XSS攻击技术教学
题目概述
Chromowana Tęcza是hxp 38C3 CTF中的一道XSS挑战题,结合了多种现代Web安全防护技术和绕过方法。题目提供了两个主要文件:
admin.py:管理后台脚本index.php:前端页面
核心防护机制分析
1. CSP (Content Security Policy) 防护
题目采用了Google提出的nonce-{random}机制进行CSP防御:
Content-Security-Policy: script-src 'nonce-random-value'; base-uri 'none'
关键点:
nonce机制为每个合法脚本生成唯一随机值,防止内联脚本执行base-uri限制防止基础URL被篡改- 参考论文:CSP Is Dead, Long Live CSP!
2. 其他防护措施
- 后端大小写限制
- 前台JavaScript限制
- 特殊设计的bot行为(不断上下滑动页面)
攻击技术:Scroll to Text Fragment (STTF)
STTF是一种新的Web平台功能,允许用户创建指向网页文本任何部分的链接:
https://example.com#:~:text=searchterm
攻击原理:
- 攻击者可以检测STTF行为何时发生
- 类似于"Scroll to CSS Selector" XS-Leak攻击
- 结合
details和object元素实现窗口调用攻击
参考资源:
预期解分析
攻击链构建
-
利用details元素:
details元素通常需要点击才会显示内容- 但可以通过STTF触发自动展开
-
结合object元素:
object标签仅在可见时创建窗口引用- 将
object放入details元素中,当STTF触发展开时,object会创建可跨域计数的窗口
-
特殊技巧:
<object data=/x><object data=about:blank></object></object>这种嵌套结构解决了窗口引用创建的问题
-
绕过用户交互限制:
- 通过同源HTML注入
<meta http-equiv="refresh"> - 使STTF无需用户交互即可触发
- 通过同源HTML注入
实际攻击方案
1. 绕过CSP
虽然题目有严格的CSP,但可以通过以下方式绕过:
- 添加大量标签混淆
- 假设flag不含大写字母(绕过大小写限制)
2. 利用资源耗尽攻击
观察到目标容器资源有限,可以通过:
<iframe src=1 loading=lazy></iframe>
生成大量iframe使bot卡顿,类似于SQL延时注入
3. Flag爆破
通过检测响应时间差异逐字符爆破flag:
- 测试字符
i- 响应变慢(正确) - 测试其他字符 - 无变化
- 编写脚本自动化此过程
教学总结
关键技术点
-
现代CSP绕过:
- 理解
nonce机制的限制 - 利用标签污染绕过策略
- 理解
-
STTF攻击:
- 结合
details和object元素 - 检测文本片段高亮行为
- 结合
-
资源耗尽攻击:
- 利用大量iframe消耗资源
- 基于时间的侧信道攻击
-
实际应用思考:
- CTF环境与现实攻击的差异
- 简单XSS(如``)在实际中的有效性
防御建议
- 对CSP实施多重防护层
- 限制单个页面资源加载
- 监控异常bot行为
- 实施严格的输入过滤和输出编码