Bash scripting
Bash es el pegamento del pentester en Linux: automatiza tareas repetitivas (lanzar la misma herramienta contra 100 hosts), encadena resultados de una herramienta a otra, y procesa output masivo hasta dejar solo el dato útil. No necesitas ser programador; necesitas saber convertir “haz esto para cada línea de este fichero” en un script de tres líneas.
Lo básico de un script
Sección titulada «Lo básico de un script»#!/bin/bash # shebang: con qué intérprete se ejecutanombre="theoffsecgirl" # variable (sin espacios alrededor del =)echo "Hola $nombre" # expansión de variable$(comando) # sustitución de comando -> captura la salidachmod +x script.sh && ./script.sh # darle permiso y ejecutarloVariables, argumentos y condicionales
Sección titulada «Variables, argumentos y condicionales»$1 $2 ... # argumentos posicionales$# # número de argumentos$0 # nombre del script$? # código de salida del último comando (0 = éxito)
if [ "$1" = "go" ]; then echo "vamos"; else echo "no"; fi[ -f fichero ] # ¿existe el fichero? [ -z "$x" ] ¿vacío?Bucles (el corazón de la automatización)
Sección titulada «Bucles (el corazón de la automatización)»# iterar sobre las líneas de un fichero (hosts, usuarios, URLs)while read host; do echo "[*] escaneando $host" nmap -p80,443 "$host"done < hosts.txt
# iterar sobre un rango o listafor ip in 192.168.1.{1..254}; do ping -c1 -W1 "$ip" &>/dev/null && echo "$ip up"; doneProcesar texto (pipes + utilidades)
Sección titulada «Procesar texto (pipes + utilidades)»El 80% del valor está aquí: convertir output en información.
cat urls.txt | grep admin # filtrar líneascut -d: -f1 /etc/passwd # columna 1 por delimitador ':'awk '{print $1}' access.log # campo 1 (por espacios)sort | uniq -c | sort -rn # contar y ordenar por frecuenciatr ',' '\n' # reemplazar caracteressed 's/http/https/g' file # buscar y reemplazarEjemplo real — IPs más frecuentes en un log:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | headOne-liners útiles de pentest
Sección titulada «One-liners útiles de pentest»# extraer todas las URLs de un ficherogrep -oE 'https?://[^ "]+' file.txt | sort -u# barrido de puertos simple sin nmapfor p in 22 80 443 445; do (echo >/dev/tcp/10.0.0.1/$p) &>/dev/null && echo "$p open"; donePor qué importa en seguridad
Sección titulada «Por qué importa en seguridad»Casi ninguna herramienta hace exactamente lo que necesitas; Bash rellena los huecos: parsear la salida de una tool y alimentar otra, automatizar un ataque sobre una lista, limpiar wordlists, o montar un escaneo casero. En el curso de Python Ofensivo verás que muchas tareas empiezan en Bash antes de justificar un script en Python.
Checklist de dominio
Sección titulada «Checklist de dominio»- Escribo un script con shebang, variables y lo hago ejecutable
- Uso argumentos ($1, $#) y condicionales ([ … ])
- Itero sobre un fichero con while read y sobre un rango con for
- Filtro y transformo texto con grep/cut/awk/sed/sort/uniq
- Compongo one-liners con pipes para extraer datos de output
- Capturo salida con $(…) y compruebo $?
- Automatizo una herramienta sobre una lista de objetivos