---
# System prepended metadata

title: Platform CTFCup A/D

---

# 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
```
![Ảnh chụp màn hình 2025-10-16 214942](https://hackmd.io/_uploads/ByxjUFR6el.png)
![Ảnh chụp màn hình 2025-10-16 215059](https://hackmd.io/_uploads/HycRLtC6eg.png)

### 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.

![Ảnh chụp màn hình 2025-10-16 214951](https://hackmd.io/_uploads/BJcsLYCpgl.png)


## 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).