Guía para principiantes tcpdump

Guía para principiantes tcpdump
TCPDUMP es un analizador de paquetes de red inalámbricos gratuitos y de código abierto que funciona en la interfaz de línea de comandos. Es la herramienta CLI más utilizada para analizar el tráfico de la red. TCPDUMP permite a los usuarios ver, leer o capturar el tráfico de red transmitido a través de una red adjunta a la computadora. Es útil en la administración del sistema, monitoreando el tráfico de red (para problemas o no).

Originalmente, fue escrito en 1988 por cuatro trabajadores del grupo de investigación de redes en el laboratorio de Lawrence Berkeley en California. Fue organizado once años después por Micheal Richardson y Bill Fenner en 1999, quienes crearon el sitio TCPDump. Tcpdump funciona en todos los sistemas operativos similares a unix. La versión de Windows de TCPDump se llama Windump y usa WinPCap, la alternativa de Windows para libpcap.

Use el SNAP para instalar TCPDUMP:

$ sudo snap instalación tcpdump

Use su administrador de paquetes para instalar tcpdump:

$ sudo apt-get install tcpdump (Debian/Ubuntu)
$ sudo dnf install tcpdump (centos/rhel 6 y 7)
$ sudo yum instalación tcpdump (fedora/centos/rhel 8)

Veamos diferentes usos y salidas mientras exploramos tcpdump!

UDP

Tcpdump puede descargar paquetes UDP también. Usaremos una herramienta NetCat (NC) para enviar un paquete UDP y luego lo descargarán.

$ echo -n "tcpdumper" | NC -W 1 -U localhost 1337

En el comando anterior, enviamos un paquete UDP que consta de la cadena "Tcpdumper" al puerto UDP 1337 a través de hostil. Tcpdump captura el paquete que se envía a través del puerto UDP 1337 y lo mostrará.

Ahora descargaremos este paquete con tcpdump.

$ sudo tcpdump -i lo UDP Port 1337 -vvv -x

Este comando capturará y mostrará los datos capturados de los paquetes en ASCII y forma hexagonal.

TCPDUMP: Escuchar en LO, EN10MB de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
04:39:39.072802 IP (TOS 0x0, TTL 64, ID 32650, Offset 0, Flags [DF], Proto UDP (17), Longitud 37)
hostil.54574> localhost.1337: [Bad UDP Cksum 0xfe24 -> 0xeac6!] UDP, longitud 9
0x0000: 4500 0025 7F8A 4000 4011 BD3B 7F00 0001 E ... %... @.@...; ..
0x0010: 7f00 0001 D52E 0539 0011 Fe24 7463 7064 ... 9 ... $ TCPD
0x0020: 756d 7065 72 Umper

Como podemos ver, el paquete se envió al puerto 1337, y la longitud era 9 como la cadena tcpdumper son 9 bytes. También podemos ver que el paquete se ha mostrado en formato hexagonal.

DHCP

TCPDUMP también puede llevar a cabo investigaciones en paquetes DHCP a través de la red. DHCP utiliza el puerto UDP no 67 o 68, por lo que definiremos y limitaremos tcpdump solo para paquetes DHCP. Suponga que estamos utilizando una interfaz de red WiFi.
El comando utilizado aquí será:

$ sudo tcpdump -i wlan0 puerto 67 o puerto 68 -e -n -vvv
tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, Ethertype IPv4 (0x0800), longitud 342: (TOS 0x0, TTL 64, ID 39781, Offset 0, Flags [DF ], Proto UDP (17), Longitud 328)
192.168.10.21.68> 192.168.10.1.67: [UDP suma OK] Bootp/DHCP, Solicitar desde 00: 11: 22: 33: 44: 55, longitud 300, xid 0xfeab2d67, banderas [ninguno] (0x0000)
Cliente-IP 192.168.10.dieciséis
Cliente-Ethernet-Address 00: 11: 22: 33: 44: 55
Vendor-RFC1048 Extensiones
Cookie mágica 0x63825363
DHCP-Message (53), Longitud 1: Liberación
Servidor-ID (54), Longitud 4: 192.168.10.1
Nombre de host (12), longitud 6: "Parrot"
Final (255), longitud 0
Almohadilla (0), longitud 0, ocurre 42

