[how2bof] – Level 5 (bof5)

Pendahuluan

Pertama-tama, mari kita lihat ciri-ciri dari binary ini:

Ciri-ciri dari binary bof5

Binary tersebut merupakan binary 32-bit dengan fitur NX yang dinyalakan (kita tidak bisa memasukkan shellcode kita sendiri ke dalam stack.) Fitur ASLR juga diaktifkan (alamat libc akan berubah tiap kali kita menjalankan ldd) sehingga sedikit mempersulit peretasan binary ini. Mari kita jalankan binary ini terlebih dahulu:

Binary setelah dijalankan

Seperti yang sudah tertera dalam description yang ada di atas, ret2libc adalah teknik yang digunakan untuk meretas binary ini. Setelah kita menjalankan binary, kita diberikan bocoran alamat memori untuk stdin, sehingga kita cukup mencari alamat (base address) dari libc untuk melewati ASLR. Pada gambar pertama, kita menjalankan ldd untuk melihat libc yang dipakai oleh binary kita, yang terletak di /lib32/libc.so.6 (sesuaikan dengan hasil yang kalian dapatkan).

Eksploitasi

Pertama, kita perlu mencari tahu seberapa panjang padding dari input kita untuk menimpa register EIP. Hal ini cukup mudah untuk dilakukan dalam gdb-peda.

Tahap awal fuzzing input untuk binary

Mencari letak offset menuju EIP

Maka, kita perlu padding sebesar 76 karakter sebelum kita dapat menimpa EIP. Mengingat bahwa kita mendapatkan alamat yang bocor dan diberi petunjuk untuk memanfaatkan teknik ret2libc, kita akan menggunakan readelf untuk mencari offset dari stdin dalam libc tersebut.Offset stdin dalam libc

Kita anggap bahwa versi terbaru yang dipakai, yakni _IO_2_1_stdin_. Kita bisa mengcopy offset hexadecimal secara manual, namun untuk kemudahan, kita akan menggunakan fitur-fitur dari pwntools tanpa perlu mengingat angka hexadecimal tersebut. Berikut script yang kita akan gunakan untuk mengecek apakah offset yang kita gunakan benar

Apabila perhitungan offset kita benar, maka alamat dari system yang tercetak dan yang didapatkan dari gdb harusnya sama (apabila beda, coba gunakan offset stdin yang lain), seperti contoh berikut:

Hasil perbandingan alamat memori yang dicetak script dan yang diperoleh dari gdb

Kita sekarang sudah mengetahui ukuran padding untuk menimpa EIP untuk mengubah alur eksekusi program serta base address dari libc untuk menggunakan function lain (Dalam kasus ini, kita akan menjalankan system dengan parameter "/bin/sh", yang juga terdapat dalam libc)

Penutup

Payload kita akan tersusun dari: 76 karakter padding + alamat system + return address (4 karakter/byte, bebas, kita gunakan alamat exit) + alamat string "/bin/sh". Kita cukup mengubah script sebelumnya menjadi seperti berikut ini:

Setelah kita jalankan, flag dapat dilihat dengan cat flag.

Flag yang didapatkan setelah menjalankan exploit

Leave a Reply

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