RaceTrackLab 是一个用于学习和演示高并发环境下竞态条件(Race Condition)漏洞的靶场平台。通过模拟真实的并发场景,帮助开发者理解并发安全的重要性。
在高并发系统中,多个请求同时访问共享资源时,如果没有适当的同步机制,就可能产生竞态条件漏洞。RaceTrackLab 提供了多个精心设计的靶场场景,每个场景都包含:
- 漏洞版本:展示存在竞态条件的代码
- 修复版本:展示安全的实现方式
- 交互式演示:通过并发测试直观感受漏洞影响
- 后端:Golang + SQLite3 + 标准库 HTTP 服务
- 前端:Vue3 + PrimeVue 4.x + Vite + pnpm
- 部署:Go 后端嵌入前端编译后的静态资源,单二进制部署
| 场景 | 描述 | CWE |
|---|---|---|
| 优惠券重用 | 高并发下优惠券被重复使用 | CWE-362 |
| 2FA 绕过 | 并发验证请求绕过二次认证 | CWE-362 |
| 重复转账 | 余额检查与扣款非原子操作 | CWE-362 |
| 文件上传竞态 | 文件名检查与写入存在窗口 | CWE-362 |
| 单端点竞态 | 读取-修改-写入模式丢失更新 | CWE-362 |
| 多端点竞态 | 多个 API 端点间缺乏事务保护 | CWE-362 |
- 安装 Go 1.21+:https://golang.org/dl/
- 安装 Node.js 18+ 和 pnpm:
npm install -g pnpm
方式一:分别启动前后端(开发模式)
终端1 - 启动后端:
cd src/backend
go mod tidy
go run main.go终端2 - 启动前端:
cd src/frontend
pnpm install
pnpm dev访问前端:http://localhost:5173
后端 API:http://localhost:5000
方式二:只启动后端(前端已嵌入)
cd src/frontend
pnpm build
cd ../backend
go run main.go访问:http://localhost:5000
- 打开浏览器访问前端页面
- 点击"注册"创建新用户
- 使用注册的用户登录
- 进入首页选择靶场场景
- 在场景页面切换"漏洞版本"和"修复版本"进行测试
raceTrackLab/
├── doc/ # 文档
│ ├── progress.md # 项目进度
│ ├── tutorials/ # 使用教程
│ └── dev-guides/ # 开发指南
├── src/
│ ├── backend/ # Golang 后端
│ │ ├── core/ # 核心框架(场景接口、路由、响应)
│ │ ├── scenarios/ # 靶场场景(可扩展)
│ │ ├── handlers/ # 通用处理器
│ │ ├── middleware/ # 中间件
│ │ └── main.go # 入口
│ └── frontend/ # Vue3 前端
│ ├── src/
│ │ ├── scenarios/ # 场景组件(可扩展)
│ │ ├── views/ # 页面视图
│ │ ├── components/ # 通用组件
│ │ └── api/ # API 封装
│ └── package.json
├── script/tests/ # 自动化测试脚本
└── README.md
RaceTrackLab 采用插件化架构,扩展新场景非常简单:
- 在
src/backend/scenarios/下创建新目录 - 实现
core.ScenarioPlugin接口 - 在
main.go中注册:core.RegisterScenario(myscene.New())
- 在
src/frontend/src/scenarios/下创建 Vue 组件 - 在
ScenarioPage.vue中注册组件映射
详细步骤请参考:开发指南
- 快速开始 - 环境搭建和首次运行
- 靶场场景详解 - 各场景漏洞原理和修复方法
- 高级使用技巧 - 自定义测试和扩展开发
- 架构设计 - 系统架构和核心设计
- 后端开发指南 - 后端开发规范
- 前端开发指南 - 前端开发规范
- 如何添加新场景 - 扩展新场景的详细步骤
使用 Python 测试脚本验证场景:
cd script/tests
pip install requests
# 测试所有场景
python test_coupon.py
python test_2fa.py
python test_transfer.py
python test_fileupload.py
python test_single_race.py
python test_multi_race.py欢迎提交 Issue 和 Pull Request!
MIT License