Secure Logon - PicoCTF 2018 web challenge writeup

Flag: picoCTF{fl1p_4ll_th3_bit3_2efa5ba8}
Source: https://www.dropbox.com/s/awe7dej0zdhnhrh/server_noflag.py?dl=0


Đề bài cho source như trên, chúng ta cùng phân tích nào! Nhưng đầu tiên, ta vẫn ngó qua xem giao diện web trông ra sao: 

Khái quát là: Một trang đăng nhập, với bất kì username khác "admin" thì sẽ đăng nhập thành công vào ra giao diện như hình trên, chú ý trường admin : 0 đồng nghĩa với việc ta không có flag :)) 
Đến đây, 99,99% nếu ta đặt được admin:1 thì ta sẽ có flag! Vậy ta làm việc đó bằng cách nào ?

Quay lại phân tích source đề cung cấp , ta nhận ra rằng : ở hàm login(), sau khi lấy username và password thì ứng dụng web này sinh ra 1 cookie bằng cách mã hóa AES với mode CBC


Sau đó điều hướng đến path /flag, tại path /flag, chương trình sẽ decrypt AES cái cookie mà đã set ở trên, sau đó kiểm tra nếu trường admin =1 thì trả flag, như vậy là dự đoán ở trên là đúng, giờ việc của chúng ta là cần tạo ra 1 ciphertext đặt vào cookie để sau khi ứng dụng nhận được cookie này decrypt lại ra chuỗi json có trường admin là 1.

Thực ra vấn đề bây giờ quay về việc khai thác hệ mật AES mode CBC, kỹ thuật chúng ta sẽ dùng để khai  ở đây có tên gọi là bit-flipping , đây là kỹ thuật bạn có thể ép 1 ciphertext decrypt thành 1 message nào đó mà ta mong muốn, các bạn có thể gg để hiểu rõ hơn, sau đây là solution:


Share:

0 nhận xét:

Đăng nhận xét