DNS

DNS, también conocido como Sistema de nombres de dominio, confirma que le proporciona lo que está buscando al hacer coincidir el nombre de dominio con la dirección de dominio. Para inspeccionar la comunicación de nivel DNS de su dispositivo a través de Internet, puede usar TCPDUMP de la siguiente manera. DNS utiliza el puerto UDP 53 para la comunicación.

$ sudo tcpdump -i Wlan0 UDP Port 53
tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
04:23:48.516616 IP (TOS 0x0, TTL 64, ID 31445, Offset 0, Flags [DF], Proto UDP (17), Longitud 72)
192.168.10.dieciséis.45899> uno.uno.uno.uno.Dominio: [UDP Sum Ok] 20852+ A? Mozilla.Cloudflare-DNS.comunicarse. (44)
04:23:48.551556 IP (TOS 0x0, TTL 60, ID 56385, Offset 0, Flags [DF], Proto UDP (17), Longitud 104)
uno.uno.uno.uno.Dominio> 192.168.10.dieciséis.45899: [UDP SUM OK] 20852 P: A? Mozilla.Cloudflare-DNS.comunicarse. 2/0/0 Mozilla.Cloudflare-DNS.comunicarse. [24S] A 104.dieciséis.249.249, Mozilla.Cloudflare-DNS.comunicarse. [24S] A 104.dieciséis.248.249 (76)
04:23:48.648477 IP (TOS 0x0, TTL 64, ID 31446, Offset 0, Flags [DF], Proto UDP (17), Longitud 66)
192.168.10.dieciséis.34043> uno.uno.uno.uno.Dominio: [UDP Sum OK] 40757+ PTR? 1.1.1.1.in-addr.arpa. (38)
04:23:48.688731 IP (TOS 0x0, TTL 60, ID 56387, Offset 0, Flags [DF], Proto UDP (17), Longitud 95)
uno.uno.uno.uno.Dominio> 192.168.10.dieciséis.34043: [UDP suma OK] 40757 P: PTR? 1.1.1.1.in-addr.arpa. 1/0/0 1.1.1.1.in-addr.arpa. [26M53S] PTR uno.uno.uno.uno. (67)

Arp

El protocolo de resolución de dirección se utiliza para descubrir la dirección de la capa de enlace, como una dirección MAC. Se asocia con una dirección de capa de Internet dada, generalmente una dirección IPv4.

Estamos utilizando tcpdump para capturar y leer los datos transportados en los paquetes ARP. El comando es tan simple como:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
03:44:12.023668 ARP, Ethernet (Len 6), IPv4 (Len 4), Solicitar OMS 192.168.10.1 DIGA 192.168.10.2, longitud 28
03:44:17.140259 ARP, Ethernet (Len 6), IPv4 (Len 4), Solicitud de quién ha sido 192.168.10.21 Dile 192.168.10.1, longitud 28
03:44:17.140276 ARP, Ethernet (Len 6), IPv4 (Len 4), Respuesta 192.168.10.21 IS-AT 00: 11: 22: 33: 44: 55 (Oui Desconocido), Longitud 28
03:44:42.026393 ARP, Ethernet (Len 6), IPv4 (Len 4), Solicitar OMS 192.168.10.1 DIGA 192.168.10.2, longitud 28

ICMP

ICMP, también conocido como el Protocolo de mensajes de control de Internet, es un protocolo de apoyo en la suite de protocolo de Internet. ICMP se usa como protocolo informativo.

Para ver todos los paquetes ICMP en una interfaz, podemos usar este comando:

