Ret2syscall
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Dies ist ähnlich wie Ret2lib, jedoch werden wir in diesem Fall keine Funktion aus einer Bibliothek aufrufen. In diesem Fall wird alles vorbereitet, um den syscall sys_execve
mit einigen Argumenten aufzurufen, um /bin/sh
auszuführen. Diese Technik wird normalerweise bei statisch kompilierten Binaries durchgeführt, sodass es viele Gadgets und syscall-Anweisungen geben kann.
Um den Aufruf für den syscall vorzubereiten, ist die folgende Konfiguration erforderlich:
rax: 59 Geben Sie sys_execve an
rdi: ptr zu "/bin/sh" geben Sie die auszuführende Datei an
rsi: 0 geben Sie an, dass keine Argumente übergeben werden
rdx: 0 geben Sie an, dass keine Umgebungsvariablen übergeben werden
Im Grunde genommen muss die Zeichenfolge /bin/sh
irgendwo geschrieben werden, und dann muss der syscall
ausgeführt werden (unter Berücksichtigung des benötigten Paddings zur Kontrolle des Stacks). Dafür benötigen wir ein Gadget, um /bin/sh
in einem bekannten Bereich zu schreiben.
Ein weiterer interessanter syscall, den man aufrufen kann, ist mprotect
, der es einem Angreifer ermöglichen würde, die Berechtigungen einer Seite im Speicher zu ändern. Dies kann mit ret2shellcode kombiniert werden.
Lassen Sie uns damit beginnen, wie man diese Register kontrolliert:
Mit diesen Adressen ist es möglich, den Inhalt im Stack zu schreiben und in die Register zu laden.
Zuerst müssen Sie einen beschreibbaren Ort im Speicher finden.
Dann müssen Sie einen Weg finden, um beliebige Inhalte an dieser Adresse zu schreiben.
Der folgende Befehl erstellt eine vollständige sys_execve
ROP-Kette für eine statische Binärdatei, wenn es Write-What-Where-Gadgets und Syscall-Anweisungen gibt:
Wenn Ihnen Gadgets fehlen, um beispielsweise /bin/sh
im Speicher zu schreiben, können Sie die SROP-Technik verwenden, um alle Registerwerte (einschließlich RIP und Parameterregister) vom Stack zu steuern:
64 Bit, kein PIE, nx, schreibe in einen Speicher einen ROP, um execve
aufzurufen und dorthin zu springen.
64 Bit, nx, kein PIE, schreibe in einen Speicher einen ROP, um execve
aufzurufen und dorthin zu springen. Um in den Stack zu schreiben, wird eine Funktion missbraucht, die mathematische Operationen durchführt.
64 Bit, kein PIE, nx, BF Canary, schreibe in einen Speicher einen ROP, um execve
aufzurufen und dorthin zu springen.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)