Redes
Wireshark a Fondo
Domina los filtros de captura BPF y los filtros de display de Wireshark para analizar tráfico y extraer credenciales en pruebas de penetración OSCP.
Índice▾
- Introducción
- Filtros de Captura vs. Filtros de Display
- Filtros de Captura (BPF — Berkeley Packet Filter)
- Filtros de Display
- Filtros de Display Esenciales para OSCP
- Filtros por dirección y puerto
- Filtros por protocolo
- Filtros de flags TCP
- Búsqueda en payload
- Seguimiento de streams
- Follow Stream: Reconstruir Conversaciones
- TCP Stream
- HTTP Stream
- Statistics: Análisis Global de la Captura
- Protocol Hierarchy
- Conversations y Endpoints
- Flow Graph (Diagrama de Secuencia)
- Extracción de Ficheros: Export Objects
- Colorización y Perfiles
- tshark: Wireshark en la Línea de Comandos
- Opciones principales
- Uso Ofensivo: Extracción de Credenciales
- HTTP Basic Auth
- FTP
- Telnet
- Práctica
- Recursos
Introducción
Wireshark es la herramienta de análisis de paquetes más utilizada en ciberseguridad. En el contexto del OSCP, te permitirá inspeccionar capturas realizadas en pivots, reconstruir sesiones de protocolos en claro y extraer artefactos (credenciales, ficheros) de tráfico interceptado. Ver también: MitM y Sniffing y Protocolos de Aplicación.
Filtros de Captura vs. Filtros de Display
Esta es la distinción más importante que debes interiorizar antes de tocar cualquier otro ajuste.
┌─────────────────────────────────────────────────────────────────┐
│ TRÁFICO DE RED │
│ │ │
│ ┌─────────────▼─────────────┐ │
│ │ FILTRO DE CAPTURA (BPF) │ ← Se aplica ANTES │
│ │ Descarta paquetes que │ de guardar │
│ │ no coinciden │ │
│ └─────────────┬─────────────┘ │
│ │ │
│ ┌─────────────▼─────────────┐ │
│ │ BUFFER / PCAP │ ← Paquetes en RAM │
│ └─────────────┬─────────────┘ o disco │
│ │ │
│ ┌─────────────▼─────────────┐ │
│ │ FILTRO DE DISPLAY │ ← Se aplica DESPUÉS│
│ │ Oculta/muestra paquetes │ (no descarta) │
│ │ ya capturados │ │
│ └─────────────┬─────────────┘ │
│ │ │
│ ┌─────────────▼─────────────┐ │
│ │ PANEL DE PAQUETES │ │
│ └───────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘Filtros de Captura (BPF — Berkeley Packet Filter)
Se configuran en Capture → Options antes de iniciar la captura. Usan sintaxis BPF idéntica a tcpdump. Su ventaja es que reducen la carga en memoria y disco al descartar paquetes a nivel de kernel, antes de que Wireshark los procese.
Los filtros de captura descartan permanentemente los paquetes que no coinciden. Si capturas solo HTTP y luego necesitas ver DNS, deberás capturar de nuevo. Úsalos solo cuando sepas exactamente qué tráfico quieres.
| Objetivo | Filtro BPF |
|---|---|
| Solo tráfico HTTP | tcp port 80 |
| Un host concreto | host 10.10.10.5 |
| Una subred | net 192.168.1.0/24 |
| Excluir tráfico SSH | not port 22 |
| Solo SYN iniciales | tcp[13] & 2 != 0 and tcp[13] & 16 = 0 |
Filtros de Display
Se escriben en la barra de filtros de la interfaz principal. No eliminan paquetes del buffer: simplemente los ocultan o muestran en la lista. Puedes cambiarlos tantas veces como quieras sobre la misma captura. Su sintaxis es específica de Wireshark y más expresiva que BPF.
La barra de filtros se vuelve verde cuando el filtro es válido y roja cuando contiene errores de sintaxis. Si está vacía, muestra todos los paquetes.
Filtros de Display Esenciales para OSCP
Filtros por dirección y puerto
ip.addr == 10.10.10.5 # Cualquier paquete con esa IP (origen o destino)
ip.src == 10.10.10.5 # Solo paquetes originados desde esa IP
ip.dst == 10.10.10.5 # Solo paquetes destinados a esa IP
tcp.port == 80 # Puerto TCP 80 en cualquier dirección
tcp.dstport == 443 # Solo conexiones hacia el puerto 443Filtros por protocolo
http # Todo el tráfico HTTP (capa de aplicación)
dns # Consultas y respuestas DNS
ftp # Tráfico FTP (credenciales en claro)
telnet # Tráfico Telnet (credenciales en claro)Filtros de flags TCP
tcp.flags.syn == 1 && tcp.flags.ack == 0 # SYN inicial (inicio de conexión)
tcp.flags.syn == 1 && tcp.flags.ack == 1 # SYN/ACK (respuesta del servidor)
tcp.flags.reset == 1 # Resets (puerto cerrado, errores)
tcp.flags.fin == 1 # Cierre de conexiónEl filtro tcp.flags.syn == 1 && tcp.flags.ack == 0 es especialmente útil durante el OSCP: permite ver todas las nuevas conexiones iniciadas desde/hacia un host, revelando qué servicios están siendo contactados.
Búsqueda en payload
frame contains "password" # Busca el string "password" en cualquier capa
http contains "login" # Busca en paquetes HTTP
tcp contains "USER" # Útil para detectar autenticación FTPframe contains es sensible a mayúsculas. Usa frame matches "(?i)password" para búsqueda insensible a mayúsculas (expresión regular).
Seguimiento de streams
tcp.stream eq 0 # Filtra SOLO la primera conversación TCP
tcp.stream eq 3 # Filtra SOLO la cuarta conversación TCPEl número de stream es asignado por Wireshark automáticamente en orden de aparición. Es la forma más limpia de aislar una conversación concreta.
Follow Stream: Reconstruir Conversaciones
Wireshark puede reconstruir el diálogo completo de una conexión TCP o HTTP en texto legible. Esto es fundamental para leer credenciales, comandos o respuestas en claro.
TCP Stream
- Haz clic derecho sobre cualquier paquete de la conversación que te interesa.
- Selecciona Follow → TCP Stream.
- Wireshark abre una ventana con el intercambio completo: el tráfico del cliente se muestra en rojo y el del servidor en azul.
- En el desplegable inferior puedes cambiar entre ASCII, Hex o Raw.
┌─────────────────────────────────────────┐
│ Follow TCP Stream │
│ │
│ USER ftpuser ← cliente │
│ 331 Password required ← servidor │
│ PASS s3cr3t ← cliente │
│ 230 Login successful ← servidor │
└─────────────────────────────────────────┘HTTP Stream
Igual que TCP Stream, pero Wireshark descomprime el cuerpo HTTP automáticamente. Usa Follow → HTTP Stream para ver formularios POST con credenciales o respuestas JSON en claro.
El TCP Stream aplica el filtro tcp.stream eq N automáticamente. Recuérdalo para volver al análisis posterior o combinar filtros.
Statistics: Análisis Global de la Captura
El menú Statistics ofrece vistas agregadas que permiten entender el tráfico de un vistazo.
Protocol Hierarchy
Statistics → Protocol Hierarchy muestra el porcentaje de paquetes y bytes de cada protocolo. Útil para detectar protocolos inesperados (¿hay FTP en una red que solo debería tener HTTPS?) o confirmar qué capa de aplicación domina el tráfico.
Conversations y Endpoints
- Conversations: lista todos los pares de hosts que han intercambiado paquetes, con bytes y duración de cada conversación. Permite identificar rápidamente qué hosts se comunican más.
- Endpoints: lista individual de IPs, MACs o puertos con sus estadísticas. Útil para detectar hosts con tráfico anómalo.
Flow Graph (Diagrama de Secuencia)
Statistics → Flow Graph genera un diagrama de secuencia temporal que muestra el orden exacto de los paquetes entre los hosts. Es especialmente útil para visualizar el handshake TCP y el inicio de sesión de protocolos como HTTP o FTP.
Cliente Servidor
│ │
│──── SYN ──────────►│
│◄─── SYN/ACK ───────│
│──── ACK ──────────►│
│──── GET /login ───►│
│◄─── 200 OK ────────│
│ │Extracción de Ficheros: Export Objects
Wireshark puede reensamblar y exportar ficheros que fueron transferidos sobre HTTP (imágenes, ejecutables, documentos).
- Ve a File → Export Objects → HTTP.
- Aparece una lista con todos los recursos descargados por HTTP, con su URL, tipo de contenido y tamaño.
- Selecciona el fichero que te interesa y haz clic en Save.
Si la víctima descargó un ejecutable desde un servidor HTTP sin cifrar, puedes recuperarlo exactamente como lo recibió. Esto es relevante en análisis forense y en ejercicios de pivoting donde quieres entender qué herramientas descargó el atacante anterior.
Para otros protocolos existe File → Export Objects → SMB, útil para capturas de red Windows.
Colorización y Perfiles
Wireshark colorea los paquetes por defecto según el protocolo (verde para HTTP, azul para DNS, etc.). Puedes personalizar las reglas en View → Coloring Rules.
Los perfiles (Edit → Configuration Profiles) permiten guardar juegos de filtros, colores y columnas distintos para diferentes escenarios (análisis web, análisis de malware, análisis de red industrial). En OSCP es útil tener un perfil con columnas que muestren la IP de destino y el payload de la primera línea HTTP.
tshark: Wireshark en la Línea de Comandos
tshark es la versión CLI de Wireshark. Comparte el mismo motor de disección y los mismos filtros de display, pero funciona sin interfaz gráfica.
tshark es ideal cuando tienes acceso a un servidor Linux sin entorno gráfico o cuando quieres automatizar análisis con scripts de shell.
Opciones principales
# Listar interfaces disponibles
tshark -D
# Capturar en vivo en la interfaz eth0, mostrando solo tráfico HTTP
tshark -i eth0 -Y 'http.request'
# Leer un pcap existente y aplicar un filtro de display
tshark -r captura.pcap -Y 'http.request'
# Leer pcap y extraer campos concretos (IP destino y URI HTTP)
tshark -r captura.pcap -Y 'http.request' -T fields -e ip.dst -e http.request.uri
# Leer pcap y mostrar solo SYN iniciales
tshark -r captura.pcap -Y 'tcp.flags.syn==1 && tcp.flags.ack==0'
# Capturar 100 paquetes y guardar a fichero
tshark -i eth0 -c 100 -w salida.pcapLa opción -T fields -e <campo> permite extraer campos específicos para pasarlos a otras herramientas con grep, awk o sort | uniq -c.
Uso Ofensivo: Extracción de Credenciales
Cuando realizas un ataque MitM (ver MitM y Sniffing) o capturas tráfico en un segmento de red comprometido, Wireshark permite extraer credenciales de protocolos en claro.
HTTP Basic Auth
# Filtrar peticiones HTTP con cabecera Authorization
tshark -r captura.pcap -Y 'http.authorization' -T fields -e ip.src -e http.authorizationLas credenciales están codificadas en Base64. El resultado dXNlcjpwYXNz se decodifica con echo dXNlcjpwYXNz | base64 -d.
FTP
# Filtrar comandos de autenticación FTP
tshark -r captura.pcap -Y 'ftp.request.command == "USER" or ftp.request.command == "PASS"' \
-T fields -e ip.src -e ftp.request.command -e ftp.request.argTelnet
Telnet envía cada carácter en un paquete separado. Usa Follow → TCP Stream para reconstruir la sesión completa. Los protocolos en claro y sus riesgos se explican con más detalle en Protocolos de Aplicación.
El uso de estas técnicas solo está autorizado en entornos de laboratorio controlados o con permiso explícito por escrito. En el OSCP, aplica estas técnicas únicamente dentro del alcance definido.
Práctica
Ejercicio 1. Escribe el filtro de display de Wireshark para ver únicamente los SYN iniciales (paquetes que inician una nueva conexión TCP, sin el bit ACK activado).
Ver solución
El filtro correcto es:
tcp.flags.syn == 1 && tcp.flags.ack == 0Por qué funciona: un SYN inicial tiene el bit SYN activo (valor 1) y el bit ACK inactivo (valor 0). El SYN/ACK del servidor también tiene SYN=1, pero además tiene ACK=1, por lo que queda excluido. Así solo ves el primer paquete de cada nueva conexión TCP, lo que revela todos los servicios contactados por los hosts.
Ejercicio 2. Tienes una captura trafico.pcap de una red donde la víctima descargó un fichero ejecutable desde un servidor HTTP. Describe los pasos para recuperar ese fichero usando Wireshark.
Ver solución
- Abre
trafico.pcapen Wireshark: File → Open. - Aplica el filtro de display
httppara confirmar que hay tráfico HTTP visible. - Ve a File → Export Objects → HTTP.
- En la ventana que aparece, busca entradas cuyo Content Type sea
application/octet-stream,application/x-msdownloado similar, o cuya extensión sea.exe. - Selecciona la entrada y haz clic en Save (o Save All para exportar todo).
Si el servidor usó compresión gzip, Wireshark descomprime el cuerpo automáticamente antes de exportar. Si hay más de un objeto con el mismo nombre, Wireshark añade un sufijo numérico.