[SVATTT2017] Web 100 - Tên là gì ấy chả nhớ?

Đề bài: Là cái gì đấy cũng chả nhớ

(Special thanks to Huy Anh Nguyễn).

Kiểm tra robots.txt, mình thấy được đường dẫn /.git/. Theo kinh nghiệm chơi CTF gần 2 năm của mình thì đây có thể là 1 git repository chứa source của trang web.

Đang phân vân suy nghĩ xem có nên cài máy ảo Ubuntu để clone cái repository về không (thanh niên chơi dại vừa xóa hết máy ảo) thì được teamate clone xong và vứt cho đống source. (Sử dụng: GitTools)

Sau khi đọc qua đống source code thì mình chú ý tới 2 file sau:

Ta thấy được có 2 cách để đăng nhập như sau:

- Cách thứ nhất là đăng nhập bằng username TieuPhong password ********************.(tất nhiên cách này sẽ không thành công rồi, mình chỉ nêu ra cho vui thôi :3 ).
Update: Cách này login vẫn được nhé. Mình bị lừa. F*ck!!!

- Cách thứ hai là đăng nhập thông qua cookie sử dụng hàm fnDecrypt trong file secret.php.

Tìm hiểu về cách login bằng cookie mình rút ra mấy điểm:

- Ta phải tạo được giá trị auth của cookie sao cho sau khi decrypt bằng hàm fnDecrypt ta được kết quả có tiền tố (prefix) là TieuPhong.

- Hàm fnDecrypt sử dụng mcrypt_decrypt để giải mã cookie, như vậy để tạo được cookie thỏa mãn yêu cầu thì ta phải sử dụng mcrypt_encrypt để tạo ra cookie.

- 2 hàm trên có các tham số truyền vào giống nhau (ngoại trừ tham số data). Như vậy ta cần tạo ra tham số iv dùng chung cho cả 2.

- Do iv_size = 32 (tính ra được) nên ta chọn iv là 1 xâu bất kì có độ dài 32 ký tự.

- Mình chọn iv = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

- Hàm fnDecrypt sử dụng 32 ký tự đầu của cookie sau khi decode base64 để làm iv, phần còn lại là cipher để decrypt.

- Vậy trong hàm fnEncrypt sau khi encrypt tạo ra cipher ta thêm iv vào trước cipher, sau đó encode base64.

Mình xây dựng được hàm fnEncrypt như sau:

Gọi hàm fnEncrypt("TieuPhong", "ItsHardToBeliefs_ENCRYPT") để tạo giá trị cho cookie.

Đáp vào trình duyệt => Flag: SVATTT2017{git_kungfu}

Nhận xét

Bài đăng phổ biến từ blog này

[SVATTT2017] Web 300 - Whichgirls