Midnight-Sun-CTF-2025-WEB
字数 1497 2025-08-29 22:41:10

Midnight-Sun-CTF-2025-WEB 漏洞分析与利用教学

1. Hackchan 漏洞分析

1.1 Flag 获取条件

views.py 文件中发现获取 flag 的条件是:当前用户的 balance 必须大于 999,999,999。

1.2 漏洞利用流程

  1. Bot 处理流程分析

    • bot.js 中处理 problem 中的 URL
    • 可以构造路由让 admin 访问特定页面
  2. Balance 相关函数

    • 系统使用了 TF-IDF 算法将 question 转换为数值向量
    • 重点关注 fac 处理部分
  3. SWP 文件利用

    • 题目故意留了 .swp 文件(vim 交换文件)
    • 通过匹配 media 标签可以渲染 .swap 文件内容
    • 构造 payload 触发 XSS:
      https://hackchan-mjk2mpay.ctf.pro/?action=faq&question=How can I get in touch with your PR department for collaboration?<script>alert('hacked by dt')</script>
      
  4. 转账逻辑漏洞

    • 系统转账限制:每次最多只能转 10 块钱
    • 关键代码:confirmed_transactions = Transaction.query.filter(Transaction.status == 'confirmed').all()
    • 利用 Race Condition:在 confirm_transaction 之后间隙将订单 status 改为 confirmed
  5. 最终 Payload

    
    
    • 注意编码问题

2. Uselesscorp 漏洞分析

2.1 初始发现

  • 扫描目录发现 class.phpmailer.php
  • 通过文件日期确定版本为 v5.2.17
  • 尝试利用 CVE-2016-10033 但失败

2.2 Exim4 MTA 漏洞利用

  • Debian 系统使用 exim4 作为 MTA
  • 关键字符串扩展功能:
    • ${readfile{}{}}:读取文件并替换换行符
    • ${readsocket{...}{...}{...}{...}{...}}:向 socket 发送请求并读取响应
    • {run,preexpand{option}}:运行外部命令并获取输出

2.3 构造 sendmail 请求

  • 遵循 RFC 3696 邮件格式
  • 使用 -Ov 参数使后续语句无效
  • 简短格式示例:@d

2.4 最终 Exploit

  • 官方 payload 思路类似,但直接读取文件而非弹 shell

3. 漏洞利用总结

3.1 Hackchan 关键点

  1. 通过 .swp 文件触发 XSS
  2. 利用 Race Condition 绕过转账限制
  3. 构造恶意请求让 bot 执行高额转账

3.2 Uselesscorp 关键点

  1. 识别 exim4 MTA 的存在
  2. 利用字符串扩展功能执行命令
  3. 构造特殊的邮件格式绕过限制

4. 防御建议

4.1 针对 Hackchan

  • 严格过滤用户输入,防止 XSS
  • 实现事务处理的原子性,防止 Race Condition
  • 对转账操作添加更严格的验证

4.2 针对 Uselesscorp

  • 及时更新 PHPMailer 版本
  • 限制 exim4 的字符串扩展功能
  • 对邮件输入进行严格验证

5. 参考资源

  • PHPMailer CVE-2016-10033: https://github.com/PHPMailer/PHPMailer/blob/v5.2.17/class.phpmailer.php
  • Exim4 文档: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html
  • RFC 3696 邮件格式规范
Midnight-Sun-CTF-2025-WEB 漏洞分析与利用教学 1. Hackchan 漏洞分析 1.1 Flag 获取条件 在 views.py 文件中发现获取 flag 的条件是:当前用户的 balance 必须大于 999,999,999。 1.2 漏洞利用流程 Bot 处理流程分析 : 在 bot.js 中处理 problem 中的 URL 可以构造路由让 admin 访问特定页面 Balance 相关函数 : 系统使用了 TF-IDF 算法将 question 转换为数值向量 重点关注 fac 处理部分 SWP 文件利用 : 题目故意留了 .swp 文件(vim 交换文件) 通过匹配 media 标签可以渲染 .swap 文件内容 构造 payload 触发 XSS: 转账逻辑漏洞 : 系统转账限制:每次最多只能转 10 块钱 关键代码: confirmed_transactions = Transaction.query.filter(Transaction.status == 'confirmed').all() 利用 Race Condition:在 confirm_transaction 之后间隙将订单 status 改为 confirmed 最终 Payload : 注意编码问题 2. Uselesscorp 漏洞分析 2.1 初始发现 扫描目录发现 class.phpmailer.php 通过文件日期确定版本为 v5.2.17 尝试利用 CVE-2016-10033 但失败 2.2 Exim4 MTA 漏洞利用 Debian 系统使用 exim4 作为 MTA 关键字符串扩展功能: ${readfile{}{}} :读取文件并替换换行符 ${readsocket{...}{...}{...}{...}{...}} :向 socket 发送请求并读取响应 {run,preexpand{option}} :运行外部命令并获取输出 2.3 构造 sendmail 请求 遵循 RFC 3696 邮件格式 使用 -Ov 参数使后续语句无效 简短格式示例: @d 2.4 最终 Exploit 官方 payload 思路类似,但直接读取文件而非弹 shell 3. 漏洞利用总结 3.1 Hackchan 关键点 通过 .swp 文件触发 XSS 利用 Race Condition 绕过转账限制 构造恶意请求让 bot 执行高额转账 3.2 Uselesscorp 关键点 识别 exim4 MTA 的存在 利用字符串扩展功能执行命令 构造特殊的邮件格式绕过限制 4. 防御建议 4.1 针对 Hackchan 严格过滤用户输入,防止 XSS 实现事务处理的原子性,防止 Race Condition 对转账操作添加更严格的验证 4.2 针对 Uselesscorp 及时更新 PHPMailer 版本 限制 exim4 的字符串扩展功能 对邮件输入进行严格验证 5. 参考资源 PHPMailer CVE-2016-10033: https://github.com/PHPMailer/PHPMailer/blob/v5.2.17/class.phpmailer.php Exim4 文档: https://www.exim.org/exim-html-current/doc/html/spec_ html/ch-string_ expansions.html RFC 3696 邮件格式规范