martes, agosto 31, 2021

on-the-fly: Cómo hackear MySQL con Network Packet Manipulation en 1 minuto

La semana pasada hablamos sobre la herramienta on-the-fly, en la que se ha estado trabajando con un enfoque basado en IoT, ICS y TI. La evaluación de estos entornos es, sin duda, algo interesante e importante para cualquier auditor. Disponer de una herramienta que pretende cubrir diferentes aspectos dentro de este campo, aunque aún le falte por cubrir algunos aspectos, es interesante.

Figura 1: on-the-fly: Cómo hackear MySQL con
Network Packet Manipulation en 1 minuto

La herramienta está disponible en su Github y puede ser descargada. Es una herramienta Open Source en la que su base es la colaboración de los usuarios y la creación de módulos que pueden ser ejecutados de forma simultánea a través del concepto del ‘job’.
También hemos hablado en el blog sobre la técnica de manipulación de paquetes o Network Packet Manipulation sobre diferentes entornos de prueba y el potencial de la técnica con algunos protocolos que siguen sin cifrarse por defecto. Empezamos hablando sobre cómo manipular paquetes ‘al vuelo’ con herramientas como Etterfilter, cómo hacerlo sobre un entorno para hackear Wordpress o para hackear Moodle y cómo hacerlo a través de netfilterqueue, modernizando el ataque y dando más flexibilidad al programador y al Ethical Hacker.

Cuando empezamos a desarrollar on-the-fly en el departamento de Ideas Locas se me ocurrió crear un módulo que permitiera apoyarse en el módulo de ARP Spoofing y poder manipular los paquetes MySQL que pasaran por la máquina. Dentro de on-the-fly hay diferentes secciones: spoofing, sniffer, manipulation, etcétera. La parte de manipulación son módulos pensados para visualizar el tráfico que pasa por nuestra máquina y poder manipularlo al vuelo. 

JL. Rambla, ampliado y revisado por Pablo González y Chema Alonso

Como ejemplo, en este artículo, veremos cómo funciona el módulo mysql_manipulation de on-the-fly. El módulo necesita que otro módulo proporcione el tráfico, para eso se utilizará el módulo de arp_spoof. El escenario es el siguiente:
  • Máquina Linux con una base de datos MySQL.
  • Cliente Windows (o cualquier sistema) que hará de aplicación web (o lo que sea) que pide datos a la base de datos. Nótese que aplicación y datos están separados.
  • Pentester con máquina Kali Linux y herramienta on-the-fly preparada.
  • El módulo de manipulación de MySQL lo que hará es estar preparado para que cuando se detecte una sentencia o palabra clave, se ejecute el código de sustitución y se cambie una sentencia por otra. Esto puede provocar la alteración de la tabla y los datos que hay en su interior.
ARP Spoof

Lo primero es ver la base de datos y alguna tabla que hay en el servidor. Desde la aplicación de la máquina Windows realizamos una consulta.

Figura 4: Consulta SQL a ejecutar

Como se puede ver, se hace una consulta a la tabla texto y se obtienen unos valores. Con el ataque de manipulación de paquetes, si se detecta un ‘Select’ o cualquier sentencia concreta ‘Select * from texto’, por ejemplo, se podría manipular la sentencia que le llega realmente a la base de datos para ejecutar. El potencial, como se puede ver es infinito.

Figura 5: Activación del arp_spoof

Ahora, preparamos el módulo arp_spoof. La configuración es sencilla, hay que indicarle el atributo ‘target’ y el atributo ‘gateway’. La interfaz de red por la que se realizará el ataque y si se quiere activar el reenvío de paquetes o no. Por otro lado, el atributo ‘verbose’ nos dará información sobre el envío de los paquetes ARP que se está haciendo como se ve en la Figura 5.

Figura 6: Ejecución de jobs

Una vez configurado y ejecutado se obtiene un ‘job’ en la aplicación. Ese trabajo es un hilo que está ejecutando la tarea del ARP Spoofing y nos permite poder configurar otros módulos por encima y trabajar de forma conjunta, como se hará a continuación. Si queremos eliminar un ‘job’ se puede hacer con la instrucción: jobs -k [ID del job]. Si queremos eliminar todos los ‘jobs’ se puede hacer con la instrucción: jobs -K (con mayúscula).

Figura 7: Envenenamiento de caché en Windows

A continuación, si la técnica funciona correctamente se puede ver en la Figura 7 cómo la caché ARP, tanto de la máquina Windows como la de Linux quedan envenenadas.

Figura 8: Envenenamiento de caché en Linux

Ya tenemos la primera parte hecha. El tráfico pasa por la máquina del pentester y ahora es cuando trabajaremos por encima con el módulo de manipulación. Recordemos que es un requisito que tenía el módulo de manipulación.

Manipulación MySQL

Ahora vamos a trabajar con el módulo mysql_manipulation. El módulo dispone de dos atributos, por lo que es muy sencillo de utilizar:
  • Query_modify: Este atributo indica la sentencia o palabra que se debe identificar para modificar la consulta. Es decir, si se configura con un ‘select’ por cualquier sentencia que pase por nosotros si ésta lleva un ‘select’ se bloquea y se modifica por la que nosotros queramos.
  • Query_spoof: Es la sentencia que queremos que se ejecute.
En la Figura 10, se puede ver cuál es actual estado de la tabla users. Lo que vamos a hacer es configurar el módulo mysql_manipulation para que cuando se detecte un ‘select’ (sea cuál sea) se cambie por un ‘insert into users (username,password) values (‘root’,’pwned’)'.

Figura 9: Configuración de la Manipulación de Paquetes

Nos podemos preguntar cómo sabemos los campos de una tabla. Gracias a que todo el tráfico pasa por nosotros, podemos utilizar el módulo sniff de on-the-fly para volcar todo el tráfico a un fichero y poder evaluar las peticiones y respuestas que ha tenido la máquina con la base de datos. De esta forma sencilla podríamos conocer el valor de diferentes tablas.

Figura 10: Configuración de la tabla de usuarios antes de la manipulación

En la imagen anterior se puede ver que hay tres usuarios en la tabla. Cuando ejecutemos el módulo y luego haya un ‘select’ que pasa por nosotros se cambiará dicha consulta por un ‘insert’ sobre la tabla users.

Figura 11: Tabla users después de la manipulación del paquete

En la imagen anterior se puede ver cómo se ha insertado un nuevo usuario en la tabla de users. Esto podría provocar que el pentester obtuviera acceso a la aplicación y poder avanzar su camino (entre otras muchas cosas). Puedes ver el ejemplo en este vídeo.

Figura 12: Demo de NPM con on-the-fly

Para ver las posibilidades de este módulo os dejamos un video que hemos creado y que se encuentra también disponible en el Github de la herramienta. Seguiremos contando más casos de uso de la herramienta y posibilidades de ésta, ya que el potencial que tiene es muy alto.
 
Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Figura 9: Contactar con Pablo González

No hay comentarios:

Publicar un comentario