前两期我们已经讲了SQL注入的原理和手工注入方法。但经过仔细学习后你会发现:一个URL可能存在多个注入点——GET/POST参数、Cookie、User-Agent等HTTP头,而且注入手法大同小异。 如果只对付单个网站、单个参数,手工还行;但在真实渗透测试中,往往面临几十上百个URL,每个URL又有多个参数,时间有限,根本没法挨个手工测试。 这时候就需要自动化工具——SQLmap。
一、SQLMap介绍及其与手工注入的优劣势和区别
如果把sql注入的过程比喻为钓鱼的话,作为一名优秀的钓鱼大师的我们必须知道这两种方法的区别和对比
手工SQL注入就像一根鱼竿、一条鱼线、一枚鱼钩。 你要了解这片水域(数据库)的深浅、鱼(数据)的习性,自己挂饵、抛竿、观察浮漂的细微动静。每钓一条鱼,都要耐心等待、调整手法。 优点:精准、灵活——遇到大鱼(复杂WAF/特殊过滤),你能慢慢遛鱼,不惊动整片水。 缺点:慢,一天可能只钓几十条;而且如果鱼塘很大(几十个参数/URL),手会断。
SQLmap就像一张大型渔网+声呐探测器。 你设定好区域(目标URL/参数),启动机器,它会自动扫描整片水域,把可能藏鱼的地方全部过一遍。几分钟就能捞出成百上千条鱼,还会自动分类(库→表→列→数据)。 优点:快、自动化,适合大规模捕捞(渗透测试中多个站点)。 缺点:不够精细——遇到鱼网兜不住的“狡猾大鱼”(特别定制的WAF、非标准响应),它可能直接放弃或狂报错,这时候还是得换成鱼竿(手工)。
SQLmap 是 Python 编写的开源自动化 SQL 注入工具,支持 MySQL、Oracle、SQL Server、PostgreSQL 等主流数据库,可自动检测并利用 SQL 注入漏洞,完成数据枚举、文件读写、权限提升等操作。
支持注入类型:布尔盲注、时间盲注、报错注入、UNION 查询、堆叠查询、带外注入。
二、如何获取SQLMap工具 ONE-FOX工具箱下载
这里就要向大家推荐一个工具包了—ONE-FOX工具箱 里面涵盖了大量的渗透测试工具,我们可以从官网进行下载,下载后就可以在里面看见SQLMap工具了,这面已经把下载链接的地址放在下方了,大家可以自行查看下载使用。可能工具箱版本会有很多不同和不一样,但不要慌,内部工具都是大差不差的。
天狐渗透工具箱 · 社区版 V4.0 – ONE-FOX安全团队
下载并解压后,在对应的功能分类下(通常在 “Web渗透”或“SQL注入” 分类中),你会看到 SQLMap 的图标。

打开就可以使用SQLMap了,因为SQLMap是用python来进行编写的一个工具包,所以需要添加python环境变量
三、SQLMap的使用
相比于实打实的手工SQL注入,当一个脚本小子(这里不是贬义,指善用工具的初学者)确实不需要记住那么多SQL语法和数据库函数,也不需要深究每个Payload的原理。 你只需要知道这几条命令是干什么的、怎么组合、往哪里填,就能快速完成一次注入测试。
1.打开后我们输入:python sqlmap.py来进行sqlmap主程序的运用,你可以把这句命令理解为SQLmap的开机键,来进行sqlmap是否安装成功的的尝试
python sqlmap.py

