Thursday, June 20, 2013

Exploit Winamp 5.572 Buffer Overflow [step by step]



Winamp adalah salah satu pemutar musik yang cukup terkenal. Disamping cara penggunaanya yang cukup mudah, winamp juga memiliki banyak menu, seperti pemutar radio online,online service dan lain-lain. Kali ini saya akan mencoba menulis langkah demi langkah pembuatan exploit winamp.

Winamp yang akan dipakai adalah winamp versi 5.572, dan OS yang digunakan adalah windows sp 3, dan Immunity debuger. winamp versi ini terkena buffer overflow pada menu about historynya.

Kali ini fuzzer yang digunakan dengan panjang karakter “A” sebanyak 700 karakter. Ini fuzzer sederhana yang akan kita pakai.

# !/usr/bin/python
header="Winamp 5.572 "
junk= "\x41" * 700
file = open("whatsnew.txt","w")
file.write(header+junk)
file.close()

fuzzer tersebut akan membuat file dengan nama whatsnew dengan extensi txt, sedangkan isi dari file txt tersebut adalah karakter “A” sebanyak 700 karakter. File hasil dari script di atas harus dipindah ke dalam folder “c:\Program Files\Winamp”.

setelah itu jalankan winamp yang sudah di attach pada debuger. Kemudian buka menu “help” yang terdapat pada tab menu bagian atas, lalu pilih “About Winamp” dan pilih tab “Version History”. Maka pada jendela registers akan muncul sejumlah karakter “A” yang mengisi register “ESP” dan “EBP”, dan register EIP yang terisi karakter “41414141” yang bila di ubah kedalam ASCII adalah karakter “A”.


Apabila register EIP pada sebuah aplikasi berhasil tertumpuk oleh data, maka hal seperti ini akan sangat berbahaya bagi sistem operasi yang ada, karena EIP digunakan oleh sistem operasi untuk mengeksekusi perintah apa yang selanjutnya akan dijalankan. Didalam EIP akan tersimpan alamat memori yang akan di eksekusi, maka proses selanjutnya adalah mencari tahu pada byte ke berapa EIP tertumpuk oleh data yang dikirimkan oleh fuzzer tadi.

Tahap selanjutnya adalah mencari tahu pada byte keberapa EIP tertumpuk. Jika sudah diketahui pada byte keberapa, maka byte tersebut akan diisi nilai sebesar 32bit yang akan berisi alamat dari PAYLOAD (program jahat). Untuk mencari tahu byte keberapa EIP tertumpuk, maka diperlukan bantuan tools, yaitu “pattern_create” dan “pattern_offset”

“Pattern_create” berfungsi membuat sebuah data sampah yang telah terstruktur. “pattern_create” dapat kita temukan pada folder “/opt/metasploit/apps/pro/msf3/tools” pada backtrack. Gambar diberikut adalah hasil dari penggunaan pattern_create dengan pola terstruktur sebanyak 700byte.


Terlihat kumpulan string yang mempunyai pola sebanyak 700 karakter yang dimulai dari “Aa0A” hingga karakter “x1Ax2A”. Setelah string yang mempunyai pola tersebut berhasil dibuat, maka untuk tahap berikutnya adalah memasukan string tersebut kedalam fuzzer yang tadi kita buat untuk menggantikan data karakter “A” pada fuzzer.
Setelah mengganti nilai yang ada pada variable junk menjadi kumpulan karakter yang mempunyai pola, kemudian mencoba sekali lagi fuzzer pada aplikasi winamp,ulangi seperti percobaan pertama. Bisa dilihat bahwa nilai yang ada pada register berbeda dengan sebelumnya. Saat ini nilai register yang ada pada memori aplikasi berisi dengan string yang mempunyai pola terstruktur.
Perhatikan register pada EIP dan ESP, keduanya merupakan register yang sangat vital jika dapat dikontrol. EIP merupakan alamat dimana data stack disimpan didalam memori,hal ini sangat vital jika dapat dikontrol, karena ketika seorang penyerang mengetahui dimana letak alamat stack,memungkinkan untuk penyerang menyisipi dengan program jahat kedalam stack. Sedangkan register EIP adalah tempat penyimpanan alamat yang akan dieksekusi.

