En la entrada anterior, se hablo un poco sobre una aplicación vulnerable incluida en Dojo llamada HacMe Casino, se realizo un proceso de recolección de información muy rápido (de hecho, insuficiente, pero muy ilustrativo) para determinar la plataforma utilizada por la aplicación y se encontró una posible vulnerabilidad de tipo SQL Injection, en esta entrada, se utilizarán herramientas tales como SQLMap para detectar y explotar otras fallas de seguridad encontradas en esta aplicación. Cabe anotar, que en esta entrada y en la próxima, se asumirá que el enfoque seguido es el de Caja Negra es decir, que toda la información será extraída sin disponer del código fuente de la aplicación, en el caso contrario, se utilizaría un enfoque que Caja Blanca en tales casos, el pentester cuenta con el código fuente de la aplicación y en consecuencia podrá realizar un análisis mucho más profundo de las funciones del sistema. Evidentemente, desde el punto de vista de la seguridad ofensiva ambos enfoques son importantes, pero realizar pruebas de caja negra, permite de alguna forma, ponerse en el lugar de un atacante, el cual necesita recolectar toda la información que pueda para entender el sistema y en la mayoría de casos no cuenta con el código fuente. A menos claro, de que la aplicación objetivo sea opensource, en tal caso podría disponer también del código fuente y realizar, del mismo modo, pruebas de caja blanca.

Recolección de Información con SQLMap

Aunque en este blog no se han escrito artículos sobre SQLMap, existen numerosos recursos en internet que mencionan sus funcionalidades y se ha convertido en una herramienta casi que imprescindible para la ejecución de pruebas de seguridad en aplicaciones web. Se trata de una herramienta que cuenta con una buena cantidad de opciones y que permite explotar vulnerabilidades de SQL Injection sobre motores de bases de datos tan populares como MySQL, Oracle, SQL Server o Postgres. Puedes encontrar más información en: http://sqlmap.org/

Ahora bien, retomando la publicación anterior, hemos encontrado una posible vulnerabilidad del tipo SQL Injection en la página de login, dicha vulnerabilidad, al estar relacionada con el proceso de login puede llevar a un Bypass Authentication que si bien es fácilmente reproducible, puede ser también de gran ayuda para recolectar información sobre el sistema vulnerable, información que puede darnos la llave a muchas puertas y aunque HacMe Casino es una aplicación deliberadamente insegura, las herramientas que pueden usarse contra esta herramienta al igual que las técnicas de ataque empleadas, son más o menos un procedimiento bastante común y estándar para muchos de los atacantes que andan por ahí.

El formulario vulnerable se encuentra en “ http://192.168.1.41:3000/account/login” y los parámetros que utiliza son “user_login”, “user_password”, “x”, “y”. Estos parámetros son enviados en el cuerpo de la petición utilizando el método HTTP Post, aunque estos parámetros no viajan en la URL (método GET) es bastante sencillo descubrirlos utilizando herramientas como Burp Proxy, numerosas extensiones de Firefox como Live HTTP Headers o Tamper Data. En fin, es relativamente fácil capturar los parámetros que viajan entre cliente y servidor. En este punto nos interesa el parámetro user_login, dado que es probable que sea un parámetro inyectable. De este modo, podemos comenzar a utilizar SQLMap para determinar si dicha página es vulnerable y de ser así, proceder a extraer información. Para ello se emplean las siguientes opciones de SQLMap:

-u / –url: Permite indicar la URL objetivo.

–data: Permite especificar valores a parámetros que deben viajar por POST.

–level: Permite indicar el nivel de pruebas a ejecutar. (entre 1 y 5, siendo 5 el valor más alto y en el que se incluyen más pruebas. El valor por defecto es 1).

Con estas sencillas opciones, es posible ejecutar SQLMap contra el objetivo y tratar de extraer la mayor información posible

./sqlmap.py -u http://192.168.1.41:3000/account/login –data=»user_login=adastra» -v 2 –level=5

