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
相关推荐
阿明63 小时前
Linux进程【Linux】
linux·运维·服务器
Android系统攻城狮3 小时前
Linux Gstreamer深度解析之gst_audio_resampler_update调用流程与实战(三十)
linux·运维·服务器·gstreamer音视频·音视频进阶
qetfw3 小时前
Linux tcpdump 抓包实战:网卡、主机、端口过滤与 PCAP 分析
linux·tcpdump
微信ipad协议开发3 小时前
微信视频号自动化:内容发布与互动的 API 实现
运维·微信
cpolar技术支持3 小时前
本地 Playwright 测试报告怎么远程复盘?Trace Viewer 跑起来后,用 cpolar 分享失败现场
前端·自动化测试·测试工具·cpolar·playwright
pilifeng13 小时前
Ubuntu Linux 目录结构详解
linux·ubuntu
电棍2333 小时前
ubuntu网卡失效
linux
律宏阔4 小时前
VMware 能识别 USB 设备,但无法连接(灰色)
linux
Rabitebla4 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
AR-26710-4 小时前
Linux Day9——复习第一部分(实操产出)
linux