$ sudo tcpdump icmp -vvv
tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
04:26:42.123902 IP (TOS 0x0, TTL 64, ID 14831, Offset 0, Flags [DF], Proto ICMP (1), Longitud 84)
192.168.10.16> 192.168.10.1: solicitud de eco ICMP, ID 47363, SEQ 1, Longitud 64
04:26:42.128429 IP (TOS 0x0, TTL 64, ID 32915, Offset 0, Flags [Ninguno], Proto ICMP (1), Longitud 84)
192.168.10.1> 192.168.10.16: ICMP Echo Responder, ID 47363, SEQ 1, Longitud 64
04:26:43.125599 IP (TOS 0x0, TTL 64, ID 14888, Offset 0, Flags [DF], Proto ICMP (1), Longitud 84)
192.168.10.16> 192.168.10.1: solicitud de eco ICMP, ID 47363, SEQ 2, Longitud 64
04:26:43.128055 IP (TOS 0x0, TTL 64, ID 32916, Offset 0, Flags [Ninguno], Proto ICMP (1), Longitud 84)
192.168.10.1> 192.168.10.16: ICMP Echo Respuesta, ID 47363, SEQ 2, Longitud 64

NTP

NTP es un protocolo de red diseñado específicamente para sincronizar el tiempo en una red de máquinas. Para capturar el tráfico en NTP:

$ sudo tcpdump dst puerto 123
04:31:05.547856 IP (TOS 0x0, TTL 64, ID 34474, Offset 0, Flags [DF], Proto UDP (17), Longitud 76)
192.168.10.dieciséis.NTP> TIME-B-WWV.nist.gobierno.NTP: [UDP Sum OK] NTPV4, cliente, longitud 48
Indicador de salto: Reloj UnsynCronized (192), Stratum 0 (no especificado), encuesta 3 (8s), Precisión -6
Retraso de la raíz: 1.000000, dispersión de raíz: 1.000000, ID de referencia: (UNSPEC)
Marca de tiempo de referencia: 0.000000000
Marca de tiempo de originador: 0.000000000
Reciba la marca de tiempo: 0.000000000
Transmita la marca de tiempo: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Originator - Recibir marca de tiempo: 0.000000000
Originador - Transmitir marca de tiempo: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (TOS 0x0, TTL 56, ID 234, Offset 0, Flags [Ninguno], Proto UDP (17), Longitud 76)
Time-B-WWV.nist.gobierno.NTP> 192.168.10.dieciséis.NTP: [UDP Sum OK] NTPV3, servidor, longitud 48
Indicador de salto: (0), Stratum 1 (referencia primaria), encuesta 13 (8192S), Precisión -29
Retraso de la raíz: 0.000244, dispersión de raíz: 0.000488, ID de referencia: NIST
Marca de tiempo de referencia: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Marca de tiempo de originador: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Recibir marca de tiempo: 3825358275.028660181 (2021-03-21T23: 31: 15z)
Transmitir la marca de tiempo: 3825358275.028661296 (2021-03-21T23: 31: 15z)
Originador - Recibir marca de tiempo: +9.480896026
Originator - Transmitir marca de tiempo: +9.480897141

Smtp

El protocolo SMTP o de transferencia de correo simple se utiliza principalmente para correos electrónicos. TCPDUMP puede usar esto para extraer información útil de correo electrónico. Por ejemplo, para extraer destinatarios/remitentes del correo electrónico:

$ sudo tcpdump -n -l puerto 25 | grep -i 'correo de \ | rcpt a'

IPv6

IPv6 es la "próxima generación" de IP, que proporciona una amplia gama de direcciones IP. IPv6 ayuda a lograr la salud a largo plazo de Internet.

Para capturar el tráfico IPv6, use el filtro IP6 especificando los protocolos TCP y UDP utilizando Proto 6 y Proto-17.

