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.