Saltearse al contenido

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.

#!/bin/bash # shebang: con qué intérprete se ejecuta
nombre="theoffsecgirl" # variable (sin espacios alrededor del =)
echo "Hola $nombre" # expansión de variable
$(comando) # sustitución de comando -> captura la salida
chmod +x script.sh && ./script.sh # darle permiso y ejecutarlo
$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?
# 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 lista
for ip in 192.168.1.{1..254}; do ping -c1 -W1 "$ip" &>/dev/null && echo "$ip up"; done

El 80% del valor está aquí: convertir output en información.

cat urls.txt | grep admin # filtrar líneas
cut -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 frecuencia
tr ',' '\n' # reemplazar caracteres
sed 's/http/https/g' file # buscar y reemplazar

Ejemplo real — IPs más frecuentes en un log:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# extraer todas las URLs de un fichero
grep -oE 'https?://[^ "]+' file.txt | sort -u
# barrido de puertos simple sin nmap
for p in 22 80 443 445; do (echo >/dev/tcp/10.0.0.1/$p) &>/dev/null && echo "$p open"; done

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.

  • 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