1-6.1SQL注入之sqlmap安装_笔记
一、SQL注入渗透与攻防00:02
1. 什么是SQL注入00:14
1)SQLmap介绍00:15

- 功能概述:sqlmap是一款自动化SQL注入工具,主要用于扫描、发现并利用给定URL的SQL注入漏洞。
- 支持数据库:目前支持MS-SQL、MySQL、Oracle和PostgreSQL等主流数据库。
- 注入技术:采用四种独特技术:盲推理SQL注入、UNION查询注入、堆查询和基于时间的SQL盲注入。
- 扩展功能:包括数据库指纹识别、枚举、数据提取、文件系统访问,以及在获取权限后执行任意命令。
2)准备工作00:52

- 环境要求:
- Python 2.7.11或更新版本(官网:https://www.python.org/)
- SQLMap工具包(官网:https://sqlmap.org/)

- 安装注意事项:
- 推荐选择自定义安装(Customize installation)
- 必须勾选"Add Python to PATH"添加环境变量
- 建议修改默认安装路径到非系统盘(如E盘)
- 安装完成后需在cmd输入python验证版本(如3.10.2)

- 安装步骤:
- 官网下载ZIP压缩包
- 解压到指定目录(建议非C盘)
- 在解压目录创建批处理文件(cmd.exe保存为sqlmap.bat)
- 创建桌面快捷方式方便快速启动
3)SQLmap安装教程总结08:19

- 核心要点:
- Python环境是SQLmap运行的基础,必须先行安装
- 安装Python时务必添加系统环境变量
- SQLmap无需安装,解压即可使用
- 通过创建bat快捷方式可简化启动流程
- 验证方法:
- 在解压目录运行cmd,执行"sqlmap.py"命令
- 出现参数说明界面即表示安装成功
- 若报错需检查Python环境变量配置
二、知识小结
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| SQLmap工具简介 | 自动化SQL注入工具,支持主流数据库(MySQL、Oracle、MongoDB等)和多种注入方式(联合注入、堆叠注入、时间延时注入、盲注等) | 支持的数据库类型与注入技术分类需重点区分 | ⭐⭐ |
| Python环境安装 | 需预装Python(推荐3.10.2版本),安装时需勾选自动添加环境变量,建议自定义路径(非C盘) | 环境变量配置易遗漏,需验证安装成功(命令行输入python检测版本) | ⭐⭐ |
| SQLmap安装与配置 | 从官网下载压缩包并解压,通过命令行运行sqlmap.py验证;可创建.bat快捷方式(内容为cmd.exe)并发送到桌面 | 快捷方式创建需注意文件后缀名改为.bat | ⭐ |
| 工具使用场景 | 用于渗透测试中提高SQL注入效率,后续课程主要依赖此工具 | 实际应用中需结合目标数据库类型选择注入方式 | ⭐⭐⭐ |
6.2 SQL注入之sqlmap使用(get型注入)_笔记
一、SQL注入之sqlmap使用Get型注入
00:00
1. SQLMap介绍
01:27
1)SQLMap介绍

- 工具定义: Sqlmap是一个开源的渗透测试工具,用于自动化检测和利用SQL注入漏洞,获取数据库服务器权限。
- 核心功能:
- 支持多种数据库类型:MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等
- 数据获取:可提取数据库中存储的数据
- 系统访问:能访问操作系统文件
- 命令执行:通过外带数据连接执行操作系统命令
- 注入技术类型
- 布尔盲注: 根据返回页面判断条件真假的注入方式
- 时间盲注: 通过判断页面响应时间是否延迟来确认注入是否成功
- 报错注入: 利用页面返回的错误信息或直接显示注入语句结果
- 带外注入: 构造特殊SQL语句触发数据库与外部服务器建立连接
- 工作原理

