# Platform CTFCup A/D
## Giới thiệu
Tài liệu này hướng dẫn các bước để triển khai bộ mã nguồn của cuộc thi **CTF Cup Attack-Defense** trên một máy chủ ảo (VM) duy nhất. Mục tiêu là tạo ra một môi trường lab cá nhân để **phân tích, thực hành, và trình diễn** các bài thi (services).
Hệ thống nguyên bản được thiết kế để chạy trên nền tảng ForcAD, nhưng hướng dẫn này cấu hình để hoạt động **độc lập** trên một máy chủ đơn cho mục đích demo.
## 1. Yêu cầu Môi trường
**Hệ điều hành (gợi ý):** Ubuntu 22.04 LTS (hoặc Debian tương đương)
**Phần mềm cần thiết:**
- `git`
- `docker.io`
- `docker-compose`
- `python3`
- `python3-pip`
**Cấu hình phần cứng tối thiểu (khuyến nghị cho demo):**
- CPU: 4 cores
- RAM: 8 GB
- Disk: 40 GB dung lượng trống
> **Gợi ý:** Với nhiều service và khi build image lần đầu, bạn càng có nhiều RAM và disk càng tốt (16 GB RAM, 80 GB disk nếu có thể).
## 2. Cài đặt & Cấu hình Chi tiết
Thực hiện tuần tự các bước sau trên VM (giả sử bạn đang dùng Ubuntu 22.04):
### Bước 1: Tải Mã nguồn
```bash
git clone https://github.com/C4T-BuT-S4D/ctfcup-2023-ad.git
cd ctfcup-2023-ad/
```
> Nếu repo private, hãy chuẩn bị SSH key hoặc token và clone với HTTPS có credential.
### Bước 2: Cấu hình Môi trường Demo
Vì chỉ chạy trên một VM, cần chỉnh file cấu hình chính để game engine kiểm tra các service chạy cục bộ.
Mở file `forcad_config.yml`:
```bash
nano forcad_config.yml
```
Tìm phần `teams` ở cuối file. Xóa mọi đội khác, chỉ giữ một đội duy nhất với IP `127.0.0.1`.
Nội dung mẫu:
```yaml
teams:
- ip: 127.0.0.1
name: DemoTeam
highlighted: true
```
Lưu và thoát (Ctrl+X → Y → Enter).
**Lý do:** Trong môi trường demo một máy, engine cần biết nơi để kiểm tra service — dùng localhost để hướng mọi bài thi về chính VM đó.
### Bước 3: Sửa lỗi Cấu hình Docker (rox -> ro)
Mã nguồn gốc có lỗi nhỏ trong hai file `docker-compose.yml` (dòng mount có hậu tố `rox` thay vì `ro`). Sửa lại để Docker có thể mount script khởi tạo DB.
- Sửa file của `oilmarket`:
```bash
nano services/oilmarket/docker-compose.yml
```
Tìm dòng:
```
- ./postgres/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:rox
```
Sửa `rox` thành `ro`.
- Sửa file của `neftetochka`:
```bash
nano services/neftetochka/docker-compose.yml
```
Tương tự, thay `rox` -> `ro`.
> **Lưu ý:** Luôn kiểm tra cú pháp YAML (khoảng trắng, thụt lề) sau khi sửa.
### Bước 4: Cài đặt Dependencies (Thư viện Python)
Cài thư viện cho script chính và checker:
```bash
sudo pip3 install -r requirements.txt
sudo pip3 install -r checkers/requirements.txt --break-system-packages
```
> `--break-system-packages` được dùng trên một số bản Ubuntu/Debian để cho phép pip can thiệp vào environment hệ thống. Nếu bạn sử dụng virtualenv, **khuyến nghị** tạo virtualenv thay vì dùng `sudo pip3`.
**Alternative (khuyến nghị an toàn hơn):** dùng `python3 -m venv venv` → `source venv/bin/activate` → `pip install -r requirements.txt` và tương tự cho checkers (hoặc pip vào cùng venv nếu phù hợp).
### Bước 5: Mở Cổng Firewall
Mở các cổng cần thiết để truy cập service từ bên ngoài (hoặc từ host nếu VM NAT):
```bash
sudo ufw allow ssh
sudo ufw allow 2112/tcp comment 'Service: oilmarket'
sudo ufw allow 9090/tcp comment 'Service: bluwal'
sudo ufw allow 8087/tcp comment 'Service: neftetochka'
sudo ufw allow 8000/tcp comment 'Service: explorers'
sudo ufw enable
```
> Nếu VM chạy trên cloud (AWS/GCP/OVH...), đừng quên mở Security Group / Firewall của nhà cung cấp tương ứng.
## 3. Vận hành Platform
Sau khi cài đặt & cấu hình xong, dùng `check.py` để quản lý toàn bộ platform.
### Khởi động tất cả Services
```bash
sudo python3 check.py up
```
Lần chạy đầu tiên có thể mất vài phút do build image và pull base images.
### Kiểm tra trạng thái
Dùng `docker ps` để kiểm tra container đang chạy. Kỳ vọng: **khoảng 9 container** (tùy phiên bản và dịch vụ có thể khác).
```bash
sudo docker ps
```