Después de ejecutar el comando anterior contra HacMe casino, los resultados más relevantes pueden apreciarse en la siguiente imagen:

sqlmap1

Con los resultados entregados por SQLMap, ahora sabemos que se trata de una base de datos SQLite y además hemos confirmado que el formulario de login es vulnerable a Blind SQL Injection dado que el parámetro user_login ha resultado ser inyectable.

Ahora viene el momento divertido en el que podemos comenzar a extraer información de la base de datos. Para este proposito SQLMap cuenta con un listado de opciones muy interesante que permite, entre otras cosas, listar nombres de esquemas de bases de datos, tablas e incluso generar una shell sobre el sistema objetivo con la cual se podrán ejecutar comandos. Algunas de estas opciones son:

–dbs: Permite enumerar los esquemas de bases de datos existentes el motor en ejecución del objetivo.

–tables: Permite listar las tablas de un esquema de base de datos concreto. (Suele usarse con la opción -D la cual permite indicar que esquema de base de datos utilizar).

–columns: Lista las columnas de una tabla determinada. Suele utilizarse

–dump: Permite extraer la información contenida en una tabla concreta del objetivo (Suele usarse con la opción -T la cual permite indicar que tabla utilizar y la opción -D para seleccionar el esquema de base de datos.)

–dump-all: Permite hacer la extracción de los registros de todas las tablas.

-b / –banner: Enseña el banner de la base de datos del objetivo.

–current-user:Enseña el usuario utilizado para ejecutar consultas en la base de datos.

–current-db: Enseña el esquema de base de datos utilizado por el objetivo (aplicación web)

–schema: Enseña los esquemas disponibles en la instancia de base de datos.

–all: Ejecuta todas las opciones de enumeración listadas anteriormente.

La opción más completa para realizar todas las pruebas de enumeración disponibles en SQLMap contra un objetivo vulnerable es –all. La siguiente imagen enseña los resultados contra HacMe Casino.

sqlmap2

Como puede apreciarse, hay mucha información que no es posible extraer, principalmente porque no es soportada por SQLite, el cual es un motor de bases de datos muy simple y liviano, utilizado principalmente para proyectos pequeños que no necesitan un modelo de datos relacional como el caso de bases de datos mucho más robustas y potentes, como por ejemplo Mysql, Oracle, SQLServer o PostgreSQL.

Aunque no sea posible enumerar demasiada información, hemos conseguido determinar que la vulnerabilidad es explotable y que puede brindar un punto de acceso valido a la aplicación, lo cual en la mayoría de los casos es más que suficiente.

Por otro lado, también es importante resaltar que SQLMap no solamente permite enumerar información de la base de datos, sino que también permite generar una shell sobre el sistema objetivo y ejecutar comandos contra un objetivo utilizando TOR (esto lo explicaré en otra publicación). Sin embargo, desafortunadamente en el caso de Hacme Casino, al utilizar SQLite como base de datos, no es posible utilizar características como la generación de una shell, dado que el motor es tan simple que no soporta la ejecución de comandos del sistema operativo. Las opciones utilizadas para tal fin son: –os-shell y –os-pwn la última opción permite generar una shell independiente del interprete del sistema operativo del objetivo, pudiendo utilizar meterpreter o VNC.

sqlmap3

Tal como se ha mencionado, no es posible ejecutar comandos por medio de SQLite y la imagen anterior enseña un mensaje de error indicando este hecho, sin embargo la vulnerabilidad descubierta es suficientemente interesante por si misma, ya que indica que es posible saltarse el sistema de autenticación y acceder al sistema como alguien más, tal como enseña las siguientes imágenes.
hacmecasino1

hacmecasino2
Ahora podemos jugar en el nombre de andy_aces sin tan siquiera conocer su password. Pero aquí no termina, en una próxima entrada hablaré sobre algunas otras vulnerabilidades existentes en Hacme Casino y formas de explotarlas.