sqlmap下载和安装保姆级教程(附安装包)

介绍sqlmap

SQLmap 是一款开源、跨平台的自动化 SQL 注入检测和利用工具,被誉为渗透测试领域的"瑞士军刀"。它由 Python 语言开发,能够极大地简化手动进行 SQL 注入测试的复杂流程,是网络安全从业者进行安全评估和漏洞验证的行业标准工具之一。

🎯 核心功能

SQLmap 的功能非常强大,覆盖了从漏洞发现到利用的完整链条:

  • 自动化漏洞检测:能够自动识别并利用多种类型的 SQL 注入漏洞,支持 GET、POST、Cookie、HTTP 头部等多种注入点。
  • 数据库指纹识别:自动探测后端数据库的类型和版本,支持 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Access 等多种主流数据库。
  • 数据枚举与提取:可以枚举数据库名、表名、字段名,并直接导出(Dump)表中的敏感数据,如用户名和密码。
  • 高级权限利用 :在条件允许的情况下,支持获取数据库管理员权限、读取或写入服务器文件,甚至通过 --os-shell 参数获取目标操作系统的命令行 Shell。
  • WAF 绕过:内置了超过 60 种 Tamper 脚本,可以对注入 Payload 进行混淆和编码,以尝试绕过 Web 应用防火墙(WAF)的防护。

下载

1.本文附安装包

2.官网:https://sqlmap.org/

3.GitHub 仓库下载源码压缩包,解压后即可使用

4.使用 Git 命令克隆项目:git clone https://github.com/sqlmapproject/sqlmap.git

安装sqlmap

一、配置python环境(有就不用)

  1. 下载解压 sqlmap 文件,双击 python-3.11.0b1-amd64.exe 启动安装,出现下图所示界面,勾选 "Add_Python 3.11 to PATH",点击 "Cancel":

注意,勾选 "Add_Python 3.11 to PATH",会自动配置环境变量。

  1. 右击此电脑,点击 "属性":

  2. 点击 "高级系统设置":

  1. 点击 "环境变量":
  1. 在 "系统变量" 中选择 "Path",点击"编辑":
  1. 点击 "编辑文本":
  1. 在 "变量值" 后,把自己安装的 python 路径,复制粘贴进去就可以了:

注意:在粘贴路径 "D:\install\python" 时,前面要加上英文输入法下的 ";"。

  1. 配置完整,Win + R ,用 cmd 调出命令行,输入 python ,出现版本号及其他信息就安装完成

二、开始"整"sqlmap

(一)在文件夹找到python文件夹

1.上面那个界面既然你已经处于 >>> 提示符下,直接输入以下代码并回车,即可看到确切的路径:

复制代码
import sys
print(sys.executable)
  • 解释 :这条命令会直接打印出当前正在运行的 Python 解释器文件的完整路径(例如 C:\Users\...\Python310\python.exe)。
  • 注意 :如果你只想看文件夹路径而不是文件路径,可以输入 print(sys.prefix)

2.使用命令行 where 命令(最快捷)

如果你想退回到普通的命令提示符(C:\Users\...>)来查看,可以按以下步骤操作:

  1. 在当前的 >>> 后面输入 exit() 并回车,或者按 Ctrl + Z 然后回车,退出 Python 环境。

  2. 回到黑色窗口的普通命令行模式后,输入以下命令并回车:

    复制代码
    where python
  3. 系统会直接列出 python.exe 所在的完整路径。

(二)存放sqlmap代码

1.在 python 目录下,新建一个 sqlmap 文件夹:

2.把 sqlmap的这个.zip 文件解压到 sqlmap 文件夹下:

(三)命令行测试

1.在 sqlmap 文件夹中打开控制台(在地址栏输入 cmd 回车):

2.输入命令 python sqlmap.py 或 python sqlmap.py -h ,显示下图所示界面,安装成功

安装好了sqlmap,能怎么使用

既然你已经安装好了 SQLmap,并且之前成功配置了 Python 环境,那么使用它非常简单。SQLmap 是一款命令行工具,没有图形界面,主要通过**命令提示符(CMD)**来操作。

以下是保姆级的使用教程,带你从启动到完成一次基础的数据库检测。

