putcCTF - Exercise Writeup¶
题目信息¶
- 比赛: putcCTF
- 题目: Exercise
- 类别: Crypto
- 难度: 简单
- 附件/URL:
exercise.txt· Challenge - 附件链接: 下载附件 · 仓库位置
- CTFtime: Event #3202
- Flag格式:
putcCTF{...} - 状态: 已解
Flag¶
putcCTF{try_br3ak1ng_0ut}
解题过程¶
1. 初始侦察/文件识别¶
- 入口点:附件
exercise.txt - 附件给出标准 RSA 参数:
n、e=6、c - 题目提示:
m^e只比n稍大(slightly larger than n)
2. 关键突破点一¶
- 当公钥指数较小(本题
e=6)且明文幂仅略大于模数时,可写成:
\[
m^e = c + k\cdot n
\]
- 其中
k为较小整数。问题转化为:遍历小范围k,判断c + k*n是否为完美六次幂。
3. 关键突破点二¶
- 使用
security-hubMCP 的crypto_rsa_low_exponent,设置: e = 6max_k = 5000000- 工具命中后返回:
plaintext_hex = 0x707574634354467b7472795f627233616b316e675f3075747d- 将十六进制解码为 ASCII 即可得到 Flag。
4. 获取 Flag¶
- 最终恢复明文:
putcCTF{try_br3ak1ng_0ut}
攻击链/解题流程总结¶
读取 RSA 参数与提示 → 构造 m^e = c + k*n(k 较小)→ 搜索完美六次幂 → 十六进制转 ASCII → Flag
漏洞分析 / 机制分析¶
根因¶
- 使用小指数(
e=6)且明文构造使m^e与n的差值很小,导致可通过小范围k搜索恢复明文。 - 缺少安全填充(如 OAEP)时,RSA 结构性信息会直接暴露在幂关系中。
影响¶
- 攻击者无需分解
n,仅依赖整数幂关系与小范围枚举即可恢复明文。 - 当提示或上下文暗示“略大于 n”时,攻击成本显著下降。
修复建议(适用于漏洞类题目)¶
- 使用 RSA-OAEP 等随机填充方案,避免可预测的幂关系。
- 采用标准参数组合(例如
e=65537+ 正确填充),禁止直接对结构化原文做裸 RSA。 - 对消息编码进行随机化与长度规范化,避免泄露可利用数学结构。
知识点¶
- 低指数 RSA 场景下的
c + k*n提升思路 - 完美幂检测与整数 n 次根
- 裸 RSA 与填充 RSA 的安全差异
使用的工具¶
- Security Hub MCP —
crypto_rsa_low_exponent求解低指数提升问题 - Go
math/big— 本地复现大整数与完美幂检测
脚本归档¶
- Go:
putcCTF_Exercise.go - Python:待补(预计文件名:
putcCTF_Exercise.py) - 说明:解题代码需包含详细注释
命令行提取关键数据(无 GUI)¶
# 运行本地 Go 脚本复现求解
go run CTF_Writeups/scripts_go/putcCTF_Exercise.go
推荐工具与优化解题流程¶
参考
CTF_TOOLS_EXTENSION_PLAN.md中的对应类别工具推荐。
工具对比总结¶
| 工具 | 适用阶段 | 本题耗时 | 优点 | 缺点 |
|---|---|---|---|---|
| Security Hub MCP | 参数求解 | 秒级 | 直接支持低指数攻击模型,验证快 | 依赖 MCP 环境 |
Go math/big |
本地复现 | 分钟级 | 可离线、可控、便于归档 | 需手写整数根/判幂逻辑 |
Python gmpy2 |
快速验证 | 分钟级 | 原型开发快 | 需要额外依赖 |
推荐流程¶
推荐流程:先用 MCP 快速命中参数区间 → 再用本地脚本复现并归档结果 → 校验输出格式与 Flag。
工具 A(推荐首选)¶
- 安装:配置并启用
security-hubMCP - 详细步骤:
- 输入
n、c、e=6 - 调用
crypto_rsa_low_exponent并逐步增大max_k - 提取
plaintext_hex并解码为 ASCII - 优势:搜索与验证一体化,适合此类“m^e 略大于 n”题型
工具 B(可选)¶
- 安装:Go 1.20+
- 详细步骤:
- 读取
exercise.txt参数 - 枚举
k,检测c+k*n是否为六次幂 - 将根值转字节并打印
- 优势:可复现、可审计、便于长期沉淀脚本