$ sudo tcpdump -n -i cualquier ip6 -vvv
TCPDUMP: Tipo de enlace de datos Linux_SLL2
tcpdump: escuchar en cualquiera, link-type linux_sll2 (Linux cocinado v2), longitud de instantánea 262144 bytes
04:34:31.847359 LO en IP6 (FlowLabel 0xC7CB6, HLIM 64, Next-Header UDP (17) Longitud de carga útil: 40) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x003b -> 0x3587!] UDP, longitud 32
04:34:31.859082 LO en IP6 (FlowLabel 0xC7CB6, HLIM 64, Next-Header UDP (17) Longitud de carga útil: 32) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x0033 -> 0xeaef!] UDP, longitud 24
04:34:31.860361 LO en IP6 (FlowLabel 0xC7CB6, HLIM 64, Next-Header UDP (17) Longitud de carga útil: 40) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x003b -> 0x7267!] UDP, longitud 32
04:34:31.871100 LO en IP6 (FlowLabel 0xC7CB6, HLIM 64, Next-Header UDP (17) Longitud de carga útil: 944) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x03c3 -> 0xf890!] UDP, longitud 936
4 paquetes capturados
12 paquetes recibidos por filtro
0 paquetes caídos por kernel

El '-c 4' proporciona un recuento de paquetes de hasta 4 paquetes solo. Podemos especificar el número de paquetes para n y capturar n paquetes.

Http

El protocolo de transferencia de hipertexto se utiliza para transferir datos de un servidor web a un navegador para ver las páginas web. HTTP utiliza la comunicación de formulario TCP. Específicamente, se utiliza el puerto TCP 80.

Para imprimir todos los paquetes HTTP IPv4 hacia y desde el puerto 80:

tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
03:36:00.602104 IP (TOS 0x0, TTL 64, ID 722, Offset 0, Flags [DF], Proto TCP (6), Longitud 60)
192.168.10.21.33586> 192.168.10.1.http: Flags [S], Cksum 0xa22b (correcto), SEQ 2736960993, Win 64240, Opciones [MSS 1460, Sackok, TS Val 389882294 ECR 0, NOP, WScale 10], Longitud 0
03:36:00.604830 IP (TOS 0x0, TTL 64, ID 0, Offset 0, Flags [DF], Proto TCP (6), Longitud 60)
192.168.10.1.http> 192.168.10.21.33586: Flags [s.], CKSUM 0x2DCC (correcto), SEQ 4089727666, ACK 27369609994, WIN 14480, Opciones [MSS 1460, Sackok, TS Val 30996070 ECR 3898882294, NOP, Scale 3], Longitud 0
03:36:00.604893 IP (TOS 0x0, TTL 64, ID 723, Offset 0, Flags [DF], Proto TCP (6), Longitud 52)
192.168.10.21.33586> 192.168.10.1.http: banderas [.], cksum 0x94e2 (correcto), seq 1, ack 1, ganar 63, opciones [nop, nop, ts val 389882297 ECR 30996070], longitud 0
03:36:00.605054 IP (TOS 0x0, TTL 64, ID 724, Offset 0, Flags [DF], Proto TCP (6), Longitud 481)

Solicitudes de HTTP ..

