Escribió Francisco Javier un artículo muy interesante llamado SQL Injection, ¿te han vacunado? donde veíamos la conocida herramienta sqlmap. Esta herramienta tiene muchas opciones y todas ellas muy interesantes, de modo que continuemos profundizando en ellas.
El escenario de pruebas
Para probar la herramienta he elegido el entorno de pruebas DVWA (Damn Vulnerable Web Application).
La instalación del entorno es bastante sencilla y consiste en descargar el ZIP desde su página Web y requerirá que tengamos PHP y MySQL. Tenéis en este enlace un tutorial con el paso a paso de su instalación.
Esta aplicación Web permite seleccionar el nivel de dificultad al que nos queremos enfrentar desde su apartado DVWA Security, de este modo podemos ajustar el retor a un mayor o menor nivel y así ir afinando nuestras habilidades. En nuestro caso la definiremos en nivel medio para las pruebas que queremos realizar con sqlmap:
Reuniendo información antes de ejecutar la prueba
Una vez configurada la aplicación DVWA, veremos que para acceder es necesario rellenar un formulario, los credenciales de acceso son usuario admin y contraseña password:
Si utilizamos un componente como Web Developer Tools en Mozilla podremos ver las cookies que nos ha establecido el servidor Web al iniciar sesión:
Una vez dentro nos dirigiremos a la sección de SQL Injection y a nada que realicemos alguna prueba veremos que este nivel es fácilmente explotable:
Utilizando la técnica de identificación de columnas basada en ORDER BY veremos que la consulta que se está realizando internamente espera 2 columnas:
Ya con el conocimiento del número de columnas podemos intentar la explotación basada en UNION para obtener información por ejemplo del usuario que ejecuta las consultas y la base de datos a la que se conecta:
Continuando la explotación con sqlmap
Llegados a este punto hemos reunido la siguiente información:
- Tenemos un motor de base de datos MySQL
- Estamos almacenando las cookies
- PHPSESSID (gestiona la sesión que tenemos iniciada)
- security (gestiona el nivel de seguridad configurado en la aplicación)
- El parámetro id es vulnerable a SQL Injection y se puede explotar utilizando la técnica UNION query
- La base de datos a la que se conecta la aplicación se llama dvwa
- El usuario que realiza las consultas SQL es root@localhost
Con toda esta información podemos afinar la explotación utilizando sqlmap y obtener de forma muy rápida el listado de tablas:
Los detalles de este comando son los siguientes:
- --cookie permite establecer los parámetros y valores que queremos enviar en la cabecera HTTP Cookie
- -p permite indicar el parámetro sobre el que se quiere testear la inyección
- --dbms permite establecer el motor de base de datos para evitar pruebas sobre otros motores
- --technique permite indicar la técnica de explotación: Boolean-based, Error-based, Union, Stacked querys, Time-based. Tenéis más información en su página de man.
- -D indica la base de datos que queremos analizar
- --tables para enumerar las tablas
Nota: Como ya conoceréis la potencia de sqlmap imaginaréis que toda esta información que hemos obtenido de forma manual se podría haber conseguido directamente con la herramienta, sin embargo es importante que seamos cuidadosos y en todo momento controlemos las técnicas que empleamos ya que podríamos dejar la aplicación analizada en un estado inconsistente.
El resultado del comando anterior nos devolverá una enumeración de las tablas:
De modo que continuando con el ejercicio, podríamos realizar un dump de la tabla users utilizando el siguiente comando:
Y en este punto también veremos algo interesante de la herramienta, ya que detectará los hashes de las contraseñas que hay en la tabla y nos ofrecerá realizar un ataque basado en diccionario para romperlos:
Dándonos en este caso un resultado perfecto:
Otras pruebas más allá del escenario DVWA
La siguiente prueba de concepto la realizaré sobre una aplicación Web hecha a medida ya que DVWA no es vulnerable a la explotación que voy a mostrar sin embargo algún escenario al que nos enfrentemos sí podría serlo.
Una vez hayamos detectado un parámetro vulnerable a SQL injection y si los permisos del motor de base de datos y el sistema de ficheros no están bien configurados podríamos incluso llegar a conseguir una shell con el siguiente comando:
Nos solicitará algo de información adicional con el fin de crear la sentencia SQL que nos devolverá una shell:
Seguir este proceso nos devolverá la shell:
Y por ir finalizando la cantidad de posibilidades que nos ofrece la herramienta, no olvidemos que podemos integrarla con nuestra instalación de Tor utilizando el siguiente comando: