跳转至

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

攻击链/解题流程总结

连接服务 → 解析 RULES → 递归解析表达式 → 应用动态运算规则 → 逐题回传结果 → 获取 flag

漏洞分析 / 机制分析

根因

  • 服务刻意制造“运算符重定义 + 极短时间限制”的交互式算题机制,要求全自动化解答。

影响

  • 无法手动完成,必须脚本化,否则超时失败。

修复建议(适用于漏洞类题目)

  • 本题非漏洞类,仅为机制挑战,不需要修复建议。

知识点

  • 动态运算符映射与表达式求值
  • 递归下降解析(括号/运算符)
  • TCP 交互式脚本优化(低延迟与缓冲)

使用的工具

  • Go(自写解题脚本)— TCP 交互与表达式求值
  • netcat — 手工观察协议与规则
  • (推荐)pwntools — 交互式题目自动化

脚本归档

命令行提取关键数据(无 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。

评论