sivadasrajan/noobctf
GitHub: sivadasrajan/noobctf
一个新手友好的 CTF 式学习项目,通过解决微型谜题帮助初学者理解 HTTP 和 DNS 的核心概念。
Stars: 0 | Forks: 0
# noobctf 🚩
**通过逐一解决微小谜题,学习 Web 的实际工作原理 —— HTTP 和 DNS。**
noobctf 是一个对新手友好的夺旗赛(capture-the-flag)。不需要任何后端经验:每一个关卡
都是你在浏览器或使用 [Postman](https://www.postman.com/downloads/) 这类工具破解的小挑战,
解决后会提供一段简短的通俗解释,说明你刚才做了什么。它不是
一场竞赛 —— 每个关卡都有提示和词汇表。Flag 只是通关的关口;
真正的奖励是,headers、cookies、状态码、重定向、JWT 和 DNS 不再让你觉得像魔法。
## 你将学到什么
35个短小的关卡,每个关卡教你一个概念,并在前一关的基础上逐步深入:
## 在本地运行
```
git clone git@github.com:sivadasrajan/noobctf.git
cd noobctf
npm install
npm run dev # → http://localhost:3000
```
打开 **http://localhost:3000** 并从第 0 关开始。从第 1 关开始,你会需要
[Postman](https://www.postman.com/downloads/)(免费)来构建请求;提示会引导你
一步步完成。
## 工作原理
- **Flag 每日轮换**,通过 HMAC 从一个 secret 派生 —— 因此攻略上的 flag 到了明天就会失效,但一切依然可重现。
- 这是一个小型的 **Express** 应用,它在浏览器中渲染友好的页面,并在终端中显示纯文本。
- **DNS 关卡**会解析真实记录,因此你练习的是真实的 DNS 查询。
## 部署你自己的实例
它开箱即用地作为 serverless function 运行在 **Vercel** 上:
1. 将该仓库导入 Vercel(它会自动检测 `api/` 中的函数;`vercel.json` 会将所有路径路由到该函数)。
2. 设置一个环境变量 —— **`NOOBCTF_SECRET`** —— 为任意长的随机字符串。这是唯一
必需的配置(参见 `.env.example`)。
3. 部署。DNS 关卡指向一组预先配置好的记录;如果你想自行托管,请在
你控制的域名下重新创建它们(任何免费的 DNS 提供商都可以),并更新
`LEVELS.md` / `src/levels.ts` 中的主机名。
## 开发说明
- `npm run dev` —— 带有实时重载的本地服务器。
- `npm run cheat` —— 调试模式:每个 flag 都会变成 `n00bctf{ch34t_m0d3_}`,这样你就可以跳转到
任何关卡,而无需解决之前的关卡。**切勿在此模式开启时进行部署。**
- `npm run typecheck` —— 仅进行类型检查,不输出文件。
- 关卡设计和通关指南位于 [`LEVELS.md`](./LEVELS.md) 中;该应用由 `api/index.ts` 加上
`src/flags.ts` 和 `src/levels.ts` 组成。
## 贡献
欢迎提交 Issues 和 PRs —— 新关卡、更清晰的解释、bug 修复、翻译。唯一的规则是:
以初学者为先。如果一个完全的新手无法跟上,就需要再修改一轮。
## 许可证
[MIT](./LICENSE) © Sivadas Rajan。使用 Claude 构建。
标签:DNS, Express, GNU通用公共许可证, MITM代理, Node.js, Web基础, 安全培训, 自动化攻击