brainpan

Brainpan 1 – Belajar Membuat Exploit (Seri 2)

Pada tulisan sebelumnya, Aitech sudah berhasil mendapatkan user account, saat ini Aitech berada dalam ‘puck’ user directory dengan privilege sebagai berikut:

Hal yang paling pertama Aitech lakukan adalah mengecek privileges dari ‘puck’ ini :

setelah bermain beberapa kali dengan anansi_util ini, Aitech belum menemukan petunjuk apapun yang mengarah ke suatu petunjuk πŸ™ Aitech menemukan beberapa user yang aktif di server dengan menggunakan perintah ‘cat /etc/passwd’, mari kita lihat mungkin ada petunjuk lainnya yang diberikan oleh owner Brainpan ini :

pada baris ke-7 terlihat satu binary yang tidak biasanya, ‘/usr/local/bin/validate’ ini sepertinya mengarah ke petunjuk selanjutnya, Aitech melakukan penelusuran lebih lanjut terkait berkas tersebut:

Sepertinya file ini secara sengaja dibuat dengan permission yang salah, sehingga program ini siapapun yang menjalankannya akan memiliki hak yang sama dengan owner dari ‘validate’ ini, walaupun tidak akan menjadi root, hal ini semakin menarik! selanjutnya Aitech mencoba menjalankan berkas ‘validate’ ini :

Setelah melakukan beberapa percobaan, beberapa program penting seperti gcc, strings, dll tidak terinstall di Server ini, Aitech harus memikirkan cara lain supaya bisa melakukan attacking terhadap berkas ini, cara pertama yang Aitech lakukan adalah mengkopi berkas ‘validate’ ini ke Box Kali Linux dan menjalankan perintah file dan strings untuk melihat berkas ini :

Yes! sepertinya file ini juga sama dengan file pada bagian 1 yang vulnerable terhadap fungsi strcpy() – perhatikan garis oranye.

Dan seperti pada Seri 1 dimana Aitech sudah berhasil melakukan ekploitasi brainpan.exe dan sukses men-overwrite EIP dengan 524 bytes menggunakan Immunity Debugger, di Linux Aitech akan menggunakan Aplikasi gdb debugger untuk melakukan hal yang sama seperti seri 1:

Aitech mencoba melakukan disassemble terhadap main function:

Seperti yang terlihat pada baris 24, Aitech menemukan fungsi validate pada address 0x80484b4, mari sekarang kita disassemble fungsi validate ini juga:

Terlihat pada baris 36 fungsi strcpy dijalankan, sekarang Aitech akan mencoba membuat buffer overflow terhadap fungsi tersebut. Aitech memasukkan 300 bytes huruf ‘A’ pada fungsi validate ini :

gdb_A_300

Dari gambar diatas Aitech menyimpulkan bahwa aplikasi ini telah crash dan EIP menunjukkan pada alamat : 0x41414141, dimana 41 ini merupakan desimal dari Huruf ‘A’, dengan ini Aitech berasumsi telah bisa mengontrol EIP ! mari sekarang kita lihat info registers :

Terlihat EIP, EBX dan EBP berikut huruf yang Aitech kirimkan pada saat diminta user input dari fungsi validate. sekarang mari lihat stack pointer :

Penjelasan: x pertama artinya : examine dan s adalah untuk menampilkan string, jika Anda ingin menampilkan hex dari pada string, gunakan x dan bukan s, misalkan: x/x $esp – ataupun pada EAX dll.

hmm.. sekarang Aitech ingin menemukan posisi berapa kita bisa melakukan overwrite pada EIP. untuk melakukan hal ini, Aitech menggunakan tool dari metasploit yaitu : pattern_create.rb

Selanjutnya, Aitech memanggil file pattern_300.txt ini dari dalam gdb seperti berikut:

Terlihat pada EIP berakhir pada huruf ‘Ad8A’ atau 0x41386441, sekarang Aitech akan menggunakan tool pattern_offset.rb untuk menemukan nilai desimal dari EIP tersebut:

hmm.. offset berada pada 114, baiklah…
Untuk memastikan nilai tersebut, Aitech mencoba menjalankan gdb – kali ini dengan memasukkan nilai ‘A’ sebanyak 114 di ikuti ‘B’ dan ‘C’ :

gdb_test_EIP

Dari gambar diatas, terlihat EIP sudah di overwrite oleh 0x42424141, sepertinya offset ini tidak tepat karena seharusnya EIP harus di overwrite oleh 0x42424242, untuk itu Aitech perlu menaikkan jumlah offset menjadi 116 agar seluruh huruf ‘B’ bisa masuk ke dalam EIP.

Mari kita coba lagi dengan 116 bytes :

gdb_EIP_42

Nah, EIP sekarang baru benar πŸ™‚ – EIP sudah di overwrite dengan 4 B atau 0x42424242 sesuai dengan yang Aitech rencanakan. sekarang mari kita lihat isi dari EAX, ESP :

ESP menunjukkan nilai C, sepertinya kita tidak bisa menggunakan stack ESP ini dalam shellcode nantinya, mari kita lihat lebih jelas isi dari EAX :

gdb_EAX

Kira-kira kalau Aitech ingin melakukan ekploitasi terhadap file ini, Aitech akan menuliskan shellcode pada permulaan dari buffer dan kemudian menggunakan CALL EAX supaya menjalankan shell tersebut. Terlihat pada gambar, jumlah stack yang bisa dimasukkan shellcode ( pada baris 0x41414141 ) ada sekitar 116 bytes, sangat banyak dan cukup untuk sebuah shellcode.

Sekarang Aitech sudah menemukan pattern untuk melakukan buffer overflow terhadap berkas ini, strukturnya sebagai berikut :

structure_part2

Seperti yang sudah kita lakukan sebelumnya bahwa EAX bisa kita gunakan untuk menjalankan shellcode, sekarang Aitech mencoba mencari perintah menuju EAX:

Mangstab ! πŸ™‚ Aitech menemukan 2 bagian call *%eax, kita bisa menggunakan kedua call tersebut. Aitech memilih menggunakan 0x080484af pada artikel ini sebagai contoh. Untuk shellcode, aitech menggunakan shellcode dari shell-storm seperti berikut :

Terlihat dari kode tersebut, bahwa shellcode yang akan digunakan sekitar 33 bytes dan akan melakukan eksekusi “/bin/bash”. karena stack yang kita gunakan ada sebanyak 116 bytes, berarti sisanya harus Aitech isi dengan NOP. kira-kira strukturnya seperti berikut :

[33 Bytes Shellcode] + [83 NOPs] + [EAX]

Sehingga kalau kita jalankan pada server Brainpan dengan account ‘puck’ hasilnya sebagai berikut :

Mendapatkan Access ROOT!?

Cara Pertama

Cara pertama adalah dengan menggunakan “sudo anansi_util” dari user anansi :

bp_flag

Cara Kedua

Cara kedua ini memang tidak disangka, ternyata “sudo /home/anansi/bin/anansi_util manual” ini juga bisa menjalankan perintah untuk mengakses root level :

Terima kasih sudah membaca bagian kedua dari belajar buffer overflow ini dan tidak lupa juga Terima Kasih kepada g0tm1lk dan juga vulnhub yang sudah menghosting VMs yang sangat bermanfaat ini.

Leave A Comment

Your email address will not be published. Required fields are marked (required):

Back to Top