Awk — Procesamiento de Texto y Extracción de Campos
Procesamiento de texto con awk: división en campos, delimitadores, NR/NF, filtrado con expresiones regulares y pipelines de análisis de salidas para red team.
1. Operational Scope & Technical Objective
awk es un procesador de texto por líneas que divide cada línea de entrada en campos (por defecto separados por espacios/tabulations) y permite imprimir, filtrar y transformar columnas de forma no interactiva. En flujos de enumeración es el conector entre la salida cruda de netstat, ps, tcpdump o logs de aplicación y un dato accionable (IP, puerto, campo de un CSV). Su potencia real aparece en pipelines: comando | awk ... | sort | uniq.
2. High-Impact Syntax & Command Cheatsheet
# awk divide cada línea en campos; el delimitador por defecto es el espacio
echo first second third | awk '{print $2}'
# second
# $1, $2, $3... = campos; $0 = línea completa
awk -F ',' '{print $1}' sample.txt
# -F define el delimitador de campo (aquí coma); imprime el primer campo
awk -F ',' '{print $1}' sample.txt | awk '{print $2 "," $1}'
# dos pasadas: extrae el 1er campo del CSV y luego reordena como apellido,nombre
awk -F ',' '/Dakota/ {print NR,$1}' sample.txt
# solo procesa líneas que contengan 'Dakota' (regex /patrón/)
# NR = número de registro (línea) actual; útil para localizar filas
awk -F ':' '{print $1}' /etc/passwd
# clásico: lista solo los usuarios (primer campo de passwd)
awk '{print NF}' sample.txt
# NF = número de campos de la línea; útil para detectar líneas mal formadas
awk '$3 == "ESTABLISHED" {print $5}' <(netstat -antp)
# filtro por valor de campo + impresión de columna; análisis de conexiones activas
3. Real-World Offensive/Defensive Scenarios
Enumeración de hosts y puertos desde salida de herramientas. Combinado con sort/uniq extrae la lista de IPs únicas de una traza o de la salida de un escáner:
tcpdump -n -r capture.pcap | awk -F" " '{print $3}' | sort -u | head
# $3 = par src->dst de cada paquete; se deduplican los pares
Parseo de logs de aplicación. Con -F y filtros por regex se aíslan intentos fallidos o usuarios objetivo:
awk -F ' ' '/Failed password/ {print $(NF-3)}' /var/log/auth.log | sort | uniq -c | sort -nr
# cuenta IPs que fallaron SSH; las IPs con más intentos son el vector de spray
Normalización de salida. awk reordena y limpia columnas antes de pasarlas a otra herramienta (procesar un CSV de credenciales, reordenar pares usuario:hash, etc.), evitando ediciones manuales en medio de un ataque o de un análisis forense.