SunshineCTF 2025 Web 题解
字数 2289 2025-10-02 18:55:10

SunshineCTF 2025 Web 题目详解与解法教学

1. Lunar Auth

题目背景

目标是通过前端验证机制获取管理员权限,访问 /admin 路径获取 flag。

关键步骤

  1. 访问 /admin 路径:发现存在前端验证逻辑。
  2. 分析页面源码:在前端代码中发现账号密码的加密形式。
  3. 解密凭据
    • 账号:alimuhammadsecured
    • 密码:`S3cur4_P@

\[w0RD!` 4. **登录获取 flag**:使用解密后的凭据登录系统,成功访问 `/admin` 并得到 flag。 ### 技术要点 - 前端验证可能通过 JavaScript 实现,需审查源码或调试网络请求。 - 加密方式可能为 Base64 或简单编码,需尝试常见解码方法。 --- ## 2. Lunar Shop ### 题目背景 通过 SQL 注入获取隐藏的 flag 数据,产品 ID 存在注入点。 ### 关键步骤 1. **测试输入点**:在产品查询处输入 `1'` 触发 SQL 报错,确认存在数字型注入。 2. **判断数据库类型**:通过 `database()` 查询确认数据库为 SQLite。 3. **构造联合查询**: ```sql 1 UNION SELECT 1,2,3,(SELECT group_concat(flag) FROM flag) ``` 4. **获取 flag**:执行注入 payload,直接从 `flag` 表中提取数据。 ### 技术要点 - SQLite 注入需使用 `UNION SELECT` 和系统表(如 `sqlite_master`)获取表结构。 - `group_concat()` 用于合并多行数据,避免多次查询。 --- ## 3. Intergalactic Webhook Service ### 题目背景 利用 DNS 重绑定攻击绕过 SSRF 防护,访问本地受限路径 `/flag`。 ### 关键步骤 1. **分析源码与 WAF 规则**: - 禁止私有网段、回环地址、链路本地地址和保留地址。 - `requests.post` 不支持 `gopher` 协议。 2. **DNS 重绑定攻击**: - 使用工具生成动态域名(如 [rebinder.html](https://lock.cmpxchg8b.com/rebinder.html))。 - 首次解析为合法 IP(如 `8.8.8.8`)通过注册检查。 - 二次请求时通过短 TTL 切换解析为 `127.0.0.1`,绕过 WAF。 3. **触发访问**:通过重绑定域名访问 `http://127.0.0.1/flag` 获取 flag。 ### 技术要点 - DNS 重绑定依赖域名解析的时序差异,需多次尝试以匹配 TTL 窗口。 - 工具需配置双 IP(公网 + 本地)并确保 TTL 极短(如 0-1 秒)。 --- ## 4. Web Forge ### 题目背景 通过 SSRF 和 SSTI 组合攻击,利用内部工具访问本地服务并执行模板注入。 ### 关键步骤 1. **目录扫描与信息收集**: - 发现 `robots.txt` 提示需要特殊请求头:`SSRF access header: true`。 - 爆破确认需设置 `Allow: true`。 2. **访问 `/fetch` 工具**:用于发送 HTTP 请求,但需指定端口(非默认 80)。 3. **探测本地服务端口**:常见端口(8000、8080、5000)中确认服务运行在 8000 端口。 4. **构造 SSTI Payload**: - 目标 URL:`http://127.0.0.1:8000/admin?template={{恶意表达式}}`。 - 绕过过滤(禁用 `.` 和 `_`): - 使用 `|attr()` 替代点号访问属性。 - 十六进制编码绕过关键字(如 `\x5f` 代替 `_`)。 - 最终 Payload: ``` {{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('cat /flag')|attr('read')()}} ``` 5. **获取 flag**:通过 SSTI 执行系统命令读取 flag。 ### 技术要点 - SSTI 绕过需熟悉 Jinja2 模板特性,利用 `attr()` 和编码绕过过滤。 - SSRF 工具需正确指定端口和协议(HTTP)。 --- ## 5. Lunar File Invasion ### 题目背景 通过目录穿越和双重编码绕过路径校验,实现任意文件读取。 ### 关键步骤 1. **信息收集**: - `robots.txt` 泄露测试文件(如 `/.gitignore_test`)。 - 静态页面 `login.html~` 泄露账号密码:`admin@lunarfiles.muhammadali` / `jEJ&(32)DMC