Setelah itu tahap selanjutnya adalah mencari pada byte keberapa string berpola tersebut menimpa register. Untuk itu, bisa digunakan pattern_offset. Cara menjalankan aplikasi ini cukup memasukan nilai yang terdapat pada register ESP dan EIP. Pattern_offset akan menghitung berapa byte data.
Perhatikan bahwa untuk mencapai register EIP dibutuhkan data sebesar 540 byte dan untuk mencapai stack dibutuhkan 560 byte. Ini berarti register EIP akan ter overwrite 4 byte,yaitu pada byte ke 541, 542, 543, 544. Untuk membuktikannya, maka fuzzer yang dibuat akan dimodifikasi lagi seperti ini
Dengan fuzzer tersebut dan dengan hasil perhitungan dari pattern_offset, maka nilai pada register EIP akan menjadi DEADBEEF, karena sistem menggunakan penulisan dengan format little-endian, maka harus ditulis “\xEF\xBE\xAD\xDA”
Ternyata setelah winamp meng-eksekusi file whatsnew.txt, tampilan yang muncul para register EIP adalah “DEADBEEF, Selanjutnya adalah mencoba melakukan penulisan pada ESP. Seperti yang dijelaskan tadi, ESP adalah tempat untuk menyimpan data sementara didalam stack (memory).
Pada script tersebut, \x90 adalah NOPSLED (NOP) atau No Operation ( data sampah yang tidak akan di-eksekusi oleh sistem). Memory yang terisi 540 byte data sampah, kemudian 4 byte selanjutnya adalah DEADBEEF yang akan menimpa register EIP. Setelah itu fuzzer akan mengirimkan data NOP lagi dari 560byte dikurangi (4 byte dari deadbeef + 540 byte dari x90). Maka nilai ini akan menimpa nilai yang ada di register ESP.

Nilai dari ESP akan dilewati oleh sistem, karena nilai dari ESP adalah data sampah yang tidak akan di-eksekusi. Setelah itu fuzzer akan mengirimkan data sisa dari 700 dikurangi 560.

Terlihat bahwa fuzzer mengirimkan 4 byte data yang berisikan DEADBEEF, kemudian diteruskan 4 byte data NOP, dan sisa selanjutnya adalah stack yang berisi data sampah berupa karakter xCC. Kemudian untuk tahap selanjutnya, adalah mencari alamat untuk digunakan sebagai “batu loncat”, hal ini dibutuhkan karena register EIP tidak bisa mengeksekusi langsung alamat stack.

Batu loncatan tersebut adalah perintah adalam asembly yaitu JMP ESP. JMP adalah perintah dimana perintah tersebut akan memindahkan perintah dari satu register ke register yang lain. Untuk mencari perintah tersebut adalah melalui module yang digunakan oleh aplikasi winamp.

Tahap-tahap untuk mencarinya adalah pilih menu view → executable modules (Alt+E) pada menu tab. Setelah itu akan muncul window baru yang berisikan library yang dipakai oleh aplikasi. Dalam kasus ini, library yang digunakan adalah library user32.dll. Cara mencarinya adalah double klik library user32.dll.

Maka akan muncul window dari library tersebut. Kemudian klik kanan pada window tersebut, pilih search for → Command, akan ada window baru, maka isikan JMP ESP.
Alamat dari JMP ESP adalah 7E429353. Pada saat memilih JMP ESP sebaiknya alamat yang akan digunakan tidak boleh yang mengandung nilai \x00, \x0a dan \x0d . Nilai tersebut tidak boleh digunakan karena akan merusak PAYLOAD yang akan dikirim. Payload adalah muatan yang dibawa oleh data yang berisi shellcode, sedangkan shellcode merupakan sebuah kode aplikasi yang biasanya digunakan untuk mengexploitasi sebuah sistem yang mempunyai bugs.

Setelah itu tools yang digunakan adalah msfweb dari metasploit. Pada Backtrack 5 r3, Letaknya ada pada folder /pentest/exploits/framwork2..

Tools ini merupakan web interface,sehingga diperlukan browser untuk membukanya. Kemudian pilih menu PAYLOAD dan isi filter dengan win32.

Kemudian pilih Bind shell, maka akan muncul tampilan baru, kemudian isikan seperti gambar dibawah ini


Setelah itu klik generate payload, maka keluar payload yang akan digunakan. Payload tersebut akan membuka port untuk melakukan koneksi keluar sistem.

Kemudian Payload tersebut dimasukan kedalam fuzzer menjadi seperti gambar ini :

setelah itu jalankan aplikasi winamp tanpa debugger, dan buka menu about. Maka aplikasi tersebut akan crash atau not responding. Selanjutnya jalankan perintah nc 192.168.56.100 4444. Maka perhatikan gambar dibawah ini,

Payload sudah tereksekusi dengan sukses, dan secara keseluruhan sistem windows tersebut telah dikuasai.

No comments:

Post a Comment