Hôm nay mình rảnh nên ngồi chơi CTF tý cho vui vào chọn một thử thách để chơi giết thời gian tý.
I: Tragic pHp
Đầu tiên vô web xem sao

Hình như nó bắt mình nhập key gì đó xem mã nguồn xem sao
nó cho mình tới cái file phps chắc là mã nguồn chăng

Thì đúng nó là mã nguồn thiệt

Việc chúng ta là đi tìm cái gì đó để so sánh với cái gì đó được giấu từ đó sinh ra key,
Nhưng khoan trước khi đi tìm cái gì đó thì thấy cái strcmp, ủa so sánh vậy thì chết roài, cái strcmp có lỗ hổng chết người từ lâu rồi khi so sánh chuỗi với chuỗi thì không sao nhưng khi so sánh mảng thì lại cho kết quả NULL! Mà NULL == 0 => true, tính năng vi diệu vậy thì lấy cờ thôi

II: PHP info
Đầu tiên cho mình mã nguồn như vậy
Nhìn phát mình biết ngay do mã nguồn này mình đã dùng để đi khai thác RCE trên malwaredecoder nên chỉ mất 5s để lấy được flag.

Chi tiết về cách khai thác này các bạn có thể tham khảo ở đây
III: Enough PHP magic
Ở phần này thì chúng ta có một ô nhập cái gì đó để tìm cái gì đó

dựa vào phần I trên thì mình đoán luôn file index.phps, không nằm ngoài dự đoán có mã nguồn luôn này

Như vậy đã rõ chúng ta phải so sánh cái gì với cái gì rồi. và chúng ta thấy vấn đề với extract của php.
Và ta chỉ được flag khi mà 2 biến attempt và combination bằng nhau, mà biến combination được lấy từ filename.
Giả sử, ta cho biến attemp='' và filename=<any value> thì sẽ như thế nào?
Code nó sẽ chạy như sau:
- Nó sẽ gán lại cho 2 biến trước đó bằng giá trị mà ta vừa gửi lên
- Nhưng quan trọng là
filenamenó không có trong resource thì sẽ trả về rỗng, rồi gán chocombination - Mà
attemptcũng rỗng nên 2 thằng đó bằng nhau và ta có flag
Kết quả:

Thôi tạm thời nghịch thế đã 🙂