渗透测试之SQL注入(三)
字数 852 2025-08-15 21:32:18

SQL注入高级技术:Boolean注入详解

一、Boolean注入概述

Boolean注入是一种SQL注入技术,其特点是:

  • 页面返回结果是Boolean型的(真/假)
  • 通过构造SQL判断语句,观察页面返回结果是否正常来判断条件是否成立
  • 适用于不显示详细错误信息的场景

二、Boolean注入实战环境

以sqli-labs第八关为例:

  1. 正常输入?id=1:返回"You are in......"字段
  2. 错误输入?id=1':不返回"You are in......"字段
  3. 利用这种差异作为判断依据

三、Boolean注入原理

类比思考:

  • 如同向一个只能点头/摇头的人询问信息
  • 通过一系列是/否问题逐步获取数据
  • 需要大量询问才能获取完整信息

四、关键MySQL函数

Boolean注入依赖以下MySQL函数:

  1. length(str):返回字符串长度
  2. substr(str, pos, len):从pos位置截取len长度字符(pos从1开始)
  3. mid(str,pos,len):同substr
  4. ascii(str):返回字符串最左字符的ASCII值
  5. ord(str):同ascii
  6. if(a,b,c):a为条件,真返回b,假返回c

五、Boolean注入实施步骤

  1. 判断数据库名长度

    ?id=1' and length(database())=8 %23
    
  2. 逐字符判断数据库名

    ?id=1' and ascii(substr((select database()),1,1))>104 %23
    
    • 通过调整ASCII值范围确定具体字符
    • 依次判断每个位置的字符
  3. 判断表名

    ?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>104 %23
    
  4. 判断列名

    ?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))>104 %23
    
  5. 提取数据

    ?id=1' and ascii(substr((select username from users limit 0,1),1,1))>104 %23
    

六、自动化工具辅助

  1. 手工注入缺点

    • 工作量大
    • 效率低
  2. 解决方案

    • 编写自动化注入脚本
    • 使用sqlmap等工具辅助注入

七、防御措施

  1. 使用参数化查询
  2. 实施输入验证和过滤
  3. 最小权限原则
  4. 关闭错误信息显示
  5. 使用Web应用防火墙(WAF)

八、总结

Boolean注入是一种需要耐心和技巧的注入技术,适用于:

  • 不显示详细错误信息的场景
  • 只能通过页面返回差异判断结果的场景
  • 需要逐步推断数据的场景

掌握Boolean注入技术有助于全面理解SQL注入的各种变体,提高渗透测试能力。

SQL注入高级技术:Boolean注入详解 一、Boolean注入概述 Boolean注入是一种SQL注入技术,其特点是: 页面返回结果是Boolean型的(真/假) 通过构造SQL判断语句,观察页面返回结果是否正常来判断条件是否成立 适用于不显示详细错误信息的场景 二、Boolean注入实战环境 以sqli-labs第八关为例: 正常输入 ?id=1 :返回"You are in......"字段 错误输入 ?id=1' :不返回"You are in......"字段 利用这种差异作为判断依据 三、Boolean注入原理 类比思考: 如同向一个只能点头/摇头的人询问信息 通过一系列是/否问题逐步获取数据 需要大量询问才能获取完整信息 四、关键MySQL函数 Boolean注入依赖以下MySQL函数: length(str) :返回字符串长度 substr(str, pos, len) :从pos位置截取len长度字符(pos从1开始) mid(str,pos,len) :同substr ascii(str) :返回字符串最左字符的ASCII值 ord(str) :同ascii if(a,b,c) :a为条件,真返回b,假返回c 五、Boolean注入实施步骤 判断数据库名长度 : 逐字符判断数据库名 : 通过调整ASCII值范围确定具体字符 依次判断每个位置的字符 判断表名 : 判断列名 : 提取数据 : 六、自动化工具辅助 手工注入缺点 : 工作量大 效率低 解决方案 : 编写自动化注入脚本 使用sqlmap等工具辅助注入 七、防御措施 使用参数化查询 实施输入验证和过滤 最小权限原则 关闭错误信息显示 使用Web应用防火墙(WAF) 八、总结 Boolean注入是一种需要耐心和技巧的注入技术,适用于: 不显示详细错误信息的场景 只能通过页面返回差异判断结果的场景 需要逐步推断数据的场景 掌握Boolean注入技术有助于全面理解SQL注入的各种变体,提高渗透测试能力。