- 测试流程:
-
-
-
- 测试网站是否存在注入点(如测试URL:http://www.baidu.com?id=1http://www.baidu.com?id=1http://www.baidu.com?id=1)
2. 使用字典暴力破解(如测试and1=1and 1=1and1=1或or1=2or 1=2or1=2等条件)
3. 发现注入点后进行联合查询(如unionselectunion selectunionselect语句)
- 测试网站是否存在注入点(如测试URL:http://www.baidu.com?id=1http://www.baidu.com?id=1http://www.baidu.com?id=1)
-
-
-
- 字典机制:
- 包含常用表名(user、test等)和字段名
- 通过高频尝试匹配正确表结构(如先尝试user表,再尝试其他表)
- 执行特点:
- 自动化执行大量测试请求(100-10000次不等)
- 利用计算机高速运算能力完成人工难以实现的大规模测试
- 字典机制:
- 使用限制
- 高并发风险:
- 可能导致目标网站因访问量过大而瘫痪
- 示例:网站最大并发1000时,SQLMap的密集请求会占满资源
- 使用规范:
- 需与甲方协商测试时间(通常在访问量低的夜间)
- 对于高流量网站(百万/亿级访问量)需与研发部门协调
- 实际工作中需控制测试频率和强度
- 高并发风险:
2)SQLMap使用
- 基础检测命令

- 单参数检测:
- 多参数检测:
- 交互选项:
-
-
-
- 数据库类型确认(如检测到MySQL时询问是否跳过其他数据库检测)
2. Payload使用确认(在level1/risk1下是否使用所有MySQL Payload)
3. 多参数检测确认(发现某参数存在漏洞后是否继续检测其他参数)
- 数据库类型确认(如检测到MySQL时询问是否跳过其他数据库检测)
-
-
3)SQLMap介绍
06:46

- 功能概述:Sqlmap是一个开源的渗透测试工具,用于自动化检测和利用SQL注入漏洞,获取数据库服务器权限。
- 支持数据库:MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等主流数据库。
- 注入类型:
- 布尔盲注:根据返回页面判断条件真假的注入
- 时间盲注:通过时间延迟判断是否执行成功
- 报错注入:页面直接返回错误信息或注入结果
- 带外注入:触发数据库与外部服务器建立连接
- 判断是否存在注入06:48

- 基本命令:sqlmap.py -u "http://127.0.0.1/sqli-labs/less-1/?id=1"
- 多参数处理:当注入点参数≥2个时需要加双引号
- 检测过程:
- 第一处选择:是否跳过检测其他数据库
- 第二处选择:是否使用MySQL对应的所有Payload检测
- 第三处选择:是否继续检测其他参数(一般默认回车)
- 常用命令09:27

- 基本参数:
- -u:用于GET提交方式,后跟测试URL
- --dbs:获取所有数据库
- --tables:获取所有数据表
- --columns:获取所有字段
- --dump:打印数据
- 等级参数:
- --level:执行测试等级(1-5),默认为1
- 等级≥2检查cookie参数
- 等级≥3检查user-agent和referer
- --risk:执行测试风险(0-3),默认为1
- 风险1:测试大部分语句
- 风险2:增加基于事件的测试语句
- 风险3:增加OR语句的SQL注入

- --level:执行测试等级(1-5),默认为1
- 环境使用:
- Kali Linux自带sqlmap无需安装
- Windows系统通过cmd运行sqlmap.py文件
- 命令格式:python3 sqlmap [options]

- 结果分析:
- 布尔盲注:AND boolean-based blind
- 报错注入:error-based
- 时间盲注:time-based blind
- 联合查询:UNION query
- 测试建议:
- 首次扫描建议使用最高等级
- 等级越高测试范围越广但速度越慢
- 可根据实际情况调整level和risk参数
4)SQLMap使用
18:24
- 判断是否存在注入18:35

- 注入类型:
- 布尔盲注:通过页面返回结果判断条件真假
- 时间盲注:通过执行时间延迟判断注入是否成功
- 报错注入:利用数据库报错信息获取数据
- 带外注入:触发数据库与外部服务器连接来获取数据

- 检测命令:
- 单参数:sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"
- 多参数:sqlmap.py -u "http://127.0.0.1/sqli-labs/less-1/?id=1\&uid=2"(需加双引号)
- 检测结果处理:
- 第一选择:是否跳过非MySQL数据库检测
- 第二选择:是否使用MySQL所有Payload检测
- 第三选择:是否检测其他参数(通常直接回车)

- 数据库查询:
- --dbs:查询所有数据库
- -D 数据库名 --tables:查询指定数据库的所有表
- -D 数据库名 -T 表名 --columns:查询指定表的所有字段
- -D 数据库名 -T 表名 -C "字段1,字段2" --dump:导出指定字段数据
- 参数说明:
- -u:指定GET请求的URL
- --level:测试等级(1-5,默认1),等级≥2检查cookie,≥3检查user-agent和referer
- --risk:风险等级(0-3,默认1),等级越高测试语句越激进
- 内容总结24:04

- 核心流程:
- 检测注入点
- 枚举数据库
- 选择目标数据库
- 枚举数据表
- 选择目标表
- 枚举字段
- 导出数据
- 实用技巧:
- 查询结果会自动保存为CSV文件
- 可通过--dump参数将数据导出到本地
- 多字段查询时用逗号分隔
- 大写的D/T/C分别对应database/table/column的首字母
6.3SQL注入之sqlmap使用(post型注入)_笔记
一、SQLMap介绍01:32
1. SQLmap支持的注入方式01:40

