SQL注入姿势分享&实战案例分享
字数 1576 2025-10-01 14:05:52

SQL注入综合教学与实战指南

0x1 前言

本文系统梳理SQL注入的判断技巧、实战案例及特殊场景利用方法,重点涵盖闭合方式判断、排序注入、关键字绕过和伪静态SQL注入等技术要点,结合EDU SRC实战案例进行深度解析。

0x2 SQL注入判断技巧

一、SQL注入类型判断

数字型注入特征

  • 参数直接参与SQL运算,无需引号包裹
  • 典型测试Payload:id=1 and 1=1 / id=1 and 1=2
  • 运算验证:id=2-1(应返回与id=1相同结果)

字符型注入特征

  • 参数由单引号或双引号包裹
  • 需先闭合引号再构造注入语句
  • 典型测试:id=1' and '1'='1 / id=1' and '1'='2

二、闭合方式猜测技术

系统化测试所有可能的闭合方式:

  1. 单引号测试' → 观察是否报错
  2. 双引号测试" → 观察是否报错
  3. 括号测试) / ')) / ") 等组合
  4. 注释符测试:配合--+ / # / %23尝试闭合

判断依据

  • 页面返回正常 → 可能找到正确闭合方式
  • 报错信息 → 分析报错内容判断闭合方式
  • 页面空白/异常 → 可能闭合方式错误

三、排序注入(Order By注入)

注入点特征

  • 参数控制order / sort等排序字段
  • 使用关键字:DESC、desc、asc、order等

利用方法

  1. 正常排序测试

    ?order=name_desc   # name降序
    ?order=name_asc    # name升序
    
  2. 注入验证

    ?order=(case when 1=1 then name else id end)_desc
    ?order=(case when 1=2 then name else id end)_desc
    
  3. 盲注利用

    ?order=(case when ascii(substr(database(),1,1))>100 then name else id end)_desc
    

0x3 EDU SRC实战案例

一、案例分享:基于if的SQL注入

漏洞特征

  • 使用if()函数判断数据库长度
  • 通过响应差异判断注入结果

利用过程

  1. 长度判断Payload

    and if(length(database())=8,sleep(3),1)--
    

    通过响应时间差异判断数据库名长度

  2. 逐字符盲注

    and if(ascii(substr(database(),1,1))>100,sleep(2),1)--
    
  3. 数据提取:通过二分法逐个字符判断数据库名、表名、字段值

二、关键字绕过技术

常见过滤及绕过方式

  1. 空格过滤 → 使用/**/%0a%0d%09替代

  2. 关键词过滤 → 使用大小写变异、双写、注释分割:

    SEL/*bypass*/ECT  绕过SELECT过滤
    uniON selECT  大小写绕过
    
  3. 等号过滤 → 使用likerlikeregexp替代:

    and 1 like 1  替代 1=1
    
  4. 引号过滤 → 使用十六进制编码:

    union select 1,0x6a6a6a  替代 'jjj'
    

0x4 伪静态SQL注入

特征识别

  • URL呈现静态化特征:.html.shtml等后缀
  • 参数嵌入在路径中而非查询字符串
  • 示例URL:/news/123.html(123为参数)

测试方法

手工测试

  1. 参数位置识别:确定URL中哪部分为动态参数
  2. 闭合测试:在参数后添加测试Payload
    /news/123'.html      → 测试单引号
    /news/123)'.html     → 测试括号+单引号
    /news/123) and 1=1.html
    

Sqlmap自动化测试

  1. 指定注入点:使用*标记注入位置

    sqlmap -u "http://site.com/news/123*.html"
    
  2. 后缀处理:使用--suffix参数

    sqlmap -u "http://site.com/news/123" --suffix=".html"
    
  3. Level调整:提高检测级别

    sqlmap -u "http://site.com/news/123*.html" --level=3
    

利用技巧

  • 注意URL编码:确保特殊字符正确编码
  • 观察重定向:伪静态可能涉及重定向规则
  • 错误信息利用:故意触发错误获取数据库信息

0x5 防御建议

开发层面

  1. 预编译语句:强制使用参数化查询
  2. 输入过滤:严格校验输入数据类型和格式
  3. 最小权限:数据库账户遵循最小权限原则
  4. 错误处理:自定义错误信息,避免泄露细节

WAF层面

  1. 关键词检测:过滤常见SQL关键字和函数
  2. 行为检测:识别异常查询模式和频率
  3. 编码识别:检测各种编码形式的攻击载荷

