Skip to content
shellcodes

Was der Hex-Viewer zeigt, bevor Shellcode kopiert wird

Mit Hex-Ansicht Alignment, Bad Chars und Längenfehler erkennen, bevor Shellcode im Exploit-Skript landet.

Veröffentlicht am 2 Min. Lesezeit

Hex-Review, Byte-Offsets, sichtbare Bad Chars, Längenprüfung, eingebettete Daten und Payload-Diffs sind keine abstrakten Themen. Sie tauchen auf, wenn ein autorisiertes Lab die saubere Demo verlässt und ein echtes Zielbinary trifft, mit echtem Parser, echtem Netzwerkpfad und einem Bericht, den jemand in zwei Monaten noch liest.

Der häufige Fehler ist, den Copy-Button als Qualitätskontrolle zu nutzen und Offsets, Nulls oder verdächtige ASCII-Inseln zu ignorieren. Das ist langweilig, und genau deshalb bleibt es bestehen. Es sieht aus wie eine ungeprüfte Annahme im Builder, ein Wert vom VPN-Interface von gestern oder eine Bytefolge, die durch ein Tool kopiert wurde, das Text umschreibt.

Warum das in einem echten Lab zählt

Shellcode-Arbeit ist Byte-Arbeit. Der Exploit weiß nicht, dass die UI korrekt aussah. Er führt die Bytes aus, die im Speicher angekommen sind. Wenn der Payload durch eine Shell, ein Webformular, einen JSON-Body, Terminal-Scrollback oder ein Ticket geht, gibt es nicht mehr nur ein Problem. Es gibt den Payload plus jeden Parser auf dem Weg.

Ich bevorzuge explizite Prüfungen gegenüber Vertrauen: erwartete Größe, verbotene Bytes, Ziel-OS, Architektur, Payload-Familie, Exportformat und finaler Hash. Wenn etwas fehlschlägt, sollten die Notizen den Suchraum verkleinern, nicht eine neue Diskussion starten.

Ein Workflow, der Werkzeuge überlebt

Start from the smallest thing that proves the primitive. Then add constraints.


xxd -g1 payload.bin | less

Dieser Befehl ist nicht der ganze Workflow. Er ist ein Anker. Daneben gehören ein bekannter Blob, sein SHA-256 und die exakten Builder-Einstellungen. Wenn LHOST, LPORT, Encoder-Reihenfolge, Bad-Char-Liste oder Exportformat geändert werden, ist das Ergebnis ein neues Artefakt.

Fehlerbilder, die getestet werden sollten

Das Fehlerbild, auf das ich achte: ein abgeschnittener Tail, verschobene eingebettete Daten oder ein Payload, der nach kleiner Änderung ein Byte anders ist. Teste es vor der Integration, wenn möglich. Ein Payload, der in einem kleinen Harness fehlschlägt, ist billiger als einer, der in einem überwachten Ziel laut scheitert. Längenchecks nicht überspringen. Größenfehler sind unauffällig: Der Payload sieht weiter wie Shellcode aus, passt aber nicht mehr in die tatsächliche Primitive.

Was Defender sehen sollten

Aus Verteidigersicht ist der Generator selten das wichtigste Signal. Das Verhalten ist es. Achte auf unerwarteten Egress, ungewöhnliche Prozess-Abstammung, ausführbare Speicherübergänge, payloadgroße Buffer und wiederholte Crashes am selben Offset.

Runbook-Notizen

Speichere Konfiguration getrennt von rohen Bytes, wenn Richtlinien das verlangen, aber behalte genug Details für exakte Reproduktion. Ein gutes Runbook enthält Scope-Referenz, Zielkontext, Constraints, Hash und eine kurze Begründung für die Payload-Familie. Keine Magie. Nur weniger Orte, an denen Fehler versteckt bleiben.

Verwandte Artikel

Rohe Shellcode-Bytes zurück in Assembly verwandeln — Hex- und Escape-Formate dekodieren, mit Capstone disassemblieren und Bad Chars finden, bevor du ihn ausführst.