SunshineCTF 2025 Web 题目详解与解法教学 1. Lunar Auth 题目背景 目标是通过前端验证机制获取管理员权限,访问 /admin 路径获取 flag。 关键步骤 访问 /admin 路径 :发现存在前端验证逻辑。 分析页面源码 :在前端代码中发现账号密码的加密形式。 解密凭据 : 账号: alimuhammadsecured 密码: S3cur4_P@$$w0RD! 登录获取 flag :使用解密后的凭据登录系统,成功访问 /admin 并得到 flag。 技术要点 前端验证可能通过 JavaScript 实现,需审查源码或调试网络请求。 加密方式可能为 Base64 或简单编码,需尝试常见解码方法。 2. Lunar Shop 题目背景 通过 SQL 注入获取隐藏的 flag 数据,产品 ID 存在注入点。 关键步骤 测试输入点 :在产品查询处输入 1' 触发 SQL 报错,确认存在数字型注入。 判断数据库类型 :通过 database() 查询确认数据库为 SQLite。 构造联合查询 : 获取 flag :执行注入 payload,直接从 flag 表中提取数据。 技术要点 SQLite 注入需使用 UNION SELECT 和系统表(如 sqlite_master )获取表结构。 group_concat() 用于合并多行数据,避免多次查询。 3. Intergalactic Webhook Service 题目背景 利用 DNS 重绑定攻击绕过 SSRF 防护,访问本地受限路径 /flag 。 关键步骤 分析源码与 WAF 规则 : 禁止私有网段、回环地址、链路本地地址和保留地址。 requests.post 不支持 gopher 协议。 DNS 重绑定攻击 : 使用工具生成动态域名(如 rebinder.html )。 首次解析为合法 IP(如 8.8.8.8 )通过注册检查。 二次请求时通过短 TTL 切换解析为 127.0.0.1 ,绕过 WAF。 触发访问 :通过重绑定域名访问 http://127.0.0.1/flag 获取 flag。 技术要点 DNS 重绑定依赖域名解析的时序差异,需多次尝试以匹配 TTL 窗口。 工具需配置双 IP(公网 + 本地)并确保 TTL 极短(如 0-1 秒)。 4. Web Forge 题目背景 通过 SSRF 和 SSTI 组合攻击,利用内部工具访问本地服务并执行模板注入。 关键步骤 目录扫描与信息收集 : 发现 robots.txt 提示需要特殊请求头: SSRF access header: true 。 爆破确认需设置 Allow: true 。 访问 /fetch 工具 :用于发送 HTTP 请求,但需指定端口(非默认 80)。 探测本地服务端口 :常见端口(8000、8080、5000)中确认服务运行在 8000 端口。 构造 SSTI Payload : 目标 URL: http://127.0.0.1:8000/admin?template={{恶意表达式}} 。 绕过过滤(禁用 . 和 _ ): 使用 |attr() 替代点号访问属性。 十六进制编码绕过关键字(如 \x5f 代替 _ )。 最终 Payload: 获取 flag :通过 SSTI 执行系统命令读取 flag。 技术要点 SSTI 绕过需熟悉 Jinja2 模板特性,利用 attr() 和编码绕过过滤。 SSRF 工具需正确指定端口和协议(HTTP)。 5. Lunar File Invasion 题目背景 通过目录穿越和双重编码绕过路径校验,实现任意文件读取。 关键步骤 信息收集 : robots.txt 泄露测试文件(如 /.gitignore_test )。 静态页面 login.html~ 泄露账号密码: admin@lunarfiles.muhammadali / jEJ&(32)DMC<!*### 。 绕过 2FA :登录后直接访问 /admin/dashboard 跳过二次验证。 利用文件下载功能 : 原始路径: /admin/download/文件名 。 尝试读取 /etc/passwd 失败,因路径校验禁止 .. 和连续 / 。 双重 URL 编码绕过 : 单次编码: %2E%2E%2F → ../ (仍被拦截)。 双重编码: %252E%252F%252E%252E%252F → %2E%2F%2E%2E%2F → ./../ 。 最终 Payload(穿越三级目录): 对应路径: ./../../app.py 。 读取 flag :直接读取应用源码或 flag 文件(如 /app/flag )。 技术要点 双重编码可绕过简单校验,但需确保服务器解码两次。 目录穿越需计算正确层级(如从当前路径回溯到根目录)。 总结与防御建议 前端验证不可靠 :关键逻辑需服务端校验。 SQL 注入防护 :使用参数化查询,避免拼接 SQL。 SSRF 防护 :校验域名解析结果(禁止内网 IP),使用白名单协议。 SSTI 防护 :禁用模板执行系统命令,沙箱隔离环境。 路径遍历防护 :规范化路径后校验是否超出目标目录。 通过以上详解,可全面掌握 SunshineCTF 2025 Web 题目的解法与渗透测试技巧。