- 工具简介:Sqlmap是一个开源的渗透测试工具,用于自动化检测和利用SQL注入漏洞,获取数据库服务器权限。支持多种数据库类型包括MySQL、Oracle、PostgreSQL等。
- 核心功能:
- 获取数据库存储数据
- 访问操作系统文件
- 通过外带数据连接执行操作系统命令
1)六种注入技术
- 布尔盲注:通过页面返回结果判断条件真假的注入方式
- 时间盲注:通过观察响应时间延迟判断注入是否成功的技巧
- 报错注入:利用数据库错误信息返回注入结果的攻击方式
- 联合查询注入:在支持Union操作时使用的注入技术
- 堆查询注入:可同时执行多条SQL语句的注入方式
- 带外注入:通过建立与攻击者控制的外部服务器连接来获取数据的注入方法
2)工具使用演示

- 准备工作:需要使用Burp Suite工具进行抓包操作
- 靶场环境:演示中使用sqli-labs靶场的第11关和第12关(POST注入类型)作为测试案例
- 操作步骤:
- 启动Burp Suite抓包工具
- 运行靶场环境
- 选择特定关卡进行注入测试

- 请求分析:演示中展示了包含SQL注入点的HTTP POST请求报文
- 关键字段:注意Content-Type为application/x-www-form-urlencoded的POST请求
- 工具调用:使用sqlmap.py脚本分析抓取的请求数据包
2. 利用SQLmap进行POST注入01:54
1)SQL注入实战分析
- POST型注入检测流程01:57

- 表单特征识别:典型的登录框包含username和password两个输入字段,提交时通过POST方式发送数据包
- 数据包捕获:使用Burp Suite拦截提交请求,可见完整请求头包含:
- Content-Type: application/x-www-form-urlencoded
- 请求体参数:uname=admin&passwd=12345&submit=Submit

- 注入点定位:重点检测请求参数中的uname和passwd字段,这些用户可控输入点可能存在SQL注入漏洞
- 检测方法:通过修改参数值(如uname=admin')观察服务器响应差异,判断是否存在报错注入
- sqlmap工具使用

- 基本命令:
- sqlmap.py -r 1.txt -p uname --dbs
- -r参数指定包含HTTP请求的文件
- -p参数指定测试参数
- 检测过程:
- 首先检测WAF/IPS防护
- 测试目标URL内容稳定性
- 启发式检测参数可注入性
- 交互选项:
- 检测到MySQL数据库时提示是否跳过其他DBMS检测
- 需要人工确认是否继续检测其他参数

- 关键参数说明:
- --level:测试等级(1-5),等级≥2时检测Cookie参数
- --risk:风险等级(0-3),等级越高测试语句越激进
- -D:指定数据库
- -T:指定数据表
- --dump:导出数据
- 实战操作步骤

- 数据包保存:
- 复制完整HTTP请求头和数据
- 保存为txt文件(如1.txt)
- 注意保留原始格式和特殊符号
- 注入测试流程:
- 先用基础参数测试连接稳定性
- 逐步提高level和risk值扩大检测范围
- 针对可疑参数进行重点测试
- 注意事项:
- 测试前需确认合法授权
- 高risk等级可能触发防护机制
- MySQL特有语法需要特别关注
2)SQL注入手工测试与工具使用02:54
- SQLmap工具使用流程

- 数据库识别:当检测到后端DBMS为MySQL时,工具会提示"它看起来像后端DBMS是MySQL",并询问是否跳过其他数据库的测试负载。
- 参数测试:工具会询问是否包含所有针对MySQL的测试(扩展提供的级别1和风险1值),建议输入"Y"进行全面测试。
- 漏洞确认:当发现POST参数'n'存在漏洞时,会提示"POST参数'n'是脆弱的",并询问是否继续测试其他参数。
- 数据库表猜测
- 选择数据库:使用命令sqimap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D test -tables指定测试数据库(如test库)并列出表。
- 报错注入:MySQL >=5.6可使用基于错误的注入技术,如GTID_SUBSET函数构造报错语句。
- 时间盲注:MySQL >5.0.12支持时间盲注,通过SLEEP(5)函数验证注入点。
- POST型注入方法

- 特点:POST型注入通过表单数据与数据库交互,URL中不可见参数。
- Burp抓包:使用Burp Suite拦截HTTP请求,将完整请求保存为文本文件(如1.txt)。
- 数据包处理步骤

