Seguimos con las referencias a esas pequeñas herramientas que nos hace la vida más facil para tareas de administración de red, captura de paquetes, etc. Serie práctica que ya iniciamos con NBTSCAN.
En esta ocasión le toca a NGREP. Una herramienta ya conocida en los ambientes Linux. Veremos como podemos, con muy poco esfuerzo lograr resultados de forma muy rápida y eficiente.
NOTA: Se han corregidos varios errores de escritura que me apuntan varios lectores.
Ngrep Un grep para el tráfico de nuestra red.
Ngrep no es más que un grep pero que su principal función es la de analizar sobre el tráfico de nuestra red. Está basada, como la mayoría de herramientas con funcionalidades sniffer, en las librerias de funciones libpcap (winpcap para windows). Así que todo lo que hemos aprendido sobre filtros también nos valdrá, en parte, para ngrep.
Lo primero que tenemos que hacer es realizar un lista de nuestras interfaces de red para elegir la que usaremos:
ngrep -L
una vez que tenemos la lista, elegimos:
ngrep -d(interface de red)
ngrep –d1
de esta forma ya tenemos la función básica de sniffer acticvada.
Buscando patrones y cadenas en la red.
Una aplicación muy sencilla. Activamos ngrep y buscamos la cadena PASS para ver las concidencias que es capaz de encontrar. Lo hacemos con la opción -x:
ngrep -d1 –x PASS
interface: \Device\NPF_{024A36DD-4864-4F08-918F-2C5CBA916541} (192.168.1.0/255.2
55.255.0)
match: PASS
########
T 192.168.1.5:3821 -> 222.XXX.XXX.XX:21 [AP]
50 41 53 53 20 61 34 33 66 35 68 37 71 0d 0a PASS a43f5h7q..
#########exit
19 received, 0 dropped
Ya lo tenemos. Vemos en los datos ue nos muestra ngrep que se trata de un PASS de una conexión FTP (puerto 21).
Introducimos la opción -e. con esta opción se nos mostrará el resto de tráfico aunque no coincida con la cadena. También se mostrará la cadena:
ngrep -d1 -e -x PASS
interface: \Device\NPF_{024A36DD-4864-4F08-918F-2C5CBA916541} (192.168.1.0/255.255.255.0)
match: PASS
##########
T 192.168.1.5:3815 -> 192.168.100.241:143 [A]
######
T 192.168.1.5:3811 -> 192.168.100.241:143 [A]
#
################
T 192.168.1.5:3963 -> 192.168.1.239:445 [A]
#########
T 192.168.100.241:143 -> 192.168.1.5:3974 [AS]
#
T 192.168.1.5:3974 -> 192.168.100.241:143 [A]
##########
T 192.168.1.5:3972 -> 192.168.100.241:143 [A]
#
T 192.168.1.5:3974 -> 192.168.100.241:143 [A]
#########
T 192.168.1.5:3972 -> 192.168.100.241:143 [R]
##
T 192.168.1.5:3972 -> 192.168.100.241:143 [R]
#
T 192.168.1.5:3972 -> 192.168.100.241:143 [AR]
######
T 192.168.1.5:3974 -> 192.168.100.241:143 [R]
#
T 192.168.1.5:3974 -> 192.168.100.241:143 [AR]
##
T 192.168.1.5:3974 -> 192.168.100.241:143 [R]
##
T 192.168.1.5:3975 -> 192.168.100.241:143 [S]
#
T 192.168.1.5:3976 -> 192.168.100.241:143 [S]
#
#######
T 192.168.1.5:3978 -> 192.168.100.241:143 [S]
#
T 192.168.100.241:143 -> 192.168.1.5:3978 [AS]
#
T 192.168.1.5:3978 -> 192.168.100.241:143 [A]
###############
T 192.168.1.5:3978 -> 192.168.100.241:143 [AR]
T 192.168.1.5:3980 -> 213.192.241.34:21 [A]
####
T 192.168.1.5:3980 -> XXX.XXX.XXX.XXX:21 [AP]
50 41 53 53 20 61 34 33 66 35 68 37 71 0d 0a PASS a43f5h7q..
#############
T 192.168.1.5:3981 -> 213.192.241.34:36875 [S]
#
T 213.192.241.34:36875 -> 192.168.1.5:3981 [AS]
exit
387 received, 0 dropped
Analizando tráfico
Podemos analizar cierto tráfico. Por ejemplo el HTTP de la siguiente forma:
De la misma forma podemos analizar el tráfico icmp, tcp, ip, etc.
Siguiendo con HTTP. Vamos a capturar aplicando un patrón de búsqueda… por ejemplo las peticiones GET de la forma: «^GET .* HTTP/1.[01]«[] para capturar tantos las HTTP/1.0 como HTTP/1.1 Observad pues la notación que es para alternativa ó OR. Usaremos también el comando -q para que solo se muestren los datos relevantes referidos a la cadena a buscar:
En la anterior captura podemos afinar paraque solo nos muestre los datos referido a un derminado host o web:
ngrep -d1 -q "^GET .* HTTP/1.[01]" "host www.google.es"
Podemos añadir varios patrones de búsqueda pero, además, indicar como de van a «comportar». Vamos a buscar dos cadenas e indicamos que trate que patrón de búsqueda como una palabra y que ignore la capitalización de la expresión de la cadena e indicamos un puerto (21 ftp):
ngrep -d1 -w -i «user|pass» port 21
(192.168.1.0/255.2
55.255.0)
filter: (ip or ip6) and ( port 21 )
match: ((^user|pass\W)|(\Wuser|pass$)|(\Wuser|pass\W))
#########
T 192.168.1.5:4761 -> 213.192.241.34:21 [AP]
USER alfon..
##
T 192.168.1.5:4761 -> 213.192.241.34:21 [AP]
PASS alfonalfon..
#
T 213.192.241.34:21 -> 192.168.1.5:4761 [AP]
230 User abance logged in…
###
Todo lo que hemos visto hasta ahora lo podemos aplicar a SMTP, y cualquier otro servicio.
Patrones Hexadecimales.
Con la opción -X podemos aplicar patrones hexadecimales:
ngrep -d1 -x -q -X «0x6e617573636f70696f2e6e697265626c6f672e636f6d»
Patrones y protocolos.
Aplicamos búsqueda de patrones a un solo protocolo. Por ejemplo, si queremos capturar tráfico icmp del tipo Echo Request y Response.
C:\wd>ngrep -d1 -q «abcd» icmp
(192.168.1.0/255.2
55.255.0)
filter: (ip or ip6) and ( icmp )
match: abcd
I 192.168.1.5 -> 192.168.1.10 8:0
….abcdefghijklmnopqrstuvwabcdefghi
I 192.168.1.10 -> 192.168.1.5 0:0
….abcdefghijklmnopqrstuvwabcdefghi
I 192.168.1.5 -> 192.168.1.10 8:0
….abcdefghijklmnopqrstuvwabcdefghi
I 192.168.1.10 -> 192.168.1.5 0:0
….abcdefghijklmnopqrstuvwabcdefghi
I 192.168.1.5 -> 192.168.1.10 8:0
….abcdefghijklmnopqrstuvwabcdefghi
I 192.168.1.10 -> 192.168.1.5 0:0
….abcdefghijklmnopqrstuvwabcdefghi
Otro ejemplo para tcp:
ngrep -d1 -i -q «user-agent» tcp port 80
Otras opciones.
Podemos decirle a ngrep que capture solo un -n numero_de_paquetes y una cantidad de bytes que especificaremos con el snaplen o -s:
ngrep -d1 -n5 -s200 -W byline port 80
Hemos visto la opción -W byline. Pero que significa esto. Con -W tenemos varias formas de miostrar datos:
- normal por defecto
- byline corta los datos mostrados a un salto de línea
- single no corta los datos mostrados. Muestra en una sola línea excepto las IP y cabeceras de información.
- none no corta los datos mostrados. Muestra en una sola línea
Resúmo a continuación otras opciones importantes de ngrep:
- -v solo muestras los paquetes no coincidentes con el patró de búsqueda
- -t imprimir las marca de tiempo
- -c muestra resultoados dependiedo de un número de ancho de la consola. Depende del modeo establecido en -W:
T 209.85.227.105:80 -> 192.168.1.5:4926 [A]
………..:.v.:…
…d…o.h*.{.8…z.> ……e……..O..k~l……v…cR…B..`g.
M>…r….S..?L…#..N.:.m4..j.k.!….,.XJ…O9.d
#
T 209.85.227.105:80 -> 192.168.1.5:4926 [AP]
.’0…YHW.&fI)P…E..q…~..p.O..DT1jy..?.ym.!….nh.,.3….Mv…f{F..]..4.^’D?.
…..b#d…..=.._.)….G.rA.H.H.cHle….!………..6..i.s./-T-y..
##
T 209.85.227.105:80 -> 192.168.1.5:4926 [A]
…….%P.2….rE.2J.0…….v..Xf…B……K..pI.Xq….d..mg..\….c._..`>…..
up.$.K..\D……;..a….l..b.3.i..G…:.3″|..N…;PrC\.E,.{.B..S..
- –F lee archivos del tipo BPF.
- -l lee archivos del tipo .pcap
- -O escribe los datos en archivo .pcap
Como simpre iré actualizando el artículo (y avisando) con datos y ejemplos que me parezcan interesantes.
hola Alfon, «pequeña» pero grande y potente a la vez herramienta, enhorabuena por el post, como siempre muy ilustrativo 😉
Gracias Dabo. Estoy preparando ahora un artículo que seguro te gustará. La idema me la dió una de tus entradas referente a Nmap.
Ya te he leído, está genial -;)
Gran aporte mil gracias