BasitS-hash/cybersecurity-lab
GitHub: BasitS-hash/cybersecurity-lab
一个基于 Docker Compose 的 CTF 风格本地网络安全实验室,集成多种漏洞靶机与日志监控堆栈,用于练习攻防技术。
Stars: 0 | Forks: 0
# cybersecurity-lab
一个实操型、CTF 风格的本地安全实验室,用于练习攻击和防御技术。通过 Docker Compose 启动真实的漏洞靶机,内置了一个定制的、刻意设计为存在漏洞的 API 及其对应的加固版本用于修复练习,并包含一个用于防御可见性的日志聚合堆栈(Grafana + Loki)。
## 实验目录
| 服务 | URL | 用途 |
|---|---|---|
| OWASP Juice Shop | http://localhost:3000 | Web 应用 CTF (XSS, IDOR, SQLi, …) |
| DVWA | http://localhost | 经典 Web 漏洞训练 (SQLi, XSS, 文件上传) |
| 存在漏洞的 API | http://localhost:4000 | 带有 XSS、CMDi 和不安全认证的定制 Node API |
| Grafana | http://localhost:3002 | 日志仪表板 (admin / admin) |
| Loki | http://localhost:3100 | 日志采集 API |
| Kali 容器 | `docker exec -it lab_kali bash` | 攻击工具 |
挑战详解和解决方案笔记位于 [`challenges/`](challenges/README.md)。
## 架构
```
Host
└── Docker bridge network: labnet (isolated, not internet-routable)
├── lab_kali – Kali rolling (offensive tools)
├── lab_juice – OWASP Juice Shop :3000
├── lab_dvwa – DVWA :80 → depends on lab_dvwa_db
├── lab_dvwa_db – MySQL 5.7 (internal only)
├── lab_vuln_api – Custom Node vulnerable API :4000
├── lab_loki – Loki log store :3100
├── lab_promtail – Log collector (forwards to Loki)
└── lab_grafana – Grafana dashboards :3002
```
所有服务共享 `labnet` 桥接网络。只有列出的端口绑定到 localhost。有关扩展说明,请参阅 [`docs/architecture.md`](docs/architecture.md)。
## 快速开始
### 前置条件
- Docker Desktop (macOS/Windows) 或 Docker Engine + Compose 插件 (Linux)
- `curl` (健康检查)
- Node 18+ (可选 — 用于在本地不使用 Docker 运行漏洞 API 测试)
### 1. 克隆并启动
```
git clone https://github.com/BasitS-hash/cybersecurity-lab.git
cd cybersecurity-lab
cp .env.example .env # review defaults — never commit .env
./scripts/start.sh # builds vuln-api image then starts all services
```
### 2. 验证服务是否启动
```
./scripts/check_lab.sh
```
### 3. 运行漏洞 API 冒烟测试 (可选,本地 Node)
```
cd infra/vuln-api
npm install --no-audit --no-fund
npm test
```
### 4. 停止实验环境
```
./scripts/stop.sh # keeps volumes
# 或
./scripts/cleanup.sh # full teardown including volumes
```
### Makefile 快捷方式
```
make up # start lab
make down # stop lab
make check # health checks
make validate # validate docker-compose syntax
make logs # tail all logs
```
## 挑战
| 挑战 | 目标 | 漏洞 |
|---|---|---|
| [存在漏洞的 API](challenges/api/vuln-api/README.md) | `localhost:4000` | 反射型 XSS、命令注入、不安全的认证 |
| [Juice Shop](challenges/web/juice-shop/README.md) | `localhost:3000` | 记分牌驱动 — XSS, IDOR, 访问控制失效, … |
| [DVWA](challenges/web/dvwa/README.md) | `localhost` | SQL 注入、XSS、文件上传、CSRF |
每个挑战文件夹都有一个 `README.md` (目标 + 提示) 和一个 `SOLUTION.md` (完整演练)。请先阅读 README。
### 修复练习
比较 `infra/vuln-api/app.js` (故意留有漏洞) 和 `infra/vuln-api/app_fixed.js` (已加固)。运行加固后的服务器:
```
SECURE_USER=admin SECURE_PASS=your-strong-pass node infra/vuln-api/app_fixed.js
node infra/vuln-api/test_fixed.js # verify fixes
```
## 日志与监控
Grafana + Loki + Promtail 随实验室一起提供。运行 `make up` 之后:
1. 打开 http://localhost:3002 (admin / admin)。
2. 添加一个 Loki 数据源:URL `http://loki:3100`。
3. 使用 Explore 功能并查询 `{job="varlogs"}` 或按 `container` 进行过滤。
## CI/CD
| 工作流 | 触发条件 | 作用 |
|---|---|---|
| `ci.yml` | push / PR | 针对 vuln-api 的 Node 冒烟测试 |
| `lint.yml` | push / main, PR | 对脚本进行 ShellCheck 检查、YAML lint、Hadolint |
| `secret-scan.yml` | push / PR | 基础的硬编码密钥正则扫描 |
| `codeql.yml` | push / PR | GitHub CodeQL 静态分析 (JavaScript) |
| `integration.yml` | push / PR | 启动完整的 compose 堆栈 + 健康检查 + 冒烟测试 |
## 道德与授权使用
此仓库**仅用于教育和授权的安全测试**。
- **切勿**在生产环境或共享网络上运行这些服务。
- 仅在你拥有或获得明确书面授权进行测试的计算机/网络上使用。
- 保持 `labnet` Docker 网络与你的局域网 (LAN) 隔离。
- 在练习之间重置并销毁容器,以避免状态泄露。
- 未经授权,请勿将此处练习的技术用于对抗系统——这是非法且不道德的。
使用此实验室即表示你同意仅将其用于合法、授权的目的。
## 扩展实验室
提升实验室等级的想法:
- **IDS/IPS:** 以传感器模式添加 Suricata 或 Zeek — 参见 [`docs/ids.md`](docs/ids.md)。
- **Metrics:** 添加 Prometheus + Node Exporter 并连接到 Grafana 仪表板。
- **C2 / 内网穿透:** 添加一个 C2 框架容器(Sliver, Havoc)以练习后渗透。
- **SAST/DAST:** 将 Semgrep 或 OWASP ZAP 接入为 CI 步骤。
- **持久化快照:** 使用命名的 Docker 卷,以便 DVWA MySQL 在重启后得以保留。
## 仓库结构
```
cybersecurity-lab/
├── challenges/ # Per-target challenge READMEs + solution write-ups
│ ├── api/vuln-api/
│ └── web/{juice-shop,dvwa}/
├── docs/ # Architecture, logging, IDS notes
├── infra/
│ ├── vuln-api/ # Custom vulnerable Node API (app.js) + hardened (app_fixed.js)
│ └── logging/ # Loki + Promtail configs
├── scripts/ # start / stop / build / check / validate / cleanup helpers
├── .github/
│ ├── workflows/ # CI, lint, secret-scan, CodeQL, integration
│ └── dependabot.yml
├── docker-compose.yml
├── Makefile
└── .env.example
```
## 许可证
[MIT](LICENSE) — 可自由用于学习。请参阅[道德与授权使用](#ethics--authorized-use)。
标签:CISA项目, Docker, Grafana, Loki, MITM代理, TGT, 安全防御评估, 安全靶场, 攻防演练, 版权保护, 网络安全, 自定义脚本, 请求拦截, 隐私保护