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 漏洞利用流程
-
Bot 处理流程分析:
- 在
bot.js中处理 problem 中的 URL - 可以构造路由让 admin 访问特定页面
- 在
-
Balance 相关函数:
- 系统使用了 TF-IDF 算法将 question 转换为数值向量
- 重点关注
fac处理部分
-
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>
- 题目故意留了
-
转账逻辑漏洞:
- 系统转账限制:每次最多只能转 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 邮件格式规范