NovruzCTF - NightmareCalc Writeup¶
题目信息¶
- 比赛: NovruzCTF
- 题目: NightmareCalc
- 类别: Misc / Programming
- 难度: 中
- 附件/URL:
nc 142.93.12.237 1337 - Flag格式:
novruzctf{} - 状态: 进行中
Flag¶
novruzctf{TBD}
解题过程¶
1. 初始侦察/文件识别¶
- 入口点:
nc 142.93.12.237 1337 - 关键线索:服务会频繁下发“RULES”,动态重定义运算符;要求 21 秒内解完 256 题。
2. 关键突破点一¶
- 重点不是人工解题,而是自动化解析规则 + 表达式求值。
- 每次收到
RULES:行,更新操作符映射表(+/-/*/...对应 ADD/SUB/XOR 等)。 - 遇到
Calculate:行后,按当前规则计算并立即回传。
3. 关键突破点二¶
- 题目使用括号表达式,需递归解析。
- 部分运算符需要按题目逻辑处理(如
DIV/MOD使用 Python 语义,避免负数分歧)。 - 连接必须低延迟、读写缓冲足够大,避免超时。
4. 获取 Flag¶
- 运行自动化脚本完成 256 题后服务返回 flag(待补)。
- 当前脚本:
novruzCTF_NightmareCalc_Misc.go
攻击链/解题流程总结¶
连接服务 → 解析 RULES → 递归解析表达式 → 应用动态运算规则 → 逐题回传结果 → 获取 flag
漏洞分析 / 机制分析¶
根因¶
- 服务刻意制造“运算符重定义 + 极短时间限制”的交互式算题机制,要求全自动化解答。
影响¶
- 无法手动完成,必须脚本化,否则超时失败。
修复建议(适用于漏洞类题目)¶
- 本题非漏洞类,仅为机制挑战,不需要修复建议。
知识点¶
- 动态运算符映射与表达式求值
- 递归下降解析(括号/运算符)
- TCP 交互式脚本优化(低延迟与缓冲)
使用的工具¶
- Go(自写解题脚本)— TCP 交互与表达式求值
- netcat — 手工观察协议与规则
- (推荐)pwntools — 交互式题目自动化
脚本归档¶
- Go:
NovruzCTF_Speedrun.go - Python:
NovruzCTF_Speedrun.py
命令行提取关键数据(无 GUI)¶
# 观察题目规则与样例
nc 142.93.12.237 1337
# 或使用 rlwrap 方便交互
rlwrap nc 142.93.12.237 1337
推荐工具与优化解题流程¶
参考
CTF_TOOLS_EXTENSION_PLAN.md中的 Pwn/Misc 类工具推荐(优先使用现成工具)。
工具对比总结¶
| 工具 | 适用阶段 | 本题耗时 | 优点 | 缺点 |
|---|---|---|---|---|
| pwntools | 自动化交互 | ~1-2 分钟 | 交互简洁、脚本化强 | 需 Python 环境 |
| netcat | 协议观察 | <1 分钟 | 简单直接 | 无法自动解题 |
| Go 脚本 | 稳定解题 | ~1-2 分钟 | 性能稳定 | 需要实现解析器 |
推荐流程¶
推荐流程:netcat 观察规则 → pwntools 快速实现交互 → 完整脚本解题 → Flag(1-2 分钟)。
工具 A(推荐首选)¶
- 安装:
pip install pwntools - 详细步骤:
- 连接服务并读取
RULES - 解析表达式并按规则计算
- 逐题回传直到 flag
- 优势:交互式题目最省时、可快速迭代。
工具 B(可选)¶
- 安装:
nc(系统自带或包管理安装) - 详细步骤:
- 连接服务观察协议
- 确认规则格式与题目格式
- 优势:轻量、无需环境准备。
未解/进行中说明(仅在未解时保留)¶
- 当前已验证内容:协议格式、规则动态变化、表达式为括号递归结构。
- 待补关键结论:最终 flag 值(运行脚本后填写)。
- 下一步建议:保存服务输出并更新 Flag。