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