Buenas de nuevo a todos.
Como hace ya bastantes meses que se reportó el problema del SQLi en las versiones de Drupal de la 7x a la 7.32 y dado que no he visto como explotarlo en ningún blog (solo como funciona), al menos en Castellano, he decidido hacer una guía como acostumbro a hacer en este blog paso a paso, suponiendo que ya TODOS lo tienen que tener parcheado o actualizado.
Bien, lo primero sería montarnos un Drupal con una de las versiones vulnerables. No me voy a parar a explicar como montar Drupal ya que hay millones de manuales y es súper sencillo (en 4 minutos de reloj lo he montado yo).
Como decía, partimos de que ya tenemos montado Drupal en una máquina virtual, en mi caso en un Kubuntu (hay que probar todas las distros jeje) con XAMPP.
Una vez probado que funciona, lo siguiente es descargar el script en python que el Sr Stefan Horst - que es el mismo que reportó el error- creó en su día.
Para que nadie me pueda decir nada, no voy a poner el enlace, ya somos mayorcitos para hacer búsquedas en Google xD (y he dejado muchas pistas).
Desde la web del autor, nos deja seleccionar el código, así que, lo pegamos en un archivo y le damos permisos de ejecución.
sudo chmod +x drupal_sqli.py
sudo chmod +775 drupal_sqli.py
Hecho esto, vamos a ver las opciones que tiene.
python drupal_sqli.py
Ya tenemos claro las opciones que vamos a usar no?, os lo dejo a continuación.
python drupal_sqli.py -u patata -p patata -t http://192.168.1.62/drupal-7.31/
Como podemos ver, usamos el modificador -u seguido del usuario que vamos a crear, el modificador -p y la contraseña para ese usuario, y el modificador -t para poner la dirección IP de la web Drupal.
La salida que obtenemos es la siguiente.
Si vamos a la web y probamos ese usuario y su password creado, deberíamos ver esto.
Podemos observar que en la esquina superior derecha (marcado en rojo) un usuario llamado patata y, como decía Danito el otro día, os lo creéis, porque funciona! xD.
Para parchear este fallo en la propia web de Drupal, dejan un código que podéis implantar.
diff --git a/includes/database/database.inc b/includes/database/database.inc index f78098b..01b6385 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -736,7 +736,7 @@ abstract class DatabaseConnection extends PDO { // to expand it out into a comma-delimited set of placeholders. foreach (array_filter($args, 'is_array') as $key => $data) { $new_keys = array(); - foreach ($data as $i => $value) { + foreach (array_values($data) as $i => $value) { // This assumes that there are no other placeholders that use the same // name. For example, if the array placeholder is defined as :example // and there is already an :example_2 placeholder, this will generate
O directamente pasar a la versión 7.32 o superiores desde aquí.
Espero que os haya gustado la entrada, nos vemos por aquí.
Roberto García (@1GbDeInfo)