- 文件创建:在桌面新建文本文档(建议命名为1.txt便于记忆)。
- 内容粘贴:将Burp抓取到的完整HTTP请求数据(包括请求头和请求体)粘贴到文本文档中保存。
- 实际扫描操作03:20

- 参数识别:注意请求体中的关键参数如uname=admin&passwd=12345&submit=Submit。
- 文件保存:确保保存的文本文件包含完整的POST请求数据,包括:
- 请求行(如POST /sqli-labs-master/Less-12/ HTTP/1.1)
- 所有请求头(Host、Content-Type等)
- 请求体参数(表单数据)
3)利用SQLmap进行POST注入的常用命令
- 数据包捕获与保存

- 捕获方法:使用Burp Suite抓取POST请求数据包
- 保存步骤:
- 将捕获到的内容保存为文本文件(如1.txt)
- 存放在指定目录下备用
- 示例数据包:
- SQLmap基本扫描命令
- 数据库信息枚举

- 数据库列举:
- 使用-dbs参数列出所有可用数据库
- 示例输出会显示类似"test"的数据库名称
- 参数测试:
- 当检测到某个参数(如'n')存在漏洞时
- 建议输入"Y"继续测试其他可能存在的漏洞参数
- 数据包文件格式

- 文件要求:
- 必须包含完整的HTTP请求头
- 需要保留POST参数部分(如uname=admin&passwd=12345)
- 编码注意:
- 文件应保存为UTF-8编码
- 确保换行符格式正确(Windows为CRLF)
- 高级参数使用

- 通配符使用:
- 可以使用*指定需要测试的所有参数
- 风险控制:
- 默认级别为1(--level=1)
- 默认风险值为1(--risk=1)
- 交互提示:
- 当询问"是否包含所有MySQL测试"时,通常选择"N"
- 发现漏洞参数后,可选择"Y"继续测试其他参数
4)第一种方式:使用Burp抓包进行POST注入04:22
- 操作步骤

- 抓包保存:
- 使用Burp Suite抓取POST请求数据包
- 将数据包内容保存为文本文件(如1.txt)
- 可以直接将文件拖入命令行窗口自动获取路径
- 基本命令格式:

- -r参数:加载包含HTTP请求的文件
- -p参数:指定要测试的参数(如uname)
- --dbs:枚举数据库
- 参数指定技巧

- 选择性扫描:
- 使用-p参数可指定特定参数进行测试(如-p uname)
- 避免全参数扫描可显著提高效率
- 典型可注入参数位置:POST参数、HTTP头、Cookie等
- 交互选项:
- 当检测到MySQL时选择Y跳过其他数据库测试
- 选择N保持默认测试级别(Level 1/Risk 1)
- 注入结果分析

- 漏洞类型识别:
- 报错注入:利用GTID_SUBSET函数触发错误
- 时间盲注:使用SLEEP(5)函数检测
- 联合查询:通过UNION ALL获取数据
- 数据库枚举:

- 典型MySQL系统数据库:information_schema, mysql, performance_schema
- 用户数据库示例:challenges, pikachu, security, test
- 后续操作

- 数据提取流程:
- 枚举数据库:--dbs
- 指定数据库查表:-D 数据库名 --tables
- 指定表查列:-T 表名 --columns
- 导出数据:--dump
- 实战示例:
- 注意事项
- 效率优化:
- 明确指定参数(-p)可大幅缩短扫描时间
- 对于大型系统,建议先手动测试可疑参数
- 结果保存:
- 扫描结果自动保存在C:\Users[用户名]\AppData\Local\sqlmap\output\
- 可生成CSV报告:--output-dir=自定义路径

- 技术细节:
- 后端识别:自动检测DBMS类型(如MySQL >= 5.6)
- WAF检测:自动识别防护设备
- 稳定性检查:确保目标URL内容稳定
- 效率优化:
5)第二种方式10:45
- 例题#指定参数进行注入

- 参数指定方法:使用-p参数后跟需要扫描的参数名,如sqlmap.py -r 1.txt -p uname -dbs,其中uname就是要测试的注入参数。
- 测试过程:
- 系统会自动检测参数是否可注入
- 发现注入点后会提示是否继续测试其他参数
- 可识别多种注入类型:基于错误的注入、基于时间的盲注、UNION查询注入等
- 注入结果:
- 识别后端DBMS为MySQL ≥5.6
- 获取数据库名:challenges、information_schema、mysql等
- 例题#用星号指定测试参数11:08