🛠️ 第一步:如何启动 SQLmap

  1. 打开命令提示符(CMD)。
  2. 使用 cd 命令进入你解压 SQLmap 的文件夹。
  • 例如:cd D:\Tools\sqlmap(根据你实际安装的路径修改)
  1. 输入以下命令验证是否启动成功:

    复制代码
    python sqlmap.py --version

    如果显示了版本号,说明可以开始使用了。


🚀 第二步:基础检测命令(GET 请求)

假设你要检测的目标网址是 http://example.com/news.php?id=1注意:请仅对你拥有授权的目标或靶场进行测试)。

1. 检测是否存在注入点

这是最基础的命令,用来判断这个 URL 的参数(这里是 id)是否有漏洞。

复制代码
python sqlmap.py -u "http://example.com/news.php?id=1" --batch
  • -u: 指定目标 URL。
  • --batch: 强烈建议新手加上。它的意思是"全程使用默认选项",避免工具每步都停下来问你 Yes/No。

2. 获取所有数据库名称

如果上一步检测出有漏洞,你可以用这个命令列出网站所有的数据库名:

复制代码
python sqlmap.py -u "http://example.com/news.php?id=1" --dbs --batch
  • --dbs: 枚举数据库管理系统的所有数据库。

3. 获取指定数据库的表

假设你发现了数据库名叫 webapp,想看里面有哪些表:

复制代码
python sqlmap.py -u "http://example.com/news.php?id=1" -D webapp --tables --batch
  • -D: 指定要操作的数据库名。
  • --tables: 列出该数据库下的所有表。

4. 获取指定表的字段(列)

假设你发现了表名叫 users,想看里面有哪些列(如用户名、密码等):

复制代码
python sqlmap.py -u "http://example.com/news.php?id=1" -D webapp -T users --columns --batch
  • -T: 指定要操作的表名。
  • --columns: 列出字段。

5. 导出数据(Dump)

最后,如果你想把 users 表里的 usernamepassword 内容导出来:

复制代码
python sqlmap.py -u "http://example.com/news.php?id=1" -D webapp -T users -C username,password --dump --batch
  • -C: 指定要导出的列名(多个列用逗号隔开)。
  • --dump: 导出数据内容。

📝 第三步:进阶场景(POST 请求与 Cookie)

并不是所有漏洞都在 URL 链接里,很多在登录框或搜索框(POST 请求)中。

1. POST 请求注入(如登录表单)

如果注入点在 POST 数据中,使用 --data 参数:

复制代码
python sqlmap.py -u "http://example.com/login.php" --data="username=admin&password=123" --batch
  • --data: 后面跟的是 POST 提交的数据,格式通常是 参数名=参数值

2. 携带 Cookie 注入

有些网站需要登录才能访问,或者注入点在 Cookie 里(如 id=1),你需要加上 Cookie 信息:

复制代码
python sqlmap.py -u "http://example.com/index.php" --cookie="id=1; session=abc123" --batch
  • 注意:如果注入点在 Cookie 中,通常还需要加上 --level=2 或更高等级,告诉 SQLmap 去检测 Cookie。

⚙️ 第四步:关键参数速查表

为了让你更灵活地使用,这里整理了几个最常用的参数:

参数 说明 示例
-u 指定目标 URL -u "http://..."
--dbs 获取所有数据库名 --dbs
--tables 获取表名 -D 库名 --tables
--columns 获取字段名 -T 表名 --columns
--dump 导出数据 -C 字段 --dump
--data 指定 POST 数据 --data="id=1"
--level 探测等级(1-5,默认1) --level=3 (测Cookie/UA)
--risk 风险等级(1-3,默认1) --risk=2 (增加测试深度)
--tamper 使用脚本绕过 WAF --tamper=space2comment

⚠️ 避坑指南与注意事项

  1. Level 和 Risk 参数
    • 默认情况下,SQLmap 只检测 URL 参数(Level 1)。如果你想检测 Cookie 或 HTTP 头,需要设置 --level=23
    • 默认风险等级是 1(最安全)。在 CTF 比赛或深度测试中,可以设为 --risk=23,但这可能会对数据库造成更大影响,生产环境慎用
  2. 网络与代理
    • 如果目标网站有防火墙或速度很慢,可以使用 --delay=1 设置请求延迟,或者使用 --proxy 设置代理。
  3. 法律红线
    • 再次强调 :SQLmap 是极其强大的攻击工具。请务必在本地搭建的靶场(如 DVWA、sqli-labs)获得明确书面授权 的环境中进行练习。未经授权扫描政府、教育或商业网站属于违法行为。

