Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
it-security:blog:shellcode_injection-4 [2024/09/01 22:27] – angelegt psycore | it-security:blog:shellcode_injection-4 [2024/09/01 23:03] (aktuell) – psycore | ||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
Folgende Anforderungen sollten hierbei erfüllt sein: | Folgende Anforderungen sollten hierbei erfüllt sein: | ||
- | * Start von '' | + | * Start von '' |
* 64-Bit Code | * 64-Bit Code | ||
* Vermeiden von Null-Bytes | * Vermeiden von Null-Bytes | ||
Zeile 16: | Zeile 16: | ||
==== Shellcode? Nichts leichter als das! ==== | ==== Shellcode? Nichts leichter als das! ==== | ||
- | Das dachte ich zumindest. Tatsächlich hat es einiges an Zeit gekostet die Funktionsweise zu verstehen. Dies lag zum Teil auch an fehlenden '' | + | Das dachte ich zumindest. Tatsächlich hat es einiges an Zeit gekostet die Funktionsweise zu verstehen. Dies lag zum Teil auch an fehlenden '' |
- | Zum Glück gibt es eine hilfreiche Webseite, welche ich gerne als Referenz genutzt habe.((https: | + | Zum Glück gibt es eine hilfreiche Webseite, welche ich gerne als Referenz genutzt habe.((https:// |
)) | )) | ||
==== Hilfreiche Tools ==== | ==== Hilfreiche Tools ==== | ||
- | * Microsoft Visual Studio((https: | + | * Microsoft Visual Studio((https:// |
- | * x64dbg((https: | + | * x64dbg((https:// |
- | * PEView((http: | + | * PEView((http:// |
- | * ShenCode((https: | + | * ShenCode((https:// |
==== Hilfreiche Webseiten ==== | ==== Hilfreiche Webseiten ==== | ||
Zeile 38: | Zeile 38: | ||
Den kompletten Code findet ihr auch auf [[https:// | Den kompletten Code findet ihr auch auf [[https:// | ||
- | Welche Schritte sind nun nötig, um '' | + | Welche Schritte sind nun nötig, um '' |
- | - '' | + | - '' |
- | - '' | + | - '' |
- | - Funktion '' | + | - Funktion '' |
==== Variablen und Stack ==== | ==== Variablen und Stack ==== | ||
Zeile 60: | Zeile 60: | ||
</ | </ | ||
- | Für den späteren Suchdurchlauf müssen wir den String '' | + | Für den späteren Suchdurchlauf müssen wir den String '' |
<code gdb> | <code gdb> | ||
Zeile 71: | Zeile 71: | ||
==== kernel32.dll Basis Adresse ==== | ==== kernel32.dll Basis Adresse ==== | ||
- | Mit jedem Start eines Prozesses in Windows, werden Module in diesen Prozess geladen. Eines dieser Module ist unsere '' | + | Mit jedem Start eines Prozesses in Windows, werden Module in diesen Prozess geladen. Eines dieser Module ist unsere '' |
Ähnlich wie in einem Buch, rufen wir ein Inhaltsverzeichnis (Pointer) auf, welches auf die richtige Seitenzahl (relevanter Speicherbereich) zeigt. | Ähnlich wie in einem Buch, rufen wir ein Inhaltsverzeichnis (Pointer) auf, welches auf die richtige Seitenzahl (relevanter Speicherbereich) zeigt. | ||
- | Die erste dieser Strukturen ist der '' | + | Die erste dieser Strukturen ist der '' |
- | Den Zeiger zur '' | + | Den Zeiger zur '' |
<code gdb> | <code gdb> | ||
Zeile 83: | Zeile 83: | ||
</ | </ | ||
- | Jetzt befinden wir uns im '' | + | Jetzt befinden wir uns im '' |
< | < | ||
Zeile 106: | Zeile 106: | ||
==== WinAPI ==== | ==== WinAPI ==== | ||
- | Mit der '' | + | Mit der '' |
< | < | ||
Zeile 117: | Zeile 117: | ||
</ | </ | ||
- | Setzen wir dies nun in '' | + | Setzen wir dies nun in '' |
<code gdb> | <code gdb> | ||
Zeile 138: | Zeile 138: | ||
</ | </ | ||
- | > [!NOTE] Tipp Öffnet die Datei '' | + | <callout type=" |
+ | Öffnet die Datei '' | ||
+ | </ | ||
==== WinExec ==== | ==== WinExec ==== | ||
Zeile 144: | Zeile 146: | ||
=== Iteration === | === Iteration === | ||
- | Nun folgt eine Iteration, welche die Export-Funktionen solange abfragt, bis '' | + | Nun folgt eine Iteration, welche die Export-Funktionen solange abfragt, bis '' |
<code gdb> | <code gdb> | ||
Zeile 166: | Zeile 168: | ||
=== Funktion gefunden === | === Funktion gefunden === | ||
- | Wurde die Funktion gefunden, springt der Code zur '' | + | Wurde die Funktion gefunden, springt der Code zur '' |
<code gdb> | <code gdb> | ||
Zeile 180: | Zeile 182: | ||
=== WinExec ausführen === | === WinExec ausführen === | ||
- | Nun übergeben wir alle wichtigen Parameter an '' | + | Nun übergeben wir alle wichtigen Parameter an '' |
- | )) | + | |
<code gdb> | <code gdb> | ||
Zeile 192: | Zeile 193: | ||
Wir benötigen einen String für die Kommandozeile und einen Integer für die Anzeige des Fensters. | Wir benötigen einen String für die Kommandozeile und einen Integer für die Anzeige des Fensters. | ||
- | Es gibt jedoch noch mehr Dinge zu beachten, wenn wir die WinAPI aufrufen.< | + | Es gibt jedoch noch mehr Dinge zu beachten, wenn wir die WinAPI aufrufen.((https:// |
- | * Argument Register (von links nach rechts): '' | + | * Argument Register (von links nach rechts): '' |
- | * Der Stack muss auf 16 Bytes ausgerichtet werden: '' | + | * Der Stack muss auf 16 Bytes ausgerichtet werden: '' |
- | * Shadow Space, ein leeres 32 Bytes Segment auf dem Stack, welches für interne WinAPI Zwecke benötigt wird: '' | + | * Shadow Space, ein leeres 32 Bytes Segment auf dem Stack, welches für interne WinAPI Zwecke benötigt wird: '' |
- | Unseren string '' | + | Unseren string '' |
- | Dann erfüllen wir noch die WinAPI Aufrufkonventionen, | + | Dann erfüllen wir noch die WinAPI Aufrufkonventionen, |
<code gdb> | <code gdb> | ||
Zeile 238: | Zeile 239: | ||
==== WinExec Push ==== | ==== WinExec Push ==== | ||
- | Wir pushen '' | + | Wir pushen '' |
<code gdb> | <code gdb> | ||
Zeile 250: | Zeile 251: | ||
==== GS Register + 0x60 ==== | ==== GS Register + 0x60 ==== | ||
- | Die Anweisung '' | + | Die Anweisung '' |
<code gdb> | <code gdb> | ||
Zeile 280: | Zeile 281: | ||
</ | </ | ||
- | Der Befehl liefert uns die Datei in C-Format Syntax. Wir wissen, unser Shellcode beginnt mit den Opcodes '' | + | Der Befehl liefert uns die Datei in C-Format Syntax. Wir wissen, unser Shellcode beginnt mit den Opcodes '' |
<code shell> | <code shell> |