sqlmap下载和安装保姆级教程(附安装包)
介绍sqlmapSQLmap 是一款开源、跨平台的自动化 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”会自动配置环境变量。2) 右击此电脑点击 “属性”3) 点击 “高级系统设置”4) 点击 “环境变量”5) 在 “系统变量” 中选择 “Path”点击“编辑”6) 点击 “编辑文本”7) 在 “变量值” 后把自己安装的 python 路径复制粘贴进去就可以了注意在粘贴路径 “D:\install\python” 时前面要加上英文输入法下的 “;”。8) 配置完整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\...来查看可以按以下步骤操作在当前的后面输入exit()并回车或者按Ctrl Z然后回车退出 Python 环境。回到黑色窗口的普通命令行模式后输入以下命令并回车where python系统会直接列出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打开命令提示符CMD。使用cd命令进入你解压 SQLmap 的文件夹。例如cd D:\Tools\sqlmap根据你实际安装的路径修改输入以下命令验证是否启动成功python sqlmap.py --version如果显示了版本号说明可以开始使用了。 第二步基础检测命令GET 请求假设你要检测的目标网址是http://example.com/news.php?id1注意请仅对你拥有授权的目标或靶场进行测试。1. 检测是否存在注入点这是最基础的命令用来判断这个 URL 的参数这里是id是否有漏洞。python sqlmap.py -u http://example.com/news.php?id1 --batch-u: 指定目标 URL。--batch:强烈建议新手加上。它的意思是“全程使用默认选项”避免工具每步都停下来问你 Yes/No。2. 获取所有数据库名称如果上一步检测出有漏洞你可以用这个命令列出网站所有的数据库名python sqlmap.py -u http://example.com/news.php?id1 --dbs --batch--dbs: 枚举数据库管理系统的所有数据库。3. 获取指定数据库的表假设你发现了数据库名叫webapp想看里面有哪些表python sqlmap.py -u http://example.com/news.php?id1 -D webapp --tables --batch-D: 指定要操作的数据库名。--tables: 列出该数据库下的所有表。4. 获取指定表的字段列假设你发现了表名叫users想看里面有哪些列如用户名、密码等python sqlmap.py -u http://example.com/news.php?id1 -D webapp -T users --columns --batch-T: 指定要操作的表名。--columns: 列出字段。5. 导出数据Dump最后如果你想把users表里的username和password内容导出来python sqlmap.py -u http://example.com/news.php?id1 -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 --datausernameadminpassword123 --batch--data: 后面跟的是 POST 提交的数据格式通常是参数名参数值。2. 携带 Cookie 注入有些网站需要登录才能访问或者注入点在 Cookie 里如id1你需要加上 Cookie 信息python sqlmap.py -u http://example.com/index.php --cookieid1; sessionabc123 --batch注意如果注入点在 Cookie 中通常还需要加上--level2或更高等级告诉 SQLmap 去检测 Cookie。⚙️ 第四步关键参数速查表为了让你更灵活地使用这里整理了几个最常用的参数参数说明示例-u指定目标 URL-u http://...--dbs获取所有数据库名--dbs--tables获取表名-D 库名 --tables--columns获取字段名-T 表名 --columns--dump导出数据-C 字段 --dump--data指定 POST 数据--dataid1--level探测等级1-5默认1--level3(测Cookie/UA)--risk风险等级1-3默认1--risk2(增加测试深度)--tamper使用脚本绕过 WAF--tamperspace2comment⚠️ 避坑指南与注意事项Level 和 Risk 参数默认情况下SQLmap 只检测 URL 参数Level 1。如果你想检测 Cookie 或 HTTP 头需要设置--level2或3。默认风险等级是 1最安全。在 CTF 比赛或深度测试中可以设为--risk2或3但这可能会对数据库造成更大影响生产环境慎用。网络与代理如果目标网站有防火墙或速度很慢可以使用--delay1设置请求延迟或者使用--proxy设置代理。法律红线再次强调SQLmap 是极其强大的攻击工具。请务必在本地搭建的靶场如 DVWA、sqli-labs或获得明确书面授权的环境中进行练习。未经授权扫描政府、教育或商业网站属于违法行为。建议你先在本地搭建一个DVWA或sqli-labs靶场用上面的命令练练手熟悉流程后再进行更深入的学习。面试中可能会问到的关于sqlmap问题在网络安全相关的面试中关于 SQLmap 的提问通常旨在考察候选人对 SQL 注入原理的理解、工具的熟练程度以及实战经验。以下是面试中可能会遇到的关于 SQLmap 的常见问题分为基础、进阶和实战场景三类。 基础概念与命令这类问题主要考察你是否真正使用过 SQLmap以及对基本流程的掌握。请简述 SQLmap 的工作原理。回答要点SQLmap 是一个自动化 SQL 注入工具。它通过向目标 URL 的参数、Cookie、POST 数据等位置发送各种精心构造的 SQL 语句Payload然后根据服务器的响应如页面内容变化、响应时间延迟、数据库报错信息来判断是否存在注入点并进一步利用漏洞获取数据库信息。写出几个 SQLmap 最常用的命令参数及其作用。回答要点这是一个高频问题你需要能流利说出几个核心参数。-u: 指定目标 URL。--dbs: 枚举目标数据库服务器上的所有数据库名。--tables: 获取指定数据库中的所有表名。--columns: 获取指定表中的所有字段名。--dump: 导出指定表或字段的数据。--batch: 自动以默认选项运行避免交互式提问适合批量或自动化操作。--os-shell: 在满足特定条件时获取目标操作系统的交互式 Shell。如何对 POST 请求的注入点如登录框进行测试回答要点主要有两种方式。使用--data参数后面跟上 POST 请求的数据体。例如sqlmap -u http://example.com/login --datausernameadminpassword123。更推荐的方式是使用 Burp Suite 等抓包工具将完整的 HTTP 请求包括 Headers、Cookies 和 POST 数据保存到一个文本文件如request.txt中然后使用-r参数加载该文件。例如sqlmap -r request.txt。这种方式更准确能保留所有请求头信息。SQLmap 支持哪些 SQL 注入技术回答要点SQLmap 支持多种注入技术可以通过--technique参数指定。常见的有B: Boolean-based blind (布尔盲注)E: Error-based (报错注入)U: UNION query (联合查询注入)S: Stacked queries (堆叠查询注入)T: Time-based blind (时间盲注)⚙️ 进阶原理与技巧这类问题考察你对工具底层逻辑和高级功能的理解。--level和--risk参数有什么区别在什么情况下会调整它们回答要点--level(探测等级)范围是 1-5默认是 1。等级越高SQLmap 测试的位置越多。Level 1 只测试 URL 参数Level 2 会额外测试 HTTP CookieLevel 3 会测试 User-Agent 和 Referer 等 HTTP 头。当怀疑注入点在 Cookie 或其他请求头中时需要提高 level。--risk(风险等级)范围是 1-3默认是 1。等级越高使用的 Payload 越激进可能对数据库造成更大影响如进行更多次的查询、尝试更复杂的注入。在常规测试中保持默认即可在 CTF 或深度渗透时可能会提高到 2 或 3。SQLmap 的--os-shell功能是如何实现的需要满足哪些条件回答要点这是一个经典的原理性问题。--os-shell并非直接获取 Shell其本质是利用 SQL 注入漏洞在数据库服务器上写入一个 WebShell 文件然后通过访问这个 WebShell 来执行系统命令。需要满足的条件数据库用户具有高权限例如 MySQL 的root用户至少需要有FILE权限。知道网站的物理绝对路径需要知道 Web 目录在哪里才能把 WebShell 写到能被 Web 服务器访问的位置。数据库配置允许文件写入例如 MySQL 的secure_file_priv配置项不能限制文件导出。如何使用 SQLmap 绕过 WAFWeb应用防火墙回答要点SQLmap 提供了多种绕过手段。--tamper参数这是最主要的方式。SQLmap 内置了大量的 tamper 脚本用于对 Payload 进行编码、混淆和替换。例如space2comment(用注释符替换空格)、charunicodeencode(字符编码) 等。--delay参数设置请求延迟降低扫描速度避免触发 WAF 的频率限制。--random-agent参数随机更换 User-Agent避免被 WAF 识别为扫描器。使用代理 (--proxy)通过代理 IP 隐藏真实来源。SQLmap API 是什么有什么用途回答要点SQLmap API 是一个基于 JSON 的接口服务允许用户以编程方式而非命令行与 SQLmap 进行交互。用途主要用于将 SQLmap 集成到自动化平台、扫描器或自定义脚本中。通过 API你可以创建扫描任务、配置参数、启动扫描、获取状态和结果非常适合批量自动化测试场景。 实战场景与排错这类问题考察你解决实际问题的能力。如果目标网站有登录验证如何使用 SQLmap 测试登录后的页面回答要点核心是带上认证信息。最常用的方法是使用 Burp Suite 抓取一个已登录状态下的完整请求包保存为request.txt文件然后使用sqlmap -r request.txt命令。SQLmap 会自动读取文件中的 Cookie 或其他认证信息。也可以手动指定--cookie参数。扫描过程中你发现 SQLmap 的 User-Agent 被 WAF 拦截了你会怎么办回答要点使用--random-agent参数让 SQLmap 随机使用常见的浏览器 User-Agent。使用-A参数手动指定一个正常的 User-Agent 字符串。结合-r参数使用一个包含正常 User-Agent 的请求文件。在什么情况下你会选择使用-r参数加载请求文件而不是-u和--data回答要点当目标请求比较复杂时-r是更优选择。例如请求包含复杂的、自定义的 HTTP 头。注入点可能在某个不常见的 Header 中如X-Forwarded-For。POST 数据格式不是简单的keyvalue而是 JSON 或 XML。需要精确复现一个包含 Cookie、Referer 等信息的特定请求。如何对多个 URL 进行批量扫描回答要点将所有待测试的 URL 保存到一个文本文件如urls.txt中每行一个 URL。然后使用-m参数指定该文件。例如sqlmap -m urls.txt --batch。