Hackear un Moodle con Network Packet Manipulation

Estándar

El siguiente ejercicio trata de explicar cómo se puede hackear un servidor Moodle mediante la utilización de la técnica de ataque de Network Packet Manipulation, con la que se pueden modificar las consultas aMySQL al vuelo cuando las conexiones a la base de datos no están cifradas. Es bastante común que la aplicación web y la base de datos que utiliza dicha aplicación web estén instaladas en la misma máquina, sí, pero en muchos caso – sobre todo en entornos corporativos – estas dos capas están separadas.

Lo primero que se debe hacer es analizar las consultas de Moodle y conocer un poco como gestiona éste su base de datos. En este caso el proverbio “ten cerca a tus amigos para cerca aún a tus enemigos” recobra un poco valor a la inversa, es decir, tenemos que estar lo mas cerca posible de nuestra víctima en el sentido de que debemos conocerla a la perfección para poder llevar a cabo el ataque de forma sencilla y con éxito. En el escenario para las pruebas de concepto están como sigue el esquema siguiente:

Para ello se ha estudiado qué tablas hay en la base de datos que utiliza una aplicación Moodle y cuáles nos podrían interesar. Como en este caso queremos hacernos con el control del Moodle, lo que necesitaremos es saber dónde se aloja la información de los usuarios registrados en el sistema y de qué manera. Investigando un poco nos encontramos con que los usuarios se guardan en la tabla siguiente:

Una vez que se sabe qué tabla queremos adulterar debemos saber qué tipo de datos se guardan en ella, es decir, debemos conocer su esquema y qué columnas son las que nos interesan y cuáles no.  Se hacen resaltar los datos que quizás nos puedan interesar más, aunque podemos ver la cantidad de columnas que tienen la tabla que gestiona los usuariosen Moodle.

La tabla sigue a continuación con el resto de columnas menos relevantes a la hora de llevar a cabo el objetivo fijado. Se observa la cantidad de datos que puede llegar a guardar Moodle sobre los usuarios de su sistema, hasta 53 columnas que, en un ataque similar podrían modificar cualquier situación, dato personal o privilegio de un usuario.

Ahora que ya sabemos todo lo necesario sobre la tabla que queremos atacar, debemos analizar las consultas que realiza Moodle sobre su base de datos MySQL. Como podemos observar con el analizador de tramas de red Wireshark, el tráfico va en texto plano porque no estamos utilizando una conexión cifrada, por lo si utilizamos la técnica Network Packet Manipulation podremos modificar las consultas y tomar el control de la máquina.

El siguiente paso a realizar sería acceder al panel de control de Moodle y ver qué tipo de peticiones realiza cuando accedemos a la gestión de usuarios. Es decir, debemos entender el conjunto de consultas que realiza Moodle al SGBDR MySQLcuando creamos un nuevo usuario o modificamos el valor de alguno ya existente.

Se debe de analizar las peticiones minuciosamente para encontrar la consulta en la que se realiza la inserción del nuevo usuario ya que hay multitud de ellas en el intervalo de tiempo entre la conexión al servidor MySQL y la desconexión. La instrucción elegida para esta demo en cuestión es una query SQL del tipo INSERT INTO en la tabla mdl_user y se le pasan los parámetros correspondientes recogidos del formulario web rellenado. Podríamos haber utilizado cualquier otra y modificarla completamente, pero para este ejemplo vamos a usar directamente la de inserción de nuevos usuarios. Después de analizar bien las consultas damos con ella, y es la siguiente:

No cabe entera en la pantalla por lo que aquí se muestra en un editor de texto cualquiera para poder analizarla. Hay que recordar que son 53 columnas las que tiene la tabla y muchas de ellas están definidas como Not Null:

La idea principal es capturar un paquete, el cual sepamos que va a existir y modificar la consulta que lleva por la que nosotros queramos, por ejemplo una consulta UPDATE que permita modificar la contraseña o algún dato de un usuario existente con el fin de robar una cuenta.

Procedemos a ver como se podría cambiar cualquier dato de un usuario registrado en elsistema. Para realizarlo podemos crear filtros con Etterfilter. El primer filtro que se creará será el que nos posibilite cambiar la ciudad de un usuario registrado enMoodle – de forma análoga se podrá hacer para cambiarle la contraseña -. Para ello la sentencia que debemos tener en mente será:

“UPDATE mdl_user set city = ‘hack3d’ where username = ‘zweig’”

Antes de crear el filtro debemos hacer hincapié en que los paquetes enviados a MySQL tienen el campo llamado Packet_Length, que le indica al motor de MySQLcuántos bytes debe leer y ejecutar en la base de datos. Por lo tanto, debemos localizar la consulta que sepamos que va a realizar Moodle, la cual será nuestro objetivo a adulterar, y deberemos modificar también su Packet_Length con el tamaño de nuestra consulta.

La consulta que se ha elegido como objetivo para inyectar nuestra propia consulta es la siguiente, aunque después de un análisis de las consultas podríamos haber usado un montón más que se repiten cada vez que Moodle interactúa con su base de datos:

Se puede ver que su Packet_Length es de 43, el cual en hexadecimal es 2b. La consulta que queremos inyectar en el paquete es la siguiente:

UPDATE mdl_user set city = ‘hack3d’ where username = ‘zweig’

Esta consulta tiene un tamaño de 61, que en hexadecimal es 3d. Con toda esta información ya podemos pasar a elaborar el siguiente filtro:

El filtro detecta si el paquete esta destinado al puerto 3306, que es el que esta utilizando MySQL por defecto, luego decodifica el mensaje filtrando por la palabraSET SESSION. Una vez se cumplan estas dos condiciones, lo primero que hace es reemplazar el Packet_length,en el caso del paquete seleccionado es\x2b\x00\x00, por el tamaño de la que queremos inyectar, es decir\x3d\x00\x00. Después pasamos a modificar la ciudad de un usuario en concreto, al cual le pondremos como ciudad “hack3d”. De la misma forma que se puede hacer sobre ciudad lo podríamos hacer sobre cualquiera de las columnas de latabla mdl_user. Una vez que ya tenemos el filtro llega el momento de compilarlo mediante la instrucción:

etterfilter -o md.ef2 mdl.filter2

Antes de lanzarlo, podemos echar un ojo a la tabla en cuestión de la base de datos, para comprobar el valor que tiene la columna y poder verificar si el filtro ha tenido éxito o no en nuestra prueba:

Una vez que el filtro esta compilado llega el momento de usarlo con Ettercap para realizar el ataque de MiTM entre el servidor web donde corre Moodle y el servidor donde corre el SGBDR MySQL mediante la instrucción:

ettercap -T -q -i -F mdl.ef2 -M ARP

Ahora lo lanzamos el ataque y esperamos a que Moodle interactúe con su base de datos MySQL y listo.
Vemos como Ettercap ha detectado un paquete que cumple con condición que le pusimos en el filtro y ejecuta los dos reemplazos programados. Volvemos a mostrar la base de datos y observamos como la columna ciudad del usuario víctima ha sido cambiada.

Creación de un usuario en Moodle con Network Packet Manipulatrion
Una vez que ya hemos entendido los ataques podemos acabar por hackear el servidor. Para finalizar la prueba de concepto completamente nos crearemos un usuario de Moodle administrador a nuestros gusto. Para ello utilizaremos el siguiente filtro:
Se ha hecho de forma análoga al anterior, esta vez el tamaño de nuestra consulta es de 230, por lo tanto remplazaremos el tamaño del original por \x6e\x00\x00. Siguiendo todos los pasos anteriores (compilación del filtro y uso del mismo con Ettercap) podremos ver elresultado en la siguiente imagen, donde hemos obtenido un nuevo usuario llamado deadp00l con la contraseña hasheada. En este momento el pentester tendrá acceso al panel de Moodle con este usuario recién creado.
La conclusión final es que no solo es importante que el Moodle este debidamente fortificado en cuanto a los permisos de los usuarios dentro de la plataforma, sino que para casos en los que el escenario sea como el mostrado en esta prueba de concepto se deberán cifrar las consultas SQL que se realicen contra el SGBD, en este caso MySQL, de forma análoga a como se explicó en este artículo con WordPress, ya que si una persona con intenciones poco benévolas se cuela en medio de la comunicación todo el servidor Moodle podría quedar a su merced.

 

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s