SQL注入之sqlmap|web安全|渗透测试|网络安全

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
  • 环境要求:
  • 安装注意事项:
    • 推荐选择自定义安装(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语句触发数据库与外部服务器建立连接
  • 工作原理
    • 测试流程:
        1. 测试网站是否存在注入点(如测试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语句)
    • 字典机制:
      • 包含常用表名(user、test等)和字段名
      • 通过高频尝试匹配正确表结构(如先尝试user表,再尝试其他表)
      • 执行特点:
        • 自动化执行大量测试请求(100-10000次不等)
        • 利用计算机高速运算能力完成人工难以实现的大规模测试
  • 使用限制
    • 高并发风险:
      • 可能导致目标网站因访问量过大而瘫痪
      • 示例:网站最大并发1000时,SQLMap的密集请求会占满资源
    • 使用规范:
      • 需与甲方协商测试时间(通常在访问量低的夜间)
      • 对于高流量网站(百万/亿级访问量)需与研发部门协调
      • 实际工作中需控制测试频率和强度
2)SQLMap使用
  • 基础检测命令
    • 单参数检测:
    • 多参数检测:
    • 交互选项:
        1. 数据库类型确认(如检测到MySQL时询问是否跳过其他数据库检测)
          2. Payload使用确认(在level1/risk1下是否使用所有MySQL Payload)
          3. 多参数检测确认(发现某参数存在漏洞后是否继续检测其他参数)
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注入
    • 环境使用:
      • 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
    • 注入类型:
      • 布尔盲注:通过页面返回结果判断条件真假
      • 时间盲注:通过执行时间延迟判断注入是否成功
      • 报错注入:利用数据库报错信息获取数据
      • 带外注入:触发数据库与外部服务器连接来获取数据
    • 检测命令:
    • 检测结果处理:
      • 第一选择:是否跳过非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基本扫描命令
    • 文件加载参数:
      • -r:表示加载文件进行扫描(区别于URL扫描的-u参数)
      • 示例:sqlmap.py -r C:\Users\ZQ\Desktop\1.txt
    • 参数指定:
      • -p:指定需要测试的参数(如uname)
      • 完整示例:sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -dbs
    • 交互选项:
      • 检测到MySQL数据库时,建议输入"Y"跳过其他DBMS测试
      • 对于扩展测试建议输入"N"保持默认级别和风险值
  • 数据库信息枚举
    • 数据库列举:
      • 使用-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字段 布尔盲注与时间盲注的响应差异 ⭐⭐⭐⭐
相关推荐
HZZD_HZZD8 小时前
喜讯|合众致达成功中标G312线傅家窑至苦水公路机电工程FKJD-2标水电表项目
大数据·数据库·人工智能
win x8 小时前
Redis 哨兵模式
数据库·redis·缓存
少年做自己的英雄8 小时前
MySQL连接查询优化算法及可能存在的性能问题
数据库·mysql·性能优化·连接算法·nlj
oMcLin8 小时前
如何在 Oracle Linux 8.3 上通过配置 LVM 与 RAID 结合,提升存储系统的性能与数据冗余性
linux·数据库·oracle
罗马苏丹默罕默德8 小时前
Ubuntu下部署.NetCore WebApi的方法
数据库·ubuntu·.netcore
AC赳赳老秦9 小时前
医疗数据安全处理:DeepSeek实现敏感信息脱敏与结构化提取
大数据·服务器·数据库·人工智能·信息可视化·数据库架构·deepseek
喵叔哟9 小时前
18.核心服务实现(下)
数据库·后端·微服务·架构
列御寇9 小时前
MongoDB分片集群分片模式——哈希分片(Hashed Sharding)
数据库·mongodb·哈希算法
Coder_Boy_9 小时前
基于SpringAI的在线考试系统-数据库表设计
java·数据库·算法