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, 安全防御评估, 安全靶场, 攻防演练, 版权保护, 网络安全, 自定义脚本, 请求拦截, 隐私保护