#渗透测试#漏洞挖掘#红蓝攻防#护网#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.mzph.cn/news/889968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala 的迭代器

迭代器定义:迭代器不是一种集合,它是一种用于访问集合的方法。 迭代器需要通过集合对应的迭代器调用迭代器的方法来访问。 支持函数式编程风格,便于链式操作。 创建一个迭代器,相关代码如下: object Test {def mai…

Spring整合Redis基本操作步骤

Spring 整合 Redis 操作步骤总结 1. 添加依赖 首先&#xff0c;在 pom.xml 文件中添加必要的 Maven 依赖。Redis 相关的依赖包括 Spring Boot 的 Redis 启动器和 fastjson&#xff08;如果需要使用 Fastjson 作为序列化工具&#xff09;&#xff1a; <!-- Spring Boot Re…

底层理论基础(单片机)

计算机基础 IO逻辑 计算机系统中的高低电平逻辑1和0&#xff0c;数据在计算机中的存储、传输、运算都是以二进制形式进行的。 数据的传输通过总线真正传递的是电信号&#xff0c;高低电平&#xff08;0、1&#xff09;。运算在电路中进行&#xff0c;集成电路中运算。 计算机的…

深入浅出支持向量机(SVM)

1. 引言 支持向量机&#xff08;SVM, Support Vector Machine&#xff09;是一种常见的监督学习算法&#xff0c;广泛应用于分类、回归和异常检测等任务。自1990年代初期由Vapnik等人提出以来&#xff0c;SVM已成为机器学习领域的核心方法之一&#xff0c;尤其在模式识别、文本…

docker安装Redis、docker使用Redis、docker离线安装redis、Redis离线安装

服务器到期了&#xff0c;换了一个新的环境要重搭&#xff0c;就记录一下好了&#xff1a; -----docker在线安装Redis 拉取 Redis 镜像 docker pull redis:6.2 运行 Redis 容器 docker run --name redis -d redis docker run --name redis -d redis:6.2 映射端口 docker run -…

初探Java的双冒号运算符

什么是双冒号运算符 双冒号运算符 :: 是在 Java 8 中实现的一个新特性——方法引用。它能使用我们将方法作为一个参考传递到其他的方法中。它能将简化超级长的代码&#xff0c;提高代码可读性。 基本格式&#xff1a; ClassName::methodName双冒号运算符不会调用方法&#x…

B站bilibili视频转文字字幕下载方法

本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件&#xff0c;通过插件获取字幕。随着大模型&#xff0c;生成式AI&#xff0c;ChatGPT的应用&#xff0c;B站也提供了AI小助手对视频的内容进行总结…

ROS+PX4+Gazebo仿真环境配置全流程解析

上一期文章介绍了我们即将发布的仿真平台&#xff0c;并提到后续需要在Ubuntu系统上进行PX4软件在环仿真。本期文章将为大家详细介绍如何配置Ubuntu环境以及安装ROS和PX4仿真环境。具体配置包括&#xff1a;Ubuntu 20.04 ROS Noetic PX4 Python3。 需要注意的是&#xff0c…

【操作系统】为什么需要架构裁剪?

为什么需要架构裁剪&#xff1f; 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能&#xff0c;增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象&#xff08;以操作系统为例&#xff09; 文件系统的支持网…

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意&#xff0c;在这里记录一下。如果有相同问题的朋友&#xff0c;可以借鉴。 当我 ohpm install ohos/axios 后&#xff0c;进行简单post请求验证&#xff0c;可以请求成功。 然后&#xff0c;我对axios 进行了封装。对axios 添加请求拦截器/添加响…

基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点

知识点&#xff1a; 1、基础入门-APP应用-开发架构安全问题 2、基础入门-小程序应用-开发架构安全问题 通用&#xff1a; 1、反编译-得到源码-源码提取资产&#xff08;泄漏的配置信息&#xff09;-安全测试 2、抓包-资产-安全测试 一、演示案例-移动App-开发架构-原生&H…

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么&#xff1f; Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars&#xff08;十&#xff09; 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 Qt自带…

vue3前端组件库的搭建与发布(一)

前言&#xff1a; 最近在做公司项目中&#xff0c;有这么一件事情&#xff0c;很是头疼&#xff0c;就是同一套代码&#xff0c;不同项目&#xff0c;要改相同bug&#xff0c;改好多遍&#xff0c;改的都想吐&#xff0c;于是就想做一个组件库&#xff0c;这样更新一下就全都可…

学技术学英文:代码中的锁:悲观锁和乐观锁

本文导读&#xff1a; 1. 举例说明加锁的场景&#xff1a; 多线程并发情况下有资源竞争的时候&#xff0c;如果不加锁&#xff0c;会出现数据错误&#xff0c;举例说明&#xff1a; 业务需求&#xff1a;账户余额>取款金额&#xff0c;才能取钱。 时间线 两人共有账户 …

django中cookie与session的使用

一、cookie cookie由服务器生成 &#xff0c;存储在浏览器中的键值对数据,具有不安全性&#xff0c;对应敏感数据应该加密储存在服务端每个域名的cookie相互独立浏览器访问域名为A的url地址&#xff0c;会把A域名下的cookie一起传递到服务器cookie可以设置过期时间 django中设…

Qt编译MySQL数据库驱动

目录 Qt编译MySQL数据库驱动 测试程序 Qt编译MySQL数据库驱动 &#xff08;1&#xff09;先找到MySQL安装路径以及Qt安装路径 C:\Program Files\MySQL\MySQL Server 8.0 D:\qt\5.12.12 &#xff08;2&#xff09;在D:\qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql下…

CTFHUB-web(SSRF)

内网访问 点击进入环境&#xff0c;输入 http://127.0.0.1/flag.php 伪协议读取文件 /?urlfile:///var/www/html/flag.php 右击查看页面源代码 端口扫描 1.根据题目提示我们知道端口号在8000-9000之间,使用bp抓包并进行爆破 POST请求 点击环境&#xff0c;访问flag.php 查看页…

游戏引擎学习第43天

仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步&#xff0c;探索运动方程&#xff0c;了解真实世界中的物理&#xff0c;并调整它们&#xff0c;以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟&#xff0c;而是找到最有趣…

微服务中间件~nacos安全配置(含参考案例)

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。为了确保 Nacos 的安全性&#xff0c;可以从以下几个方面入手&#xff1a; 1、启用身份验证&#xff1a; 在 application.properties 文件中启用身份验证功能&#xff1a;properties nacos.core.auth.enable…