192.168.10.21.33586> 192.168.10.1.http: banderas [P.], cksum 0x9e5d (correcto), seq 1: 430, ack 1, win 63, opciones [NOP, NOP, TS VAL 389882297 CEC 30996070], Longitud 429: HTTP, Longitud: 429
Get / http / 1.1
Anfitrión: 192.168.10.1
Agente de usuario: Mozilla/5.0 (Windows NT 10.0; RV: 78.0) Gecko/20100101 Firefox/78.0
Aceptar: texto/html, aplicación/xhtml+xml, aplicación/xml; q = 0.9, imagen/webp,*/*; q = 0.8
Aceptar el idioma: en-us, en; q = 0.5
Aceptación de aceptación: GZIP, desinflar
DNT: 1
Conexión: mantener alive
Cookie: _TestCookiesUpport = 1; SID = C7CCFA31CFE06065717D24FB544A5CD588760F0CDC5AE2739E746F84C469B5FD
Actualización-Insecura-Requests: 1

Y las respuestas también se capturan

192.168.10.1.http> 192.168.10.21.33586: Flags [P.], CKSUM 0x84f8 (correcto), SEQ 1: 523, ACK 430, Win 1944, Opciones [NOP, NOP, TS VAL 30996179 CEC 389882297], Longitud 522: HTTP, Longitud: 522
Http/1.1 200 OK
Servidor: Servidor web ZTE 1.0 ZTE Corp 2015.
Aceptar a los rangos: bytes
Conexión: Cerrar
X-Frame-Opciones: Sameorigin
Cache-Control: No-Cache, sin tienda
Content-longitud: 138098
Set-cookie: _testcookiesupport = 1; Ruta =/; Httponly
Tipo de contenido: texto/html; Charset = UTF-8
Opciones de tipo X-contenente: Nosniff
Content-Security-Policy: frame-Achens 'uno mismo' 'inseguro en línea' 'insegural-eval'; IMG-SRC 'Self' Data:;
X-XSS-Protección: 1; modo = bloque
Set-cookie: sid =; expires = thu, 01-jan-1970 00:00:00 gmt; ruta =/; Httponly

TCP

Para capturar paquetes solo TCP, este comando hará todo lo bueno:

$ sudo tcpdump -i wlan0 tcp
tcpdump: escuchando en wlan0, en10mb de tipo enlace (Ethernet), longitud de instantánea 262144 bytes
04:35:48.892037 IP (TOS 0x0, TTL 60, ID 23987, Offset 0, Flags [Ninguno], Proto TCP (6), Longitud 104)
TL-in-F189.1e100.neto.https> 192.168.10.dieciséis.50272: Flags [P.], CKSUM 0xC924 (correcto), SEQ 1377740065: 1377740117, ACK 1546363399, Win 300, Opciones [NOP, NOP, TS Val 13149401 ECR 3051434098], longitud 52
04:35:48.892080 IP (TOS 0x0, TTL 64, ID 20577, Offset 0, Flags [DF], Proto TCP (6), Longitud 52)
192.168.10.dieciséis.50272> TL-in-F189.1e100.neto.https: banderas [.], cksum 0xf898 (correcto), seq 1, ack 52, ganar 63, opciones [nop, nop, ts val 3051461952 ECR 13149401], longitud 0
04:35:50.199754 IP (TOS 0x0, TTL 64, ID 20578, Offset 0, Flags [DF], Proto TCP (6), Longitud 88)
192.168.10.dieciséis.50272> TL-in-F189.1e100.neto.https: banderas [P.], CKSUM 0x2531 (correcto), SEQ 1:37, ACK 52, Win 63, Opciones [NOP, NOP, TS VAL 3051463260 CEC 13149401], Longitud 36
04:35:50.199809 IP (TOS 0x0, TTL 64, ID 7014, Offset 0, Flags [DF], Proto TCP (6), Longitud 88)
192.168.10.dieciséis.50434> HKG12S18-In-F14.1e100.neto.https: banderas [P.], cksum 0xb21e (correcto), SEQ 328391782: 328391818, ACK 3599854191, win 63, opciones [NOP, NOP, TS VAL 3656137742 ECR 2564108387], longitud 36
4 paquetes capturados
4 paquetes recibidos por filtro
0 paquetes caídos por kernel

Normalmente, la captura de paquetes TCP da como resultado mucho tráfico; Puede especificar en detalle sus requisitos agregando filtros a la captura, como:

Puerto
Especifica el puerto para monitorear

$ sudo tcpdump -i wlan0 tcp puerto 2222

IP de origen
Para ver paquetes desde una fuente especificada

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

IP de destino
Para ver los paquetes a un destino específico

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Guardar captura de paquetes en archivos

Para guardar la captura de paquetes para hacer análisis más adelante, podemos usar la opción -W de TCPDUMP que requiere un parámetro de nombre de archivo. Estos archivos se guardan en un formato de archivo PCAP (Packet Capture), que se puede usar para guardar o enviar capturas de paquetes.

Por ejemplo:

$ sudo tcpdump -w /Capturado.PCAP

Podemos agregar filtros en cuanto a si queremos capturar paquetes TCP, UDP o ICMP, etc.

Lectura de captura de paquetes de archivos

Desafortunadamente, no puede leer el archivo guardado a través de comandos comunes de 'leer archivo' como CAT, etc. La salida es casi galimatoria, y es difícil saber qué hay en el archivo. '-r' se usa para leer los paquetes guardados en el .Archivo PCAP, almacenado anteriormente por '-W' u otro software almacenando PCAP:

$ sudo tcpdump -r /salidas.PCAP

Esto imprime los datos recopilados de los paquetes capturados en la pantalla terminal en un formato legible.

Hoja de trucos tcpdump

TCPDUMP se puede usar con otros comandos de Linux como GREP, SED, etc., Para extraer información útil. Aquí hay algunas combinaciones útiles y palabras clave amalgamadas en uso con TCPDUMP para obtener información valiosa.

Extraer agentes de usuario de HTTP:

$ sudo tcpdump -n | Grep "Agente de usuario:"

Las URL solicitadas a través de HTTP se pueden monitorear utilizando TCPDUM como:

$ sudo tcpdump -v -n | egrep -i "post / | get / | host:"

Tú también puedes Extraer contraseñas HTTP en solicitudes de publicación

$ sudo tcpdump -nn -l | egrep -i "post /| pwd = | passwd = | contraseña = | host:"

Las cookies del servidor o del lado del cliente se pueden extraer utilizando:

$ sudo tcpdump -n | egrep -i 'set -cookie | Host: | Cookie:'

Capture las solicitudes y respuestas DNS utilizando:

$ sudo tcpdump -i wlp58s0 -s0 puerto 53

Imprima todas las contraseñas de texto sin formato:

$ sudo tcpdump puerto http o puerto ftp o puerto smtp o puerto imap o puerto pop3 o puerto telnet -l -a | egrep -i -b5 'pass = | pwd = | log = | login = | user = | user | username = | pw = | passw = | passwd = | contraseña = | pass: | user: | nombre de usuario: | contraseña: | Iniciar sesión: | pasar '

Filtros tcpdump comunes

  • -A Muestra paquetes en formato ASCII.
  • -C Número de paquetes para capturar.
  • -contar Imprimir el recuento de paquetes solo cuando lea un archivo capturado.
  • -mi Imprimir direcciones MAC y encabezados a nivel de enlace.
  • -H o -Help Imprime la versión y la información de uso.
  • -versión Muestre solo la información de la versión.
  • -i Especifique la interfaz de red para capturar en.
  • -K Evitar intentos de verificar las suma de verificación de cualquier paquete. Agrega velocidad.
  • -metro Especificar el módulo para usar.
  • -norte No conviertas direcciones (yo.mi., Direcciones de host, números de puerto, etc.) a los nombres.
  • -número Imprima un número de paquete opcional al comienzo de cada línea.
  • -pag Prohibir la interfaz de entrar en modo promiscuo.
  • -Q Elija la dirección para que los paquetes sean capturados. Enviar o recibir.
  • -Q Salida tranquila/rápida. Imprime menos información. Las salidas son más cortas.
  • -riñonal Solía ​​leer paquetes de un PCAP .
  • -T No imprima una marca de tiempo en cada línea de descarga.
  • -V Imprime más información sobre la salida.
  • -w Escribe los paquetes sin procesar en el archivo.
  • -X Imprime la salida ASCII.
  • -X Imprime ASCII con hexadecimal.
  • -interfaces de lista Muestra todas las interfaces de red disponibles donde los paquetes pueden ser capturados por TCPDUMP.

Cesación

TCPDUMP ha sido una herramienta muy utilizada utilizada en la investigación y aplicaciones de seguridad/redes. El único inconveniente de TCPDump no tiene 'Gui', pero es demasiado bueno para mantenerse fuera de las listas superiores. Como Daniel Miessler escribe: “Los analizadores de protocolos como Wireshark son geniales, pero si realmente quieres dominar el paquete-fu, debes convertirte en uno con tcpdump primero."