sqlmap是一款开源的自动化SQL注入工具,它能够快速检测和利用SQL注入漏洞,获取数据库服务器的信息,sqlmap支持多种数据库,如MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等,并且提供了丰富的命令选项,以满足不同的渗透测试需求,以下将详细介绍sqlmap的常用命令及其使用方法,帮助用户更好地掌握这款工具。

sqlmap的基本命令格式为:sqlmap -u "URL" [选项]
。-u
用于指定目标URL,这是使用sqlmap时必须指定的参数。sqlmap -u "http://example.com/page.php?id=1"
将对指定的URL进行SQL注入检测,除了-u
,sqlmap还支持从文件中读取URL列表,使用-l
选项,例如sqlmap -l burp_log.txt
,其中burp_log.txt是Burp Suite导出的日志文件。
sqlmap提供了多种注入技术选项,用于指定注入的类型和方式,默认情况下,sqlmap会自动检测所有可用的注入技术,但用户也可以手动指定。--technique=B
表示仅使用基于布尔的盲注,--technique=E
表示仅基于错误注入,--technique=U
表示基于联合查询注入,--technique=S
表示基于时间盲注,--technique=T
是基于堆叠查询注入,用户可以通过组合这些技术来扩大检测范围,例如--technique=BE
表示同时使用布尔盲注和基于错误注入。
在获取数据时,sqlmap允许用户指定要获取的数据库信息。--dbs
用于列出所有数据库,--tables
用于列出当前数据库的所有表,--columns
用于列出指定表的所有列,--dump
用于dump表中的数据。sqlmap -u "http://example.com/page.php?id=1" --dbs
将列出目标服务器的所有数据库名称,如果要获取特定数据库的表,可以使用sqlmap -u "http://example.com/page.php?id=1" -D "database_name" --tables
,同样,获取特定表的列和数据可以使用sqlmap -u "http://example.com/page.php?id=1" -D "database_name" -T "table_name" --columns
和sqlmap -u "http://example.com/page.php?id=1" -D "database_name" -T "table_name" --dump
。
sqlmap还支持HTTP请求的调整,以适应不同的目标环境。--data
用于指定POST请求的数据,--cookie
用于指定Cookie值,--user-agent
用于自定义User-Agent,--proxy
用于设置代理服务器。sqlmap -u "http://example.com/login.php" --data="username=admin&password=123" --cookie="PHPSESSID=123456"
将对POST请求的登录页面进行注入检测,如果目标网站需要登录才能访问,可以使用--session
选项来保存和加载会话信息,例如sqlmap --session=session.txt
。

在获取数据时,sqlmap支持多种数据库指纹识别技术,可以自动识别目标数据库的类型和版本。--fingerprint
选项用于强制进行数据库指纹识别,例如sqlmap -u "http://example.com/page.php?id=1" --fingerprint
,sqlmap还支持自定义请求头和延迟请求,以避免被WAF(Web应用防火墙)检测。--headers
用于添加自定义请求头,--delay
用于设置请求之间的延迟时间,--randomize
用于随机化参数值。
sqlmap还提供了多种操作系统命令执行选项,如果目标存在漏洞,可以通过--os-shell
选项获取一个交互式的shell。sqlmap -u "http://example.com/page.php?id=1" --os-shell
,还可以通过--os-pwn
选项获取一个Meterpreter会话,--os-bof
用于堆缓冲区溢出攻击,--file-read
用于读取服务器上的文件,--file-write
用于写入文件到服务器。sqlmap -u "http://example.com/page.php?id=1" --file-read="/etc/passwd"
将读取服务器上的/etc/passwd文件。
sqlmap还支持批量测试和结果存储。-m
选项用于从文件中读取多个URL进行批量测试,-o
用于开启所有优化选项,--batch
用于自动回答所有问题,--flush-session
用于清除当前目标的会话数据。sqlmap -m url_list.txt -o --batch
将对url_list.txt中的所有URL进行批量测试,sqlmap还支持将结果保存到文件中,使用-r
选项读取请求文件,-s
选项保存会话文件,--output-dir
选项指定输出目录。
以下是一些常用sqlmap命令的总结表格:

选项 | 描述 |
---|---|
-u "URL" |
指定目标URL |
-l "burp_log.txt" |
从Burp日志文件中读取目标 |
--technique=B/E/U/S/T |
指定注入技术(布尔/错误/联合/时间/堆叠) |
--dbs |
列出所有数据库 |
--tables |
列出当前数据库的所有表 |
--columns |
列出指定表的所有列 |
--dump |
Dump表中的数据 |
-D "db_name" |
指定数据库名 |
-T "tbl_name" |
指定表名 |
-C "col_name" |
指定列名 |
--data="param=value" |
指定POST数据 |
--cookie="cookie" |
指定Cookie值 |
--user-agent="UA" |
自定义User-Agent |
--proxy="http://proxy:8080" |
设置HTTP代理 |
--session="session.txt" |
保存/加载会话 |
--fingerprint |
强制数据库指纹识别 |
--headers="Header: Value" |
添加自定义请求头 |
--delay=5 |
设置请求延迟(秒) |
--os-shell |
获取交互式shell |
--file-read="/etc/passwd" |
读取服务器文件 |
-m "url_list.txt" |
批量测试URL列表 |
-o |
开启所有优化选项 |
--batch |
自动回答所有问题 |
--output-dir="/path/to/output" |
指定输出目录 |
在使用sqlmap时,需要注意以下几点:确保你有权对目标进行测试,未经授权的测试是非法的,sqlmap可能会对目标服务器造成较大负载,建议在非生产环境中使用,sqlmap的输出结果非常详细,建议仔细分析结果,避免误判。
相关问答FAQs:
-
问题:sqlmap如何绕过WAF(Web应用防火墙)?
解答:sqlmap提供了多种绕过WAF的选项,例如使用--randomize
随机化参数值,--delay
设置请求延迟,--headers
添加伪造的请求头,--proxy
通过代理发送请求,--tamper
使用脚本修改注入载荷。sqlmap -u "http://example.com/page.php?id=1" --tamper="space2comment"
会将空格替换为注释符号,以绕过基于空格的检测,还可以使用--hpp
选项启用HTTP参数污染,或--mobile
模拟移动设备请求来降低被WAF识别的概率。 -
问题:sqlmap如何处理需要登录的目标网站?
解答:sqlmap支持通过--cookie
、--user-agent
等选项模拟登录状态,也可以使用--session
保存和加载会话信息,首先手动登录网站并获取Cookie,然后使用sqlmap -u "http://example.com/protected_page.php" --cookie="PHPSESSID=123456"
进行测试,如果目标网站使用表单登录,可以通过--data
选项提交登录表单,例如sqlmap -u "http://example.com/login.php" --data="username=admin&password=123" --cookie-jar=cookies.txt
,并保存Cookie以便后续使用,还可以使用--update
选项更新会话信息,确保登录状态的有效性。