docker compose up -d
docker compose logs -f bot
Đề có các dịch vụ sau:
Mathsays
: Sử dụng Deno (javascript) và canvas để tạo hình ảnh cowsays từ text là các công thức toán họcUpload Log
: Sử dụng PHP/Apache để upload logFreeDom Chat
: Sử dụng Deno (javascript) websocket để làm phòng chat giữa người dùngPostgrest
: Sử dụng postgrest làm rest api cho postgres để cung cấp cho FreeDom Chat
Người dùng truy cập vào các dịch vụ thông qua nginx proxy:
/
=> Trang tĩnh html bao gồm index.html (thông báo 403), mathsays.html, free-chat.html, swagger.html, việc thông báo 403 là intended, đội chơi cần phải monitor traffic, nginx access log để biết được các endpoints của hệ thống/api/
=> Trang API cho phép gọi functions/procedure/tables trên postgrest/log-api/
=> Trang upload log của PHP, chuyển tiếp request tới Apache/mathsays
=> Trang cho phép generate hình ảnh từ đoạn mã là công thưc toán học, trả về png/ws
=> Trang kết nối websocket thực hiện chat realtime
-
/api/
(postgrest):- unauthentication blind command injection
- nhiều ssrf
-
/log-api/
:- apache CVE-2021-41773 cho phép đọc tệp tùy ý trên hệ thống
- file upload php dẫn tới RCE
- phpunit CVE-2017-9841 RCE
-
/mathsays
: command injection -
/ws
: SQL Injection (2 lỗi với 2 escape character khác nhau'
và$$
)
mathsays
: thực hiện tiếp nhận tham số t và chạy commanddeno says-cli.ts
<= command injection sảy ra ở đâyphp upload log
: nhận tham số log là tệp upload và lưu lại tại thư mục logs/[ngày tháng năm giờ:phút]ws
: bao gồm 2 tables: chats và messages.- Khi người dùng tạo phòng chat hoặc join phòng chat, table chats được insert mới.
- Khi người dùng nhắn tin, websocket nhận event khác 'ping', decode json và insert tin nhắn vào table messages (SQL Injection xảy ra tại đây). Người lập trình cố gắng insert tin nhắn nếu fail (2 lỗi SQL Injection).
postgres/postgrest
: functionpublic.c
được tạo để chạy câu lệnh cmd, tuy nhiên function này không còn sử dụng nữa (lỗ hổng của hệ thống)
Các hàm check dịch vụ của bot và cách check
checkUptime
: Truy cập trang chủ và check statuscheckFakeFlag
: Truy cập mathsays.html và check md5 xem có bị xóa bỏ khôngcheckFreeChat
: Truy cập free-chat.html và check statuscheckMathsays
: Truy cập/mathsays?t=
với các công thức và câu hỏi toán học khác nhau để kiểm tra việc tạo hình ảnh, check response của hệ thống có khớp khôngcheckPHPUploadLog
: Thực hiện upload các tệp tin với định dạng khác nhau, nội dung ngẫu nhiên lên/log-api/app/upload-log.php
, các tệp tin không gây hại, không có.php
,.htaccess
,.html
,..., check responsecheckPHPUploadLog-stage2
: Thực hiện truy cập vào tệp đã upload và kiểm tra status, check responsecheckAPIHttp
: Thực hiện sử dụng functionhttp_get
của postgres để truy cập vào các website khác nhau trên internet, check responsecheckCreateChat
: Thực hiện tạo một phòng chat mới trên postgres, check responsecheckChatWs
: Thực hiện connect websocket và gửi tin nhắn cho chat id từ 1-15, lắng nghe tin nhắn đã được gửi và kiểm tracheckChatId
: Truy cập để xem chat id vừa gửi từ websocket, check response- Bot sẽ tự động restart sau mỗi round mới