Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| it-security:blog:shellcode_injection-4 [2024/09/01 20:27] – angelegt psycore | it-security:blog:shellcode_injection-4 [2024/09/01 21: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> | ||