[35c3CTF] – Collection

Sebenarnya saya baru solve ini +12 jam setelah CTF berakhir, dengan bantuan rekan tim Auxy dan Kileak. File berada di sini.

 

Kita diberikan 5 file:

Mari kita lihat isi dari server dan test:

Ingat bahwa file flag sudah dibuka dan berada pada fd nomor 1023. Pada pertamanya, mungkin ini akan terlihat seperti python jail, tetapi ini bukan. Semua built-in dihapus kecuali id, hex, print, dan range. Jika anda berpikiran seperti ini:

Ini akan gagal. Hampir semua fitur dihapus dari python, jadi tidak bisa melakukan jail escape. Jika begitu, maka kuncinya terdapat pada modul Collection yang diberikan. Dari percobaan beberapa kali, dapat disimpulkan:

  1. Object Collection harus dibuat dengan satu dictionary sebagai parameternya
  2. Isi dari dictionary harus berupa list, integer, atau dictionary

Modul Collection ini juga mempunyai seccomp rules:

Jadi, rencananya adalah:

  1. Menemukan vulnerability pada Collection
  2. memanggil readv pada file descriptor 1023
  3. print flag ke stdout

Dengan metode fuzzing, kami berhasil membuat python3 crash dengan script awal:

Lalu, muncul pikiran “Bagaimana jika dimasukkan string/byte array ?”. Beberapa saat kemudian, didapatkan crash dengan script:

dan crash dump:

Yang bisa saya pahami adalah, ketika print(a.get(‘a’)) dipanggil, python akan mendapatkan representasi object tersebut, dan memanggil pointer fungsi yang terdapat pada object tersebut untuk mendapatkan representasinya. r11 adalah alamat dari byte array kita. Langkah selanjutnya adalah melakukan ROP untuk mendapatkan flag (karena one_gadget/execve tidak diperbolehkan). Leak cukup mudah ditemukan karena fungsi id mereturn alamat dari parameter (fungsi, variabel, module, dll). Setelah cukup lama mencari gadget yang cocok, ditemukan gadget-gadget ini:

Dengan gadget-gadget ini, tinggal disusun ROP chain untuk mengambil flag dari server. Berikut script exploitnya:

Saya tidak mengetahui mengapa terdapat perbedaan offset pada alamat libc (entah itu pada gdb, local, maupun remote; semuanya berbeda). Ketika dijalankan pada remote server:

Leave a Reply

Your email address will not be published. Required fields are marked *