- 替代方法:除了-p参数外,还可以在数据包中直接使用星号*标记要测试的参数位置
- 例如:uname=admin*&passwd=12345中的*表示只测试uname参数
- 两种方法比较:
- 功能相同:都是指定需要测试的参数
- 使用场景不同:
- -p:在命令行中明确指定参数名
- *:在请求文件中标记参数位置
- 实际应用:
- 使用星号时命令行可简化为:sqlmap.py -r 1.txt --dbs
- 系统会自动识别标记*的参数进行测试
- 测试过程会显示检测的注入技术类型(如布尔盲注、RLIKE盲注等)

- 测试流程:
- 识别后端数据库类型(MySQL)
- 询问是否跳过其他DBMS的测试(建议选Y)
- 询问是否扩展测试级别(建议选Y)
- 执行多种注入技术测试:
- 布尔盲注(AND/OR条件)
- 内联查询
- MAKE_SET/ELT等MySQL特定函数测试
- 发现注入点后提示确认
- 典型注入结果:
- 识别Web应用技术:PHP 5.2.17 + Apache 2.4.39
- 确认注入点参数及类型
- 获取完整数据库列表
- 结果自动保存到日志文件
6)POST注入的第二种方式应用拓展13:46
- 注入点检测与参数指定13:50

- 全参数扫描缺点:不指定参数时会对整个数据包进行注入尝试,耗时更长。
- 星号标记法:在参数值位置添加星号()标记待检测点,如uname=admin
- 参数优先级:推荐使用-p明确指定参数,比星号标记更高效准确
- 注入方式选择14:18
- 多类型检测:工具会自动尝试布尔盲注、时间盲注、联合查询等多种注入方式
- 漏洞确认:当检测到星号标记位置存在注入点时,会提示类似"#1* is vulnerable"
- 继续检测选项:发现首个漏洞后会询问是否继续检测其他参数(y/N)
- 井号与星号的含义15:01

- 位置标记:井号加数字表示参数位置序号,如#1表示第一个星号标记参数
- 多参数标记:可在多个参数后加星号,形成#1*、#2*等不同位置的标记
- 局限性:
- 会将标记参数前后内容作为整体检测
- 可能遗漏某些特殊字符组合的注入点
- 实际工作中更推荐使用-p参数指定
- 数据库信息获取

- 当前数据库:使用--current-db获取网站正在使用的数据库名称
- 优势:避免在多个数据库中盲目猜测,快速定位目标库
- 应用场景:在获取所有数据库列表(--dbs)后针对性查询
- 自动表单检测方式

- 命令格式:sqlmap.py -u "URL" --forms
- 工作原理:
- 扫描目标网页查找标签
- 自动识别表单中的输入字段(uname/passwd等)
- 对每个字段进行注入测试
- 使用流程:
- 确认是否检测找到的表单(Y/n/q)
- 选择是否填充空白字段随机值(Y/n)
- 跳过非目标DBMS的测试(Y/n)
- 局限性:仅检测表单字段,不包含Cookie等头部信息
- 三种POST注入方式对比
- 数据包加载(-r):最全面,需先用Burp等工具抓包
- 参数指定(-p):最精准,明确指定测试参数
- 表单扫描(--forms):最便捷,自动识别网页表单字段

- 典型输出:会显示每个参数的注入类型(布尔/报错/时间/联合)
- 漏洞利用:检测到漏洞后可继续获取数据库、表、字段等信息
- 安全提示:所有测试需获得授权,未经许可测试属违法行为
二、知识小结
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| POST注入原理 | 通过表单提交不可见数据(如登录框),需抓包分析注入点 | GET与POST提交方式的区别(URL可见性) | ⭐⭐ |
| 抓包工具使用 | 使用Burp Suite捕获POST请求数据包,保存为文本文件 | 数据包头部、Cookie、表单字段的注入点检测优先级 | ⭐⭐⭐ |
| SQLMap参数指定 | -r加载文件扫描,-p指定参数(如username),--dbs枚举数据库 | -p与*标记的区别(*可能影响注入语句完整性) | ⭐⭐⭐⭐ |
| 自动化表单扫描 | --forms自动检索网页表单并检测注入点(如username/password字段) | 仅限表单字段,无法覆盖Cookie/头部注入 | ⭐⭐ |
| 数据库枚举技巧 | --current-db获取当前数据库名,-D指定库拆表(如security) | 联合注入/报错注入/时间盲注的Payload选择 | ⭐⭐⭐ |
| 实战演示 | 靶场第12关POST注入:Burp抓包→SQLMap扫描→拆表t1字段 | 布尔盲注与时间盲注的响应差异 | ⭐⭐⭐⭐ |
