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

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍04-盲SQL注入(Blind SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

目录

一、盲SQL注入(Blind SQL Injection)的概念

二、盲SQL注入(Blind SQL Injection)的原理

三、盲SQL注入的类型

四、盲SQL注入的操作示例(以猜解数据库名为例)

五、防御建议


 

一、盲SQL注入(Blind SQL Injection)的概念

盲SQL注入是一种SQL注入攻击技术,与一般的SQL注入不同。在一般的SQL注入中,攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常无法从显示页面上获取执行的结果,甚至连注入语句是否执行都无法得知。它是一种针对数据库的高级攻击技术,不依赖于服务器返回的具体错误信息,而是通过探测系统的微小响应变化来判断是否存在SQL注入漏洞。例如,布尔型盲注通过观察应用程序返回的是“true”还是“false”来推断数据库信息;时间型盲注则通过页面沉睡时间判断,如当满足某个条件时页面沉睡较长时间,不满足时沉睡较短时间,以此来获取数据库信息等。

二、盲SQL注入(Blind SQL Injection)的原理

三、盲SQL注入的类型

  • 布尔型盲注(Boolean Blind SQL Injection)
    • 这种类型是通过发送不同的SQL查询来观察应用程序的响应,进而判断查询的真假,并逐步推断出有用的信息。例如在判断数据库名长度时,可以构造诸如“1' and length(database()) = 1#”“1' and length(database()) = 2#”等语句,如果语句执行结果为“true”,即表示猜对了数据库名的长度。在获取数据库名的字符时,可以使用“1' and ascii(substr(database(), 1, 1)) > 90#”这样的语句,通过不断猜测字符的ASCII码范围来确定每个字符,猜对时回显正常,猜错时回显异常。
  • 时间型盲注(Time - based Blind SQL Injection)
    • 其原理是通过页面沉睡时间判断。比如查询当前数据库某个字符的ASCII码,如果大于某个值时让页面沉睡较长时间(如10秒),小于则沉睡较短时间(如4秒),从而推断出数据库中的信息。像判断当前数据库ascii(substr(database(), 1, 1))的第一个字符的ASCII码,如果大于100,ture沉睡10秒,FALSE沉睡4秒。

四、盲SQL注入的操作示例(以猜解数据库名为例)

  1. 推测数据库名长度
    • 需要借助如“length()”和“database()”等函数。例如在MySQL中,可以使用“select length(database());”语句,也可以通过构造类似“1' and length(database()) = 1#”“1' and length(database()) = 2#”等语句来判断当前数据库名的长度,当得到正确的数据库名长度时,将会得到“true”的结果。
  2. 得到数据库名
    • 要使用“ascii()”和“substr(str, start, length)”等函数。先确定数据库名第一个字符的ASCII码范围,例如构造“1' and ascii(substr(database(), 1, 1)) > 90#”语句,通过不断调整范围(类似二分法)来确定第一个字符的ASCII码,然后再对后续字符进行同样的操作,最终得到数据库名。例如,当发现数据库名第一个字符ASCII码为115,即's',然后再修改为“substr(database(), 2, 1)”去猜第二个字符,以此类推。

五、防御建议

盲注确实要比一般的注入要难很多,因为页面没有直接的结果反馈,所以过程更加繁琐复杂,需要一步一步地去猜解。为防御盲SQL注入,应做好输入校验、参数化查询等操作,避免恶意的SQL语句被执行到数据库中。同时,对数据库的权限进行合理分配,限制不必要的数据库操作权限,也能在一定程度上减少被盲注攻击的风险。


http://www.kler.cn/a/448383.html

相关文章:

  • ubuntu22.04.5本地apt源部署
  • Bazel CI
  • Android 蓝牙Bluedroid线程池设计思路介绍
  • CE之植物大战僵尸植物无冷却
  • ECharts柱状图-柱图42,附视频讲解与代码下载
  • OpenCV putText增加中文支持
  • upload-labs靶场保姆级攻略
  • Python使用队列加多线程处理数据
  • SSM 医院预约挂号系统 Vue 实现:开启智能医疗新征程
  • 如何设置浏览器不缓存网页
  • Fastjson <= 1.2.47 反序列化漏洞复现
  • 剑指offer搜索二维矩阵
  • stm32中有哪些库?其中标准库和HAL库有什么区别?
  • 7_HTML5 SVG (3) --[HTML5 API 学习之旅]
  • 【深入理解@ExceptionHandler】
  • 深圳龙岗戴尔dell r730xd服务器故障维修
  • springboot vue 会员收银系统 含源码 开发流程
  • 网络安全怎么学习
  • 【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)
  • QT绘制同心扇形
  • 小雅Alist缓存太多怎么清理?教程来了
  • ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。
  • powerdesigner导入sql脚本,生成物理模型,并显示comment名
  • 【html网页页面013】html+css制作节日主题圣诞节网页含视频、留言表单(独创首发-5页面附效果及源码)
  • SmartX分享:SMTX ZBS 中 RDMA 技术简介
  • springboot470基于协同过滤算法的东北特产销售系统的实现(论文+源码)_kaic