运维层面

  1. 定期扫描:使用sqlmap等工具定期检测
  2. 日志监控:监控异常数据库查询请求
  3. 漏洞修复:建立快速响应和修复机制

总结

SQL注入作为最古老的Web漏洞之一,仍然在各种新型场景中出现。从传统的数字型/字符型注入到排序注入、伪静态注入,攻击方式不断演变。防御方需要建立多层次防御体系,既要关注传统注入方式,也要警惕新型利用手法的出现。掌握系统化的测试方法和绕过技术,才能有效发现和修复SQL注入漏洞。

:本文仅用于安全教学和研究目的,任何实际测试请确保获得合法授权。

SQL注入综合教学与实战指南 0x1 前言 本文系统梳理SQL注入的判断技巧、实战案例及特殊场景利用方法,重点涵盖闭合方式判断、排序注入、关键字绕过和伪静态SQL注入等技术要点,结合EDU SRC实战案例进行深度解析。 0x2 SQL注入判断技巧 一、SQL注入类型判断 数字型注入特征 参数直接参与SQL运算,无需引号包裹 典型测试Payload: id=1 and 1=1 / id=1 and 1=2 运算验证: id=2-1 (应返回与id=1相同结果) 字符型注入特征 参数由单引号或双引号包裹 需先闭合引号再构造注入语句 典型测试: id=1' and '1'='1 / id=1' and '1'='2 二、闭合方式猜测技术 系统化测试所有可能的闭合方式: 单引号测试 : ' → 观察是否报错 双引号测试 : " → 观察是否报错 括号测试 : ) / ')) / ") 等组合 注释符测试 :配合 --+ / # / %23 尝试闭合 判断依据 : 页面返回正常 → 可能找到正确闭合方式 报错信息 → 分析报错内容判断闭合方式 页面空白/异常 → 可能闭合方式错误 三、排序注入(Order By注入) 注入点特征 参数控制 order / sort 等排序字段 使用关键字:DESC、desc、asc、order等 利用方法 正常排序测试 : 注入验证 : 盲注利用 : 0x3 EDU SRC实战案例 一、案例分享:基于if的SQL注入 漏洞特征 使用 if() 函数判断数据库长度 通过响应差异判断注入结果 利用过程 长度判断Payload : 通过响应时间差异判断数据库名长度 逐字符盲注 : 数据提取 :通过二分法逐个字符判断数据库名、表名、字段值 二、关键字绕过技术 常见过滤及绕过方式 空格过滤 → 使用 /**/ 、 %0a 、 %0d 、 %09 替代 关键词过滤 → 使用大小写变异、双写、注释分割: 等号过滤 → 使用 like 、 rlike 、 regexp 替代: 引号过滤 → 使用十六进制编码: 0x4 伪静态SQL注入 特征识别 URL呈现静态化特征: .html 、 .shtml 等后缀 参数嵌入在路径中而非查询字符串 示例URL: /news/123.html (123为参数) 测试方法 手工测试 参数位置识别 :确定URL中哪部分为动态参数 闭合测试 :在参数后添加测试Payload Sqlmap自动化测试 指定注入点 :使用 * 标记注入位置 后缀处理 :使用 --suffix 参数 Level调整 :提高检测级别 利用技巧 注意URL编码:确保特殊字符正确编码 观察重定向:伪静态可能涉及重定向规则 错误信息利用:故意触发错误获取数据库信息 0x5 防御建议 开发层面 预编译语句 :强制使用参数化查询 输入过滤 :严格校验输入数据类型和格式 最小权限 :数据库账户遵循最小权限原则 错误处理 :自定义错误信息,避免泄露细节 WAF层面 关键词检测 :过滤常见SQL关键字和函数 行为检测 :识别异常查询模式和频率 编码识别 :检测各种编码形式的攻击载荷 运维层面 定期扫描 :使用sqlmap等工具定期检测 日志监控 :监控异常数据库查询请求 漏洞修复 :建立快速响应和修复机制 总结 SQL注入作为最古老的Web漏洞之一,仍然在各种新型场景中出现。从传统的数字型/字符型注入到排序注入、伪静态注入,攻击方式不断演变。防御方需要建立多层次防御体系,既要关注传统注入方式,也要警惕新型利用手法的出现。掌握系统化的测试方法和绕过技术,才能有效发现和修复SQL注入漏洞。 注 :本文仅用于安全教学和研究目的,任何实际测试请确保获得合法授权。