Analizar un PCAP en un CTF con Wireshark y tshark
Qué mirar primero en una captura de red, cómo sacar contraseñas de FTP, HTTP, LDAP y Kerberos, extraer ficheros y descifrar TLS o WiFi con Wireshark y tshark.
Una captura de red (.pcap o .pcapng) aparece en dos situaciones: como reto de forense en un CTF, o como fichero que encuentras dentro de una máquina (en un recurso compartido, en la carpeta de un usuario o descargado por un IDOR, como en Cap). En los dos casos casi siempre buscas lo mismo: credenciales que viajaron sin cifrar o un fichero que se transfirió.
1. La vista general antes de abrir paquetes
No empieces haciendo scroll. Primero, qué hay en la captura:
capinfos captura.pcap # duración, número de paquetes
tshark -r captura.pcap -qz io,phs # jerarquía de protocolos
tshark -r captura.pcap -qz conv,tcp # conversaciones TCP, por bytes
tshark -r captura.pcap -qz http,tree # peticiones HTTP
En Wireshark lo mismo está en Statistics → Protocol Hierarchy y Statistics → Conversations. Ordena las conversaciones por bytes: la más grande suele ser una transferencia de ficheros, y las de puertos raros, lo interesante.
2. Credenciales en texto claro
| Protocolo | Filtro de Wireshark | Qué buscar |
|---|---|---|
| FTP | ftp.request.command == "USER" || ftp.request.command == "PASS" |
Usuario y contraseña tal cual |
| HTTP Basic | http.authorization |
Base64 de usuario:contraseña |
| Formularios HTTP | http.request.method == "POST" |
username=...&password=... en el cuerpo |
| Telnet, POP3, IMAP, SMTP | telnet, pop, imap, smtp |
Follow TCP Stream y leer |
| LDAP | ldap.bindRequest_element |
Simple bind con la contraseña en claro (Support) |
| SNMP | snmp |
La community string |
Atajo para todo a la vez: Tools → Credentials en Wireshark, o en la terminal:
tshark -r captura.pcap -Y 'ftp.request.command in {"USER" "PASS"}' -T fields -e ftp.request.arg
pip install pcredz && Pcredz -f captura.pcap
Truco
Para leer una conversación entera, clic derecho → Follow → TCP Stream (Ctrl+Alt+Shift+T). Con tshark -r captura.pcap -qz follow,tcp,ascii,0 sacas el stream 0 en la terminal.
3. Hashes que se pueden crackear
Aunque el protocolo no mande la contraseña, a veces manda algo crackeable:
- NTLMv2 (SMB, HTTP con NTLM):
NTLMRawUnHideoPcredzlo extraen en formato hashcat (-m 5600). - Kerberos AS-REQ con preautenticación: el timestamp cifrado se crackea con hashcat
-m 19900(etype 18) o-m 7500(etype 23). Es el camino de Office y Certificate. - WPA/WPA2: un handshake de cuatro pasos se convierte con
hcxpcapngtool -o hash.hc22000 captura.pcapy se crackea con-m 22000.
Todo ello se crackea como en la guía de cracking de hashes.
4. Extraer ficheros
File → Export Objects en Wireshark saca lo que se transfirió por HTTP, SMB, FTP-DATA, TFTP o IMF (correo). En la terminal:
tshark -r captura.pcap --export-objects http,./salida
tshark -r captura.pcap --export-objects smb,./salida
Si no lo reconoce, sigue el stream TCP, cambia la vista a Raw y guárdalo; luego file y binwalk -e dicen qué es. Para FTP, los datos van en una conexión aparte (FTP-DATA): búscala justo después del comando RETR.
5. Tráfico cifrado
- TLS: si encuentras un fichero de claves de sesión (
SSLKEYLOGFILE, un.logcon líneasCLIENT_RANDOM) o la clave privada RSA del servidor, cárgalo en Preferences → Protocols → TLS. Con TLS 1.3 o cifrados con forward secrecy, solo sirve el fichero de claves de sesión. - WiFi: con la contraseña de la red, en Preferences → Protocols → IEEE 802.11 → Decryption keys añade
wpa-pwdconcontraseña:SSID. Así se descifra el tráfico en AirTouch. - Kerberos: con un keytab de la cuenta de servicio Wireshark descifra los tickets (Preferences → Protocols → KRB5).
6. Si no hay nada obvio
- DNS: nombres larguísimos o en base64/hexadecimal suelen ser exfiltración (
dns.qry.name). - ICMP: datos en el campo data de los ping, otro canal de exfiltración típico de CTF.
- USB: capturas de teclado (
usb.capdata); cada paquete es una tecla y hay scripts que lo traducen a texto. - Tiempos y longitudes: a veces el mensaje está en el tamaño de los paquetes o en el intervalo entre ellos.
En una máquina, si no hay captura pero tienes permiso para capturar (tcpdump con capabilities o como root), deja corriendo tcpdump -i any -w /tmp/c.pcap unos minutos: tareas programadas que se autentican contra otro servicio dejan credenciales a la vista (Carrier, LightWeight).