Gestufte vs. Nicht-gestufte Payloads in Metasploit verstehen und verwenden

Kali LinuxBeginner
Jetzt üben

Einleitung

In der Welt des Penetrationstestings mit dem Metasploit Framework ist eine Payload der Code, der auf dem Zielsystem ausgeführt wird, nachdem eine Schwachstelle erfolgreich ausgenutzt wurde. Das Verständnis der verschiedenen Payload-Typen ist entscheidend für einen erfolgreichen Einsatz. Die beiden Hauptkategorien von Payloads sind "staged" und "stageless".

Eine staged Payload wird in zwei Teilen gesendet: ein kleiner initialer "stager" und eine größere, finale "stage". Die Aufgabe des Stagers ist es, eine Verbindung zur Maschine des Angreifers herzustellen und dann den Rest der Payload herunterzuladen. Eine stageless Payload hingegen ist ein einzelnes, in sich geschlossenes Paket, das den gesamten notwendigen Code zur Ausführung auf dem Ziel enthält.

In diesem Lab erhalten Sie praktische Erfahrungen mit beiden Typen. Sie werden die Metasploit-Konsole verwenden, um jeden Payload-Typ auszuwählen, deren Hauptunterschiede, insbesondere in der Größe, zu beobachten und die Vor- und Nachteile der Verwendung jedes einzelnen zu lernen.

Auswahl eines Exploits und einer gestuften Payload wie windows/meterpreter/reverse_tcp

In diesem Schritt starten Sie die Metasploit Framework-Konsole und wählen einen generischen Exploit-Handler aus. Anschließend konfigurieren Sie ihn für die Verwendung einer gängigen gestuften Payload. Wir verwenden das Modul exploit/multi/handler, da es sich um einen universellen Listener handelt, der sich perfekt zur Demonstration von Payloads eignet, ohne dass ein spezifisches anfälliges Ziel erforderlich ist.

Öffnen Sie zunächst Ihr Terminal und starten Sie die Metasploit-Konsole. Wir verwenden das Flag -q (quiet), um das Startbanner zu überspringen.

msfconsole -q

Sobald Sie die Metasploit-Eingabeaufforderung (msf6 >) sehen, müssen Sie den Exploit-Handler auswählen.

use exploit/multi/handler

Als Nächstes legen wir die Payload fest. Der Name einer gestuften Payload ist typischerweise im Format plattform/stage/stager aufgebaut. Zum Beispiel bedeutet windows/meterpreter/reverse_tcp, dass die Plattform Windows ist, die finale Payload (stage) Meterpreter ist und die initiale Verbindungsmethode (stager) eine Reverse-TCP-Shell ist.

Legen Sie die gestufte Payload mit dem folgenden Befehl fest:

set payload windows/meterpreter/reverse_tcp

Sie sehen eine Bestätigungsnachricht payload => windows/meterpreter/reverse_tcp. Um sicherzugehen, können Sie die aktuelle Konfiguration anzeigen.

show options

Sie sehen die Payload in den Optionen aufgelistet. Wir müssen LHOST oder LPORT nicht festlegen, da wir den Exploit nicht tatsächlich ausführen; wir untersuchen lediglich die Eigenschaften der Payload.

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

Beobachtung der geringen Größe der gestuften Payload

In diesem Schritt verwenden Sie den Befehl info, um die Details der von Ihnen ausgewählten gestuften Payload zu überprüfen. Das wichtigste Detail, das Sie beachten sollten, ist ihre Größe.

Geben Sie im Metasploit-Konsolenfenster, während die Payload windows/meterpreter/reverse_tcp ausgewählt ist, den Befehl info ein:

info

Metasploit zeigt detaillierte Informationen über die Payload an, einschließlich ihres Namens, ihrer Plattform, ihrer Architektur und ihrer Größe. Scrollen Sie durch die Ausgabe und suchen Sie die Zeile "Payload size".

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Stager
     Module: payload/windows/meterpreter/reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 354
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (staged).
  Listen for a connection from the stager and send the second stage.

Beachten Sie, dass die Total size (Gesamtgröße) sehr klein ist (z. B. 354 Bytes). Dies ist das Hauptmerkmal einer gestuften Payload. Dieses kleine Codefragment, der Stager, ist nur dazu gedacht, eine Verbindung zu Ihrem Rechner herzustellen und die wesentlich größere Meterpreter-Stage herunterzuladen. Diese geringe Größe macht ihn ideal für die Einhaltung enger Speicherbeschränkungen bestimmter Exploits.

Auswahl desselben Exploits und einer stageless Payload wie windows/meterpreter_reverse_tcp

Lassen Sie uns nun zu einer stageless Payload wechseln, um den Unterschied zu sehen. Der Name einer stageless Payload ist typischerweise im Format plattform/payload_typ aufgebaut, wobei ein Unterstrich _ anstelle eines zweiten Schrägstrichs / verwendet wird. Diese Namenskonvention hilft Ihnen, sie schnell zu identifizieren.

Verwenden Sie in derselben msfconsole-Sitzung erneut den Befehl set payload, diesmal jedoch für die stageless-Version: windows/meterpreter_reverse_tcp.

set payload windows/meterpreter_reverse_tcp

Sie sehen die Bestätigung payload => windows/meterpreter_reverse_tcp. Beachten Sie den Unterstrich im Namen. Diese einzelne Payload enthält den vollständigen Meterpreter-Server und die Verbindungslogik in einem einzigen Paket.

Überprüfen wir die Optionen erneut, um die Änderung zu bestätigen.

show options

Die Ausgabe spiegelt nun die neu ausgewählte stageless Payload wider.

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter_reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

...

Sie sind nun erfolgreich von einer staged zu einer stageless Payload gewechselt.