2.输入后我们可以输入:python sqlmap.py –u "url"来进行SQLMap的使用
对于不同的场景和使用范围我已经整理成表大家可以进行自己搭配来使用啦
四、SQLMap指令速查
目标指定类(指定扫描对象)
| -u "url" | 指定目标 URL(GET 请求注入点) | 单个 GET 请求注入测试 |
| -m urls.txt | 批量扫描文件中的多个 URL | 批量站点注入检测 |
| -r request.txt | 读取抓包文件(支持 POST / 复杂请求) | POST 请求、带自定义头的注入 |
| –cookie="xxx" | 携带 Cookie 进行注入 | 需要登录态的页面注入 |
| -D 数据库名 | 指定要操作的数据库 | 已知数据库名时定向脱库 |
| -T 表名 | 指定要操作的表 | 已知表名时定向脱库 |
| -C 字段名 | 指定要操作的字段 | 已知字段名时定向脱库 |
信息探测类(收集数据库 / 服务器基础信息)
| -a | 一次性获取所有信息(用户、版本、权限等) | sqlmap -u "xxx" -a |
| –current-user | 查看当前数据库用户 | sqlmap -u "xxx" –current-user |
| –is-dba | 判断当前用户是否为数据库管理员 | sqlmap -u "xxx" –is-dba |
| –users | 列出所有数据库用户 | sqlmap -u "xxx" –users |
| –privileges | 查看用户权限 | sqlmap -u "xxx" –privileges -U root |
| –passwords | 导出用户密码哈希值 | sqlmap -u "xxx" –passwords |
| –hostname | 获取服务器主机名 | sqlmap -u "xxx" –hostname |
| –statements | 查看正在运行的 SQL 语句 | sqlmap -u "xxx" –statements |
数据导出类(脱库,提取数据)
| -b | 获取数据库版本 | sqlmap -u "xxx" -b |
| –current-db | 查看当前使用的数据库 | sqlmap -u "xxx" –current-db |
| –dbs | 列出所有数据库 | sqlmap -u "xxx" –dbs |
| –tables | 列出目标数据库的所有表 | sqlmap -u "xxx" -D 库名 –tables |
| –columns | 列出目标表的所有字段 | sqlmap -u "xxx" -D 库名 -T 表名 –columns |
| –dump | 导出表中数据(脱库核心) | sqlmap -u "xxx" -D 库名 -T 表名 –dump |
| –start/–stop | 限制导出的行范围 | –dump –start 1 –stop 10 |
| –search | 搜索指定的库 / 表 / 字段 | –search -T "user" |
| –tamper | 使用脚本绕过 WAF / 防火墙 | –tamper=space2comment.py |
绕过防护类(对抗 WAF、防火墙、安全策略)
| –batch | 自动回答所有交互问题,无需手动确认 | 几乎所有场景都建议加,避免中途卡壳 |
| –method=GET/POST | 指定请求方式 | 非默认请求方式时使用 |
| –random-agent | 随机生成 User-Agent,避免被识别为工具 | 建议添加,降低被拦截概率 |
| –user-agent="xxx" | 自定义 User-Agent | 绕过特定 UA 检测 |
| –referer="xxx" | 自定义 Referer | 绕过 Referer 校验 |
| –proxy="http://127.0.0.1:8080" | 通过代理(如 BurpSuite)抓包调试 | 本地调试、流量分析 |
| –threads 10 | 设置并发线程数(1-10) | 推荐–threads 5,平衡速度和稳定性 |
| –level=1~5 | 测试等级,等级越高测试越全面 | 一般用–level=2,复杂场景可到 3 |
| –risk=0~3 | 风险等级,等级越高测试越激进 | 一般用–risk=1,避免误报或破坏数据 |
五、使用指南及其注意事项
你现在可以拿着这几条命令,去合法的靶场(如sqli-labs、DVWA、bWAPP)练手。遇到WAF拦了或者跑不出来,别急着放弃——回去翻前两期的手工注入文章,理解原理后再调整参数(比如换tamper、改level)在进行合适的调整
国内《网络安全法》明确禁止未经授权的注入测试。 千万不要对未授权的网站直接跑 sqlmap –os-shell,哪怕是 –dbs 也会留下大量日志,可能触发对方防守方告警,严重的话会涉及法律责任。 推荐合法练习环境
记住!!!最聪明的钓鱼佬,不是只会撒网,也不是只拿一根竿,而是知道什么时候该下网,什么时候该换竿。 先用SQLMap批量探测,锁定可疑目标;再用手工注入精准打击。两者结合,效率与深度兼得——这才是渗透测试的正确姿势。
关于SQL注入篇章已经全部结束,无论是原理还是手工注入的主要命令还是SQLMap的使用,都已经用三章的内容帮您过完,接下来的探索需要靠您自己了,加油大黑客
下一篇章章预告:反序列化
重点:本文为个人学习分享,可能存在不严谨之处,欢迎指正本内容仅用于合法安全学习与漏洞防护,未经授权不得对任意网站进行注入测试,遵守网络安全相关法律法规。




