Introducción
Al realizar el seguimiento de un paquete físico, leer la etiqueta de envío suele ser suficiente para saber a dónde va. Pero a veces, es necesario saber qué hay realmente dentro de la caja.
En el análisis de redes, observar las direcciones IP y los puertos es como leer la etiqueta de envío (la cabecera del paquete). Sin embargo, la información realmente valiosa —como el texto de una página web, un archivo descargado o incluso una contraseña sin cifrar— se encuentra oculta dentro de la carga útil (payload) del paquete.
Esta distinción entre cabecera y carga útil es fundamental en la ciberseguridad. Las cabeceras responden a preguntas de enrutamiento, como de dónde proviene el tráfico, a dónde va y qué protocolo se está utilizando. Las cargas útiles responden a preguntas sobre el contenido, como qué se solicitó, qué se devolvió y si se expusieron datos confidenciales. Los analistas experimentados aprenden a moverse entre estas dos perspectivas dependiendo de la pregunta que intenten responder.
En este laboratorio, aprenderá a utilizar tcpdump para abrir la caja e inspeccionar el contenido real de los paquetes de red. Explorará cómo asegurarse de capturar el paquete completo en lugar de solo la etiqueta, y cómo mostrar los datos sin procesar en formatos que tanto humanos como computadoras puedan leer fácilmente. Finalmente, practicará el uso de herramientas de texto de Linux para extraer secretos en texto plano directamente del tráfico de red en movimiento.
Aumentar el Snaplen (Capturar paquetes completos)
Para mirar dentro del paquete, primero debe asegurarse de que tcpdump capture realmente todo el contenido. Por defecto, las versiones antiguas de tcpdump y algunas herramientas de red intentan ahorrar espacio en el disco duro recortando el final de cada paquete, capturando solo las cabeceras.
Ese compromiso explica por qué la captura de paquetes es siempre un equilibrio entre integridad y costo. Capturar paquetes más cortos utiliza menos almacenamiento y puede ser más rápido, lo cual es importante en redes muy ocupadas. Capturar paquetes completos preserva más evidencia, lo cual es crucial durante la resolución de problemas y la informática forense. No existe una configuración universal que sea siempre correcta; los analistas eligen basándose en la pregunta, el entorno y el presupuesto de rendimiento.
La cantidad de datos capturados de un solo paquete se conoce como "longitud de instantánea" o snaplen para abreviar. Si desea obtener la carga útil, debe indicar a la herramienta que no trunque los datos. Esto se controla mediante el indicador -s. Establecer el snaplen en 0 (-s 0) es un truco especial que le indica a tcpdump que utilice la longitud máxima posible, garantizando que no se pierda ningún dato.
En su entorno de fondo, ya hemos iniciado un servidor web simple en el puerto 8080. Para capturar los datos de forma limpia, utilizaremos un comando útil de Linux llamado timeout para ejecutar tcpdump automáticamente durante exactamente 10 segundos.
Ejecute el siguiente comando. Comenzará a capturar en la interfaz de bucle local (lo), filtrará por el puerto 8080, se asegurará de capturar paquetes completos (-s 0) y guardará los resultados en traffic.pcap en segundo plano (usando el símbolo &):
sudo timeout 10 tcpdump -i lo port 8080 -s 0 -w ~/project/traffic.pcap &
Mientras tcpdump observa silenciosamente en segundo plano, necesitamos generar algo de tráfico web interesante para que lo capture. Use el comando curl para solicitar un archivo oculto del servidor web local:
curl http://localhost:8080/secret.txt
Verá el texto SecretPayloadData123 impreso, que es la respuesta del servidor web a su solicitud. Espere unos segundos a que el temporizador de timeout de 10 segundos termine de cerrar el proceso de tcpdump en segundo plano. Puede presionar Enter un par de veces para ver aparecer el mensaje de finalización del trabajo en segundo plano.
Para asegurarse de que todo funcionó, enumere el contenido de su directorio para verificar el archivo de captura:
ls -l ~/project/traffic.pcap
Debería ver el archivo traffic.pcap listado con un tamaño de archivo mayor a cero, lo que confirma que nuestros paquetes completos y sin recortar han sido capturados y almacenados de forma segura.
Imprimir cargas útiles en ASCII
Ahora que hemos guardado con éxito los paquetes completos, es hora de abrirlos y leerlos. Cuando aplicaciones de red como sitios web básicos, servidores FTP o sistemas Telnet antiguos se comunican entre sí, a menudo envían los datos de su carga útil como texto simple y sin cifrar.
Esta es también la razón por la que los protocolos sin cifrar se consideran arriesgados en redes no confiables. Si un humano puede leer la carga útil en un archivo de captura, también puede hacerlo un atacante que intercepte el mismo tráfico. En otras palabras, la inspección de paquetes no es solo una técnica de análisis; es también un recordatorio de por qué los sistemas modernos prefieren protocolos cifrados como HTTPS y SSH.
Para revelar este texto plano, tcpdump proporciona el indicador -A. Esta práctica opción traduce los datos binarios sin procesar dentro del paquete a caracteres ASCII legibles por humanos. Es una forma excelente de escanear rápidamente un archivo de captura en busca de palabras legibles, mensajes de error o credenciales expuestas.
Use el indicador -r para leer su archivo de captura recién creado y combínelo con el indicador -A para mostrar el contenido ASCII:
sudo tcpdump -r ~/project/traffic.pcap -A
A medida que el texto se desplaza, observe detenidamente la salida. Primero verá las cabeceras técnicas del paquete, pero mezclado debajo de ellas, verá inglés legible.
Debería identificar fácilmente la solicitud GET /secret.txt que envió su comando curl, seguida por la respuesta del servidor web con un mensaje HTTP/1.0 200 OK. Cerca del final del paquete de respuesta del servidor, verá claramente la carga útil oculta expuesta en texto plano: SecretPayloadData123.
...
E..e..@.@.............Q...P.P...P...*......
GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
Accept: */*
...
E.....@.@.............P...Q.P...P...*......
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
...
SecretPayloadData123
...
Sin duda notará muchos puntos aleatorios (.) dispersos por toda la salida. Esto es completamente normal. La computadora intenta mostrar el código de máquina subyacente (como las cabeceras TCP/IP) como texto, y cuando encuentra un valor binario que no coincide con un carácter de teclado estándar, simplemente imprime un punto en su lugar.
Imprimir Hex y ASCII (Hexdump)
Aunque la vista ASCII (-A) es fantástica para hojear texto plano, se queda corta cuando se trata de lógica informática compleja. Debido a que los protocolos binarios (como las solicitudes DNS o el tráfico cifrado) se muestran como un mar confuso de puntos en modo ASCII, los ingenieros de red necesitan una herramienta más precisa.
El hexadecimal aparece constantemente en el trabajo de seguridad de bajo nivel porque es una forma compacta de representar bytes sin procesar. Las computadoras almacenan datos en binario, pero el binario es difícil de leer directamente para los humanos. El hex actúa como un punto medio práctico: cada dígito hexadecimal se asigna perfectamente a cuatro bits binarios, por lo que los analistas pueden inspeccionar la estructura a nivel de byte sin ahogarse en largas cadenas de ceros y unos.
Para obtener la vista más precisa de la anatomía de un paquete, utilice el indicador -X. Esto transforma la salida en un formato estructurado conocido como Hexdump. Muestra los valores hexadecimales (base 16) exactos de los datos junto con el texto ASCII, ofreciéndole lo mejor de ambos mundos.
Ejecute el siguiente comando para leer su archivo de captura y mostrar la vista de hexdump más detallada:
sudo tcpdump -r ~/project/traffic.pcap -X
Examine los bloques de datos estructurados presentados en su pantalla.
...
0x0000: 4500 0065 1419 4000 4006 28b4 7f00 0001 E..e..@.@.(.....
0x0010: 7f00 0001 8152 1f90 50b9 1017 5018 0200 .....R..P...P...
0x0020: fe59 0000 4745 5420 2f73 6563 7265 742e .Y..GET./secret.
0x0030: 7478 7420 4854 5450 2f31 2e31 0d0a 486f txt.HTTP/1.1..Ho
0x0040: 7374 3a20 6c6f 6361 6c68 6f73 743a 3830 st:.localhost:80
...
La salida está cuidadosamente organizada en tres columnas distintas.
La columna del extremo izquierdo (que comienza con 0x0000:) es básicamente una regla que le indica la posición exacta del byte dentro del paquete.
La sección central ancha muestra los datos del paquete sin procesar en formato hexadecimal, agrupados cuidadosamente en pares de dos bytes para facilitar la lectura por parte de los analistas de seguridad.
Finalmente, la sección del extremo derecho intenta traducir esa misma fila de datos hexadecimales de nuevo a caracteres ASCII familiares, actuando como una guía de referencia rápida.
Al presentar los datos uno al lado del otro, puede identificar el valor binario exacto de cualquier carácter errático, lo cual es una necesidad absoluta para la ingeniería inversa de ataques de red complejos.
Extraer cabeceras HTTP en texto plano
Buscar manualmente a través de la salida ASCII o Hexdump sin procesar es aceptable para pruebas pequeñas, pero se convierte rápidamente en una tarea imposible al analizar archivos de captura del mundo real que contienen miles de paquetes.
Este paso introduce otra idea fundamental de ingeniería: los flujos de trabajo potentes a menudo provienen de combinar herramientas pequeñas en lugar de depender de una sola herramienta gigante para hacer todo. tcpdump es bueno leyendo paquetes. grep es bueno buscando texto. Al conectarlos con una tubería (pipe), se crea un flujo de trabajo que es rápido y fácil de adaptar. Esa capacidad de composición es una de las fortalezas definitorias del entorno de línea de comandos de Linux.
Para resolver esto, Linux le permite combinar herramientas. Al tomar la salida ASCII de tcpdump y canalizarla (|) directamente hacia una herramienta de búsqueda de texto llamada grep, puede filtrar instantáneamente el flujo masivo de texto para revelar solo las agujas específicas que busca en el pajar.
Por ejemplo, si está investigando tráfico web, es posible que desee mapear rápidamente qué sitios web se están visitando (la cabecera Host) y qué tipo de navegadores web están ejecutando los usuarios (la cabecera User-Agent).
Ejecute el siguiente comando. Lee el archivo en modo ASCII, canaliza el texto hacia grep y utiliza el indicador -E para habilitar una búsqueda extendida de líneas que contengan "Host:", "User-Agent:" o "HTTP":
sudo tcpdump -r ~/project/traffic.pcap -A | grep -E "Host:|User-Agent:|HTTP"
Al instante, la salida confusa es reemplazada por un resumen limpio y altamente organizado de la transacción web:
GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Este flujo de trabajo es increíblemente potente para la respuesta a incidentes de ciberseguridad. Al cambiar las palabras de búsqueda, puede utilizar esta misma técnica para rastrear sin esfuerzo una captura de red completa en busca de contraseñas filtradas (por ejemplo, grep -i "password"), nombres de archivos confidenciales o cadenas de comandos maliciosos conocidos.
Resumen
¡Felicidades! Ha completado con éxito el laboratorio de Inspección del contenido de paquetes.
Ha elevado sus habilidades desde simplemente mirar el exterior de los paquetes de red hasta profundizar en los datos reales que se transmiten. Practicó la desactivación del truncamiento de paquetes utilizando la opción snaplen (-s 0) para garantizar una captura completa. Luego, desbloqueó el contenido utilizando el indicador -A para una vista ASCII legible y el indicador -X para un desglose preciso y profesional mediante Hexdump. Finalmente, mejoró su flujo de trabajo combinando tcpdump con herramientas de texto estándar de Linux para buscar y extraer automáticamente datos de aplicaciones específicas del ruido.
Estas habilidades fundamentales son la base misma de la inspección profunda de paquetes. Ya sea que esté solucionando un error de aplicación oscuro o realizando una investigación forense de red detallada sobre una brecha de seguridad, ahora tiene las herramientas para descubrir exactamente qué se mueve a través de los cables.