Beobachtung der größeren Größe der stageless Payload

In diesem Schritt werden Sie die gerade ausgewählte stageless Payload untersuchen und ihre Größe mit der gestuften Payload aus Schritt 2 vergleichen.

Verwenden Sie wie zuvor den Befehl info, um Details zur aktuellen Payload zu erhalten.

info

Untersuchen Sie die Ausgabe und suchen Sie die Zeile "Payload size".

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Inline
     Module: payload/windows/meterpreter_reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 999335
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (inline).
  This payload is a single executable and does not need to download a
  second stage.

Wie Sie sehen können, ist die Total size (Gesamtgröße) dramatisch größer (z. B. 999335 Bytes oder fast 1 MB) im Vergleich zur Größe der gestuften Payload von einigen hundert Bytes. Dies liegt daran, dass die stageless Payload die gesamte Meterpreter-Funktionalität enthält. Sie muss nach der Ausführung nichts weiter herunterladen.

Nachdem Sie nun den Hauptunterschied gesehen haben, können Sie die Metasploit-Konsole verlassen.

exit

Diskussion der Vor- und Nachteile jedes Payload-Typs

In diesem letzten Schritt fassen wir die Vorteile und Nachteile von gestuften (staged) und nicht-gestuften (stageless) Payloads zusammen. Das Verständnis dieser Kompromisse ist entscheidend für die Auswahl des richtigen Werkzeugs für ein bestimmtes Szenario. In diesem Schritt müssen keine Befehle ausgeführt werden; es dient dem konzeptionellen Verständnis.

Gestufte Payloads (z. B. windows/meterpreter/reverse_tcp)

Vorteile:

  • Kleine Größe: Der anfängliche Stager ist sehr klein. Dies ist ein erheblicher Vorteil, wenn der Exploit eine sehr begrenzte Puffergröße oder einen sehr begrenzten Speicherplatz für die Payload hat.
  • Tarnung (Anfangsphase): Der kleine Stager wird im Vergleich zu einer großen, funktionsreichen Payload möglicherweise seltener von einfachen signaturbasierten Antiviren-Lösungen erkannt.

Nachteile:

  • Mehrere Verbindungen: Sie erfordern eine zweite Verbindung, um die Hauptstufe herunterzuladen. Dies erzeugt mehr Netzwerkverkehr und bietet Firewalls, Intrusion Detection Systems (IDS) oder Netzwerkadministratoren eine weitere Möglichkeit, den Angriff zu erkennen und zu blockieren.
  • Weniger stabil: Die Verbindung kann instabil sein. Wenn die Verbindung abbricht, während die zweite Stufe heruntergeladen wird, schlägt der Exploit fehl.
  • Callback-Probleme: Die Zielmaschine muss in der Lage sein, die Angreifer-Maschine über das Netzwerk zu erreichen, um die Stufe herunterzuladen, was in stark eingeschränkten Netzwerken ein Problem darstellen kann.

Nicht-gestufte Payloads (z. B. windows/meterpreter_reverse_tcp)

Vorteile:

  • Zuverlässigkeit & Stabilität: Da alles in einem Paket enthalten ist, ist die Payload in sich geschlossener und stabiler. Sie muss nur eine Verbindung herstellen, und sobald sie läuft, ist sie nicht mehr davon abhängig, weitere Komponenten herunterzuladen.
  • Funktioniert in eingeschränkten Umgebungen: Sobald die Payload an das Ziel geliefert wurde, kann sie ausgeführt werden, ohne etwas anderes herunterladen zu müssen. Dies ist nützlich, wenn das Ziel nur begrenzten oder keinen ausgehenden Internetzugang hat.

Nachteile:

  • Große Größe: Ihre große Größe ist ihr größter Nachteil. Sie passen möglicherweise nicht in den von vielen Exploits erlaubten Speicherbereich, was sie in diesen Fällen unbrauchbar macht.
  • Leichter zu erkennen: Eine große, einzelne ausführbare Datei ist für Antiviren- und Sicherheitslösungen oft leichter zu analysieren und aufgrund ihrer Größe und Signaturen als bösartig zu kennzeichnen.

Zusammenfassend lässt sich sagen, dass Sie eine gestufte Payload wählen sollten, wenn Sie mit Exploits arbeiten, die Größenbeschränkungen aufweisen. Wählen Sie eine nicht-gestufte Payload, wenn Zuverlässigkeit oberste Priorität hat und die Exploit-Methode eine größere Payload-Größe verarbeiten kann.

Zusammenfassung

In diesem Lab haben Sie den grundlegenden Unterschied zwischen gestuften (staged) und nicht-gestuften (stageless) Payloads im Metasploit Framework untersucht.

Sie haben damit begonnen, msfconsole zu starten und eine gestufte Payload, windows/meterpreter/reverse_tcp, auszuwählen. Sie haben ihre sehr geringe Größe beobachtet, die als leichtgewichtiger Stager konzipiert ist. Anschließend haben Sie zu ihrem nicht-gestuften Gegenstück, windows/meterpreter_reverse_tcp, gewechselt und dessen deutlich größere Größe festgestellt, da es die gesamte Payload in einem einzigen Paket enthält.

Abschließend haben Sie die Vor- und Nachteile jedes Typs überprüft und gelernt, dass die Wahl zwischen ihnen einen Kompromiss zwischen Größe, Tarnung und Zuverlässigkeit darstellt. Gestufte Payloads sind klein, erfordern aber eine zweite Verbindung, während nicht-gestufte Payloads groß, aber stabiler und in sich geschlossen sind. Dieses Wissen ist entscheidend für fundierte Entscheidungen während Penetration-Testing-Engagements.