pay me 2 win

Published on July 13, 2025

Pay me 2 win

image

Buka link yang tersedia, dan ditemukan potongan source code (index.php) berikut

image

Terdapat hint yang diberikan di bagian komentar, mengikuti petunjuk pada komentar, kita mengunjungi alamat berikut: http://ctf.asgama.online:40003/?is_debug=1 Setelah dibuka lalu di scroll ke bawah, ditemukan potongan suatu source code PHP berikut:

image

Dari potongan kode di atas, kita bisa menyimpulkan:

  • Input money dikirim melalui metode POST.
  • Nilai money harus merupakan digit numerik (ctype_digit).
  • Kemudian, nilai tersebut dijumlahkan dengan 0x1337 (atau 4919 dalam desimal), dan dibandingkan apakah hasilnya === 0.
  • Jika kondisi ini terpenuhi, maka flag akan ditampilkan.

Namun, karena ctype_digit() hanya menerima angka positif tanpa tanda minus, kita tidak bisa langsung mengirim nilai -0x1337 untuk membuat hasil akhir menjadi nol. Solusi untuk ini adalah mengirim nilai overflow yang jika ditambahkan dengan 0x1337 menghasilkan nol saat dikonversi ke tipe int. Untuk mengakali pengecekan ctype_digit, kita manfaatkan integer overflow. Nilai money yang kita kirim adalah: 18446744073709546697 Nilai ini merupakan hasil dari:

image

Ketika nilai ini dikonversi ke int dalam konteks 64-bit integer overflow, hasil akhirnya adalah -0x1337, sehingga:

(int)($money+0x1337)===0

Kemudian, untuk memudahkan proses exploitasi, kita menggunakan burpsuite untuk mengubah request value.

image
Flag: LK25{w0w_ez_0v3rfl0w}
```