建议你先在本地搭建一个 DVWAsqli-labs 靶场,用上面的命令练练手,熟悉流程后再进行更深入的学习。

面试中可能会问到的关于sqlmap问题

在网络安全相关的面试中,关于 SQLmap 的提问通常旨在考察候选人对 SQL 注入原理的理解、工具的熟练程度以及实战经验。以下是面试中可能会遇到的关于 SQLmap 的常见问题,分为基础、进阶和实战场景三类。

🧐 基础概念与命令

这类问题主要考察你是否真正使用过 SQLmap,以及对基本流程的掌握。

  1. 请简述 SQLmap 的工作原理。

    • 回答要点:SQLmap 是一个自动化 SQL 注入工具。它通过向目标 URL 的参数、Cookie、POST 数据等位置发送各种精心构造的 SQL 语句(Payload),然后根据服务器的响应(如页面内容变化、响应时间延迟、数据库报错信息)来判断是否存在注入点,并进一步利用漏洞获取数据库信息。
  2. 写出几个 SQLmap 最常用的命令参数及其作用。

    • 回答要点 :这是一个高频问题,你需要能流利说出几个核心参数。
      • -u: 指定目标 URL。
      • --dbs: 枚举目标数据库服务器上的所有数据库名。
      • --tables: 获取指定数据库中的所有表名。
      • --columns: 获取指定表中的所有字段名。
      • --dump: 导出指定表或字段的数据。
      • --batch: 自动以默认选项运行,避免交互式提问,适合批量或自动化操作。
      • --os-shell: 在满足特定条件时,获取目标操作系统的交互式 Shell。
  3. 如何对 POST 请求的注入点(如登录框)进行测试?

    • 回答要点 :主要有两种方式。
      1. 使用 --data 参数,后面跟上 POST 请求的数据体。例如:sqlmap -u "http://example.com/login" --data="username=admin&password=123"
      2. 更推荐的方式是使用 Burp Suite 等抓包工具,将完整的 HTTP 请求(包括 Headers、Cookies 和 POST 数据)保存到一个文本文件(如 request.txt)中,然后使用 -r 参数加载该文件。例如:sqlmap -r request.txt。这种方式更准确,能保留所有请求头信息。
  4. SQLmap 支持哪些 SQL 注入技术?

    • 回答要点 :SQLmap 支持多种注入技术,可以通过 --technique 参数指定。常见的有:
      • B: Boolean-based blind (布尔盲注)
      • E: Error-based (报错注入)
      • U: UNION query (联合查询注入)
      • S: Stacked queries (堆叠查询注入)
      • T: Time-based blind (时间盲注)

⚙️ 进阶原理与技巧

