[DownUnder CTF 2025] WEB + AI

Kính chào mọi người,
Lại 1 tuần nữa đến và rất hạnh phúc khi mình được chia sẻ một chút trải nghiệm của bản thân về giải ctf này, cũng như em xin cảm ơn các anh chị trong team CTF công ty đã hỗ trợ bản thân em ạ.
Web exploitation
mini-me
Khi xem xét mã nguồn, mình thấy phần này khá thú vị,
Vậy nên có thể lấy được cờ nếu biết API_SECRET_KEY. Không có nhiều thứ trên source code nên mình thử kiểm tra web như người dùng bình thường xem có điểm nào đáng ngờ không.
Có vẻ là lổ hổng information disclosure, thử truy cập đường dẫn này.
Nhìn kỹ một chút, tôi tìm thấy bình luận "key". Hình như khóa bí mật đã bị làm cho khó đọc(obfuscation). Mình không rành về phần này lắm, sau một lúc tra cứu mình viết đoạn script sau để giải mã.
encrypted = [
85, 87, 77, 67, 40, 82,
82, 70, 78, 39, 95, 89,
67, 73, 34, 68, 68, 92,
84, 57, 70, 87, 95, 77, 75
]
# Bước 1: Duyệt qua từng phần tử và index của nó
# Bước 2: Dùng phép XOR với (index + 1)
# Bước 3: Biến kết quả thành ký tự (ASCII)
# Bước 4: Ghép lại thành chuỗi
decrypted = ''.join(
chr(num ^ (i + 1)) for i, num in enumerate(encrypted)
)
print(decrypted)
# final: 'TUNG-TUNG-TUNG-TUNG-SAHUR'
STONK
Đăng ký và đăng nhập, bạn sẽ có một tài khoản với 50 AUD, nhiệm vụ của là biến nó thành 1.000.000.000.000.000.000 (rất nhiều số 0). Cơ bản thì mình đoán sẽ phải lợi dụng lỗ hổng logic nào đó để lấy được tiền vô hạn.
Đọc lần lượt source code thì mình phát hiện một số điểm khá thú vị.
Mình nhanh chóng tìm ra lỗi, họ sử dụng old_currency thông qua cookie mà mình có thể tùy ý sửa đổi. Vậy nên ý tưởng của tôi là đổi AUD sang GBP, sao chép cookie GBP trong response trả về, sau đó dùng cookie đó để đổi sang IDR nhiều lần thành STONK. Số tiền sẽ là: (tiền / 0,48) * 10597,38 và nó sẽ tăng rất nhanh. Mình lặp lại request đổi tiền từ GBP sang IDR tầm 15 lần.
Nghĩ là đã đủ tiền theo yêu cầu, việc bây giờ là đổi sang AUD và lấy cờ thôi.
AI
Ductfbank1, Ductfbank2
VÌ chuỗi bài này cùng 1 source code nên mình sẽ trình bày chung luôn cho cả 2 bài.
Flag đầu tiên,
Nhìn qua nội dung code thì mình thấy luôn cách lấy flag đầu tiên.
Theo như dòng code thì mình có thể bảo AI tạo ra một account mới, và khi đó flag bonus sẽ được đi kèm cùng tài khoản được tạo.
Mình nghĩ rằng thông tin xác thực này mà thử thách cho mình là từ một người quản lý hoặc một người có quyền lực trong công ty. Thử dùng prompt để tạo một tài khoản mới.
Vậy là mình đã tạo thành công một tài khoản, hãy nhấn f5 để load lại trang và nhấp vào tài khoản mới mà mình vừa tạo.
Đọc thêm một chút trên agent.ts. Mình đã tìm thấy cách lấy cờ 2.
Có lẽ mình có thể prompt cho AI hiển thị công cụ cờ. Hãy thử xem nhé.
Vậy là 2 flag đã được lấy thành công.
Lời kết
Cảm ơn mọi người đã dành thời gian đọc blog chia sẻ về ctf DownUnder này. Mình mong rẳng trong tương lai sẽ được chia sẻ nhiều hơn các thử thách ctf của các giải khác cho mọi người ạ.
Subscribe to my newsletter
Read articles from Thắng Nguyễn directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
