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基础, 安全培训, 自动化攻击