Artículo · Ingeniería Inversa

Simple reverse ICMP Shell

EPElzer Pineda 3 min de lectura

Escenario para nuestra prueba de concepto

  • Maquina atacante — 192.168.4.12

 

  • Maquina victima- 192.168.4.7

Planteando el escenario para ejecutar nuestra revershell, tenemos un equipo al que ya tenemos acceso con un usuario que nos permitirá la ejecución del Reverse shell ICMP en powershell.

 

Antes de empezar a crear nuestra reverse Shell con ICMP, primero definamos el uso de este protocolo y porque es muy utilizado en el mundo de networking.

Internet Control Message Protocol (ICMP) es responsable de reportar errores a través de la generación y envío de mensajes a la dirección IP de origen cuando hay problemas de red que son encontrados por el sistema.  Los mensajes que genera la ICMP indican que no se puede acceder a un determinado gateway, router, servicio o incluso host que deba conectarse a Internet. Básicamente, el destinatario no puede recibir paquetes durante la transmisión. Cualquier dispositivo de red IP puede enviar, generar, recibir y procesar mensajes de error ICMP.

Durante nuestra fase de intrusión podemos encontrarnos con infraestructuras muy robustas, los administrados de redes pueden estar utilizando murallas de fuego perimetrales filtrando solo el tráfico especifico de entrada y salida con protocolos específicos. En estos ambientes es difícil lograr tener una reverse Shell con algún protocolo TCP. Sin embargo, podemos lograr tener una reverse Shell con UDP sea utilizando DNS o ICMP, con solo realizar nuestro ping en nuestro equipo objetivo podemos tener esa oportunidad de tener una reverse Shell ICMP.

 

Para esto utilizamos una herramientita llamada imcpsh, que nos va a permitir tener un Shell ICMP inverso. La principal ventaja sobre otras herramientas similares de código abierto es que no requiere privilegios administrativos para ejecutarse en la máquina objetivo.

 

Clonamos el repositorio de Icmpsh  https://github.com/inquisb/icmpsh  y nos encontramos que la herramienta la podemos ejecutar en Código C, Perl o Python.

Para que funcione correctamente tenemos que ignorar los echos del tráfico ICMP en nuestro equipo atacante. Ejecutamos el siguiente comando:

sysctl -w net.ipv4.icmp_echo_ignore_all=1

Para llevar acabo nuestra conexión solo necesitamos nuestra ip de origen y destino, en nuestro caso la dirección ip del equipo victima

  • 192.168.4.12 - maquina atacante
  • 192.168.4.7 – maquina victima

Ahora necesitamos crear nuestra reverse Shell ICMP en powershell, para esto utilizaremos una herramienta de nuestros amigos de hackplayer https://github.com/Hackplayers/ReverseShell, que podemos utilizar para facilitar el proceso de creación de un Shell inverso con diferentes cargas utilies dependiendo del interprete que soporte el servidor (Python, bash, perl, java, php o ruby).

 

Creamos nuestro Reverse Shell

NOTA: tener instalado powershell en linux .

 

 

Ejecutamos nuestro reverse Shell en nuestro equipo victima

 

  • Powershell -enc (ShellReverse)

Levantamos un tcpdump en nuestra interfaz de red en nuestro caso para eth0 y monitorear los paquetes de ICMP:

Miramos los resultados en icmpsh y tenemos nuestra ShellReverse atravez de icmp, que nos permite ejecutar comandos remotos en nuestro equipo víctima.

 

Conclusiones:

· ICMP nos abre la posibilidad de comprometer equipos que estén filtrados por algunos protocolos TCP.

· https://github.com/Hackplayers/ReverseShell podemos generar diferentes tipos de reverseshell para comprometer el equipo.

· Este es posible a https://github.com/inquisb/icmpsh.

· Si durante nuestra explotación encontramos como ejecutar comandos remotos utilizando una Shell en php, war, java, asp, etc; tendremos ventaja de ejecutar un reverse Shell ICMPSH.

 

¿Quieres aprender estas técnicas en profundidad?

Continúa tu ruta con Pentesting .

EP

Escrito por

Elzer Pineda

Consultor de seguridad, Pentester, Threat hunting, Desarrollo, AWS, SOC, Embajador de la Comunuidad Dojo