### Dừng tất cả Services
```bash
sudo python3 check.py down
```
Lệnh `down` sẽ dừng và xóa container, network, volume liên quan — thuận tiện để dọn dẹp môi trường demo.

## 4. Tương tác & Tấn công (Thực hành)
Khi service đang chạy, bạn có thể bắt đầu tương tác hoặc thử các khai thác (exploit) trong thư mục `sploits/`.
### Truy cập Giao diện Web (Blue Team)
Mở trình duyệt tới `http://<IP_VM>:<PORT>` tương ứng:
- Oilmarket: `http://<IP_VM>:2112`
- Bluwal: `http://<IP_VM>:9090`
- Neftetochka: `http://<IP_VM>:8087`
- Explorers: `http://<IP_VM>:8000`
**Bluwal:** trước khi đăng nhập cần tạo `user_id` qua API:
```bash
curl -X POST http://<IP_VM>:9090/api/users -H "Content-Type: application/json" -d '{"username": "testplayer"}'
```
Lệnh trả về JSON chứa `user_id` — copy và dùng để đăng nhập.
### Chạy Exploit (Red Team)
Mở terminal mới, chuyển vào từng thư mục `sploits/` và chạy script tương ứng.
**Bluwal (Port 9090):**
```bash
cd sploits/bluwal/
# Lấy <contest_id> từ giao diện web
python3 genji_array_comparison.py <IP_VM> <contest_id>
```
**Explorers (Port 8000):**
```bash
cd sploits/explorers/
python3 xxe.py <IP_VM> 8000
```
**Neftetochka (Port 8087):**
```bash
cd sploits/neftetochka/
python3 spl.py <IP_VM> 8087
```
**Oilmarket (Port 2112):**
```bash
cd sploits/oilmarket/
python3 sploit.py <IP_VM>
```
> Thực hành exploit chỉ nên làm trong môi trường lab/được phép.
## 6. Kiểm tra & Xác thực hoạt động
1. Sau khi `check.py up` hoàn tất, kiểm tra `docker ps` — các container chính (web services, postgres, redis, etc.) phải ở trạng thái `Up`.
2. Truy cập từng giao diện web bằng trình duyệt để xác thực trang load đúng.
3. Kiểm tra log từng container nếu có lỗi:
```bash
sudo docker logs <container_name_or_id>
```
4. Kiểm tra kết nối tới DB nếu service chưa khởi động:
```bash
# ví dụ kiểm tra postgres
sudo docker exec -it <postgres_container> pg_isready
```
## 7. Ghi chú bảo mật và an toàn
- Không triển khai môi trường này trên máy chủ sản xuất hoặc với cổng mở public mà không có kiểm soát; các service chứa intentional vulnerabilities.
- Chỉ mở cổng cần thiết; nếu có thể, hạn chế truy cập bằng firewall rules cho IP cụ thể hoặc VPN.
- Đặt snapshot/backup trước khi chạy exploit.
- Giới hạn quyền `sudo` và sử dụng user non-root khi vận hành script nếu có thể.
## 8. Troubleshooting — Các sự cố thường gặp
**1) Docker không khởi động do mount sai (`rox`)**
- Triệu chứng: container fail khi `docker-compose` chạy; log báo lỗi mount.
- Giải pháp: sửa `rox` -> `ro` như mô tả ở Bước 3.
**2) Thiếu dependencies / pip lỗi**
- Triệu chứng: `pip` báo lỗi hoặc cài không thành công.
- Giải pháp: sử dụng `venv` thay vì `sudo pip`, hoặc thêm `--break-system-packages` nếu thật cần và hiểu rủi ro.
**3) Một service không trả lời trên cổng**
- Kiểm tra `docker ps` để xác định container có chạy hay không.
- Kiểm tra logs: `sudo docker logs <container>`.
- Kiểm tra firewall/host firewall/cloud security group.
**4) Lỗi cấu hình YAML**
- Dùng `yamllint` hoặc kiểm tra thụt lề, tránh tab/space mix.
**5) Lỗi permission khi chạy `check.py`**
- Hãy chạy với `sudo` nếu script cần quyền cao, hoặc chỉnh quyền file (chỉ khi bạn hiểu tác động bảo mật).
## 9. Checklist triển khai nhanh (Quick-run)
1. [ ] Chuẩn bị VM (Ubuntu 22.04), update & upgrade
2. [ ] Cài Docker & docker-compose, python3, pip
3. [ ] Clone repo
4. [ ] Sửa `forcad_config.yml` -> teams: localhost
5. [ ] Sửa `rox` -> `ro` trong 2 docker-compose
6. [ ] Cài dependencies (pip install)
7. [ ] Mở cổng ufw
8. [ ] `sudo python3 check.py up` — chờ build
9. [ ] `sudo docker ps` — xác thực
10. [ ] Truy cập web & chạy sploits nếu cần
## 10. Phụ lục
### Command cheat-sheet
```bash
# Clone
git clone https://github.com/C4T-BuT-S4D/ctfcup-2023-ad.git
cd ctfcup-2023-ad/
# Edit config
nano forcad_config.yml
# Fix docker-compose mounts
nano services/oilmarket/docker-compose.yml
nano services/neftetochka/docker-compose.yml
# Install deps
sudo pip3 install -r requirements.txt
sudo pip3 install -r checkers/requirements.txt --break-system-packages
# Firewall
sudo ufw allow ssh
sudo ufw allow 2112/tcp
sudo ufw allow 9090/tcp
sudo ufw allow 8087/tcp
sudo ufw allow 8000/tcp
sudo ufw enable
# Run platform
sudo python3 check.py up
sudo docker ps
sudo python3 check.py down
# Create Bluwal user (example)
curl -X POST http://<IP_VM>:9090/api/users -H "Content-Type: application/json" -d '{"username": "testplayer"}'
```
### Tài liệu tham khảo
- Repository gốc: `https://github.com/C4T-BuT-S4D/ctfcup-2023-ad` (kiểm tra quyền truy cập)
---
### Gợi ý mở rộng (nếu muốn triển khai gần thực tế hơn)
- Chạy multiple VM hoặc containerized teams để mô phỏng nhiều đội cùng lúc.
- Kết hợp với ForcAD/CaCTF nếu có sẵn để sử dụng engine gốc.
- Tự động hoá việc tạo snapshots trước khi chạy exploit bằng script (LVM/ZFS/snapshot API của cloud provider).