这类问题考察你对工具底层逻辑和高级功能的理解。

  1. --level--risk 参数有什么区别?在什么情况下会调整它们?

    • 回答要点
      • --level (探测等级):范围是 1-5,默认是 1。等级越高,SQLmap 测试的位置越多。Level 1 只测试 URL 参数;Level 2 会额外测试 HTTP Cookie;Level 3 会测试 User-Agent 和 Referer 等 HTTP 头。当怀疑注入点在 Cookie 或其他请求头中时,需要提高 level。
      • --risk (风险等级):范围是 1-3,默认是 1。等级越高,使用的 Payload 越激进,可能对数据库造成更大影响(如进行更多次的查询、尝试更复杂的注入)。在常规测试中保持默认即可,在 CTF 或深度渗透时可能会提高到 2 或 3。
  2. SQLmap 的 --os-shell 功能是如何实现的?需要满足哪些条件?

    • 回答要点 :这是一个经典的原理性问题。--os-shell 并非直接获取 Shell,其本质是利用 SQL 注入漏洞,在数据库服务器上写入一个 WebShell 文件,然后通过访问这个 WebShell 来执行系统命令。
    • 需要满足的条件
      1. 数据库用户具有高权限 :例如 MySQL 的 root 用户,至少需要有 FILE 权限。
      2. 知道网站的物理绝对路径:需要知道 Web 目录在哪里,才能把 WebShell 写到能被 Web 服务器访问的位置。
      3. 数据库配置允许文件写入 :例如 MySQL 的 secure_file_priv 配置项不能限制文件导出。
  3. 如何使用 SQLmap 绕过 WAF(Web应用防火墙)?

    • 回答要点 :SQLmap 提供了多种绕过手段。
      • --tamper 参数 :这是最主要的方式。SQLmap 内置了大量的 tamper 脚本,用于对 Payload 进行编码、混淆和替换。例如 space2comment (用注释符替换空格)、charunicodeencode (字符编码) 等。
      • --delay 参数:设置请求延迟,降低扫描速度,避免触发 WAF 的频率限制。
      • --random-agent 参数:随机更换 User-Agent,避免被 WAF 识别为扫描器。
      • 使用代理 (--proxy):通过代理 IP 隐藏真实来源。
  4. SQLmap API 是什么?有什么用途?

    • 回答要点:SQLmap API 是一个基于 JSON 的接口服务,允许用户以编程方式(而非命令行)与 SQLmap 进行交互。
    • 用途:主要用于将 SQLmap 集成到自动化平台、扫描器或自定义脚本中。通过 API,你可以创建扫描任务、配置参数、启动扫描、获取状态和结果,非常适合批量自动化测试场景。

🎯 实战场景与排错

这类问题考察你解决实际问题的能力。

  1. 如果目标网站有登录验证,如何使用 SQLmap 测试登录后的页面?

    • 回答要点 :核心是带上认证信息。最常用的方法是使用 Burp Suite 抓取一个已登录状态下的完整请求包,保存为 request.txt 文件,然后使用 sqlmap -r request.txt 命令。SQLmap 会自动读取文件中的 Cookie 或其他认证信息。也可以手动指定 --cookie 参数。
  2. 扫描过程中,你发现 SQLmap 的 User-Agent 被 WAF 拦截了,你会怎么办?

    • 回答要点
      1. 使用 --random-agent 参数,让 SQLmap 随机使用常见的浏览器 User-Agent。
      2. 使用 -A 参数手动指定一个正常的 User-Agent 字符串。
      3. 结合 -r 参数,使用一个包含正常 User-Agent 的请求文件。
  3. 在什么情况下,你会选择使用 -r 参数加载请求文件,而不是 -u--data

    • 回答要点 :当目标请求比较复杂时,-r 是更优选择。例如:
      • 请求包含复杂的、自定义的 HTTP 头。
      • 注入点可能在某个不常见的 Header 中(如 X-Forwarded-For)。
      • POST 数据格式不是简单的 key=value,而是 JSON 或 XML。
      • 需要精确复现一个包含 Cookie、Referer 等信息的特定请求。
  4. 如何对多个 URL 进行批量扫描?

    • 回答要点 :将所有待测试的 URL 保存到一个文本文件(如 urls.txt)中,每行一个 URL。然后使用 -m 参数指定该文件。例如:sqlmap -m urls.txt --batch
相关推荐
焦糖玛奇朵婷1 小时前
解锁扭蛋机小程序的五大优势
java·大数据·服务器·前端·小程序
jingyu飞鸟2 小时前
Linux系统发送邮件,解决信誉等级低问题 docker compose修改启动一键使用
linux·运维·docker
Lumos_7772 小时前
Linux -- exec 进程替换
linux·运维·chrome
李白客2 小时前
国产数据库选型指南:从技术路线到实战要点
运维·数据库·数据库架构·迁移学习
数智化精益手记局2 小时前
人员排班管理软件的自动化功能解析:解决传统手工人员进行排班管理耗时长的难题
运维·数据结构·人工智能·信息可视化·自动化·制造·精益工程
jy41932172 小时前
VPS 网络质量怎么测?一篇讲清楚多节点 ping、tcping 和回程路由
运维
爱吃芹菜炒肉2 小时前
Chapter 16: Power Management
服务器·c语言·网络·tcp/ip·pcie
wicb91wJ62 小时前
Nginx反向代理与负载均衡配置详解
运维·nginx·负载均衡
ElfBoard3 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网