新手勇闯网络安全 | MySQL复习

MySQL系列知识全景复习:从SQL四大分类到information_schema信息收集,从UNION/报错/盲注/万能密码四种注入方式到文件读写与secure_file_priv防线,从用户权限体系到完整攻击链五步走,配合十大面试题要点与纵深防御加固建议,一篇串起全部核心知识。


一、数据库基础回顾

1.1 SQL 四大分类

分类 全称 作用 口诀
DDL 数据定义语言 改结构(建库建表) 改结构
DML 数据操作语言 改数据(增删改) 改数据
DQL 数据查询语言 查数据(SELECT) 查数据
DCL 数据控制语言 控权限(GRANT/REVOKE) 控权限

1.2 常用连接与命令

sql 复制代码
-- 本地连接
mysql -u root -p

-- 远程连接(端口用大写 -P)
mysql -h 127.0.0.1 -P 3306 -u root -p
命令 作用
SHOW DATABASES 查看所有数据库
USE school 切换数据库
SHOW TABLES 查看当前库所有表
SELECT DATABASE() 查看当前数据库
DESC students 查看表结构
SHOW CREATE TABLE students 查看建表语句

易错点:SQL 语句必须以英文分号结尾;mysql -p 后不要加空格和明文密码;命令行密码输入无回显是正常安全机制。


二、信息收集:摸清陌生数据库

2.1 information_schema 三张核心表

系统表 存储内容 关键字段
schemata 所有数据库名 schema_name
tables 所有表名 table_name, table_schema
columns 所有字段名 column_name, table_schema, table_name

2.2 信息收集三步走

sql 复制代码
-- 第一步:查库名
SELECT schema_name FROM information_schema.schemata;

-- 第二步:查表名
SELECT table_name FROM information_schema.tables WHERE table_schema = 'school';

-- 第三步:查字段名
SELECT column_name FROM information_schema.columns
WHERE table_schema = 'school' AND table_name = 'admin_users';

看到注入点后,第一步永远是信息收集------先知道库里有什么,再决定拿什么数据。


三、四种数据出口对比

方式 适用场景 核心原理 关键点
UNION 联合查询 页面有回显 合并两个 SELECT 结果 列数必须一致,类型兼容
报错注入 无回显但显示报错 利用错误信息带出数据 updatexml、extractvalue 等函数
盲注 无回显也无报错 页面正常/异常判断真假 效率低,但有效
万能密码 只需绕过登录 闭合引号→恒真条件→注释截断 依赖具体 SQL 拼接方式

选择逻辑:有回显用 UNION,有报错用报错注入,什么都没有才用盲注,只想绕登录用万能密码。


四、文件读写:从数据泄露到服务器沦陷

4.1 方向与本质

操作 方向 本质
LOAD_FILE() 服务器文件 → 查询结果 读服务器上的文件
INTO OUTFILE 查询结果 → 服务器文件 写文件到服务器磁盘
INTO DUMPFILE 原始字节 → 服务器文件 原样写入,不加分隔符

关键认知:LOAD_FILE() 读的是 MySQL 服务器上的文件,不是你自己电脑上的文件。如果数据库在远程服务器上,读的是远程数据库服务器的文件。

4.2 写文件的前提条件

  1. 当前账号有 FILE 权限
  2. secure_file_priv 允许写入目标目录
  3. MySQL 服务进程对目标目录有写权限
  4. 目标文件不存在(INTO OUTFILE 不能覆盖)
  5. 使用绝对路径

4.3 secure_file_priv 守门员

配置值 效果
NULL 完全禁用文件导入导出(最安全)
空值 不限制,允许任意目录读写(危险)
指定目录 只允许在该目录范围内操作

secure_file_priv 不能通过 SET GLOBAL 动态修改,必须改配置文件 my.ini 并重启 MySQL 服务。


五、用户权限与密码安全

5.1 用户身份格式

MySQL 用户是 '用户名'@'主机',例如:

  • 'root'@'localhost':只允许本机连接
  • 'root'@'%':允许任意远程主机连接(极度高危)

root@localhost 和 root@% 不是同一个账号。user + host 共同决定一个 MySQL 账号。

5.2 认证与授权

概念 解决的问题
认证 你是谁,能不能登录
授权 登录后你能做什么

5.3 密码存储

  • 数据库不存明文密码,存哈希值
  • MySQL 5.5 用 password 字段,5.7 用 authentication_string 字段
  • 弱密码可以被离线爆破
  • 生产环境禁止业务账号读取 mysql.user
  • 不要复用数据库密码

六、SQL 注入写 Webshell 完整条件

面试重点------十个条件缺一不可:

  1. Web 应用存在可利用的 SQL 注入点
  2. 注入点所在 SQL 能影响 SELECT 查询或执行写文件语句
  3. 当前数据库账号拥有 FILE 权限
  4. secure_file_priv 为空或允许写入目标目录
  5. 已知 Web 根目录的绝对路径
  6. MySQL 服务进程对 Web 根目录有写权限
  7. 目标文件名不存在
  8. Web 服务器会解析写入文件的扩展名(如 .php)
  9. Web 和数据库没有做有效隔离
  10. 安全设备、WAF、数据库审计没有拦截相关语句

一句话总结:有 SQL 注入不等于能写 Webshell,中间隔着一堆权限和配置。


七、完整攻击链五步走

步骤 动作 目标
1. 发现注入点 单引号、报错、页面差异 确认注入存在
2. 信息收集 information_schema 查库名、表名、字段名 摸清数据库结构
3. 带出数据 UNION、报错注入、盲注、万能密码 获取业务数据
4. 判断权限 SHOW GRANTS、secure_file_priv、FILE 权限 评估能否升级
5. 文件写入 INTO OUTFILE 写文件,Web 解析 服务器控制风险

如果写不了 Webshell,退路:继续偷数据(手机号、身份证、订单)、找其他入口(文件上传、RCE)、盲注慢慢猜。


八、面试题要点速览

问题 核心回答
SQL 注入的本质 用户输入被当作 SQL 代码执行,程序把输入直接拼接到 SQL 语句中
UNION 注入前提 页面有回显、原查询是 SELECT、列数一致、类型兼容
报错注入常用函数 updatexml、extractvalue、floor(rand()) 组合、exp
万能密码原理 闭合引号→构造恒真条件→注释截断,让 WHERE 永远为真
写 Webshell 条件 注入点+FILE 权限+secure_file_priv+Web 路径+写权限+目标文件不存在+Web 解析
怎么防御 SQL 注入 核心是参数化查询(预编译语句),辅助:输入校验、最小权限、错误隐藏、WAF
LOAD_FILE 读哪里 MySQL 服务器上的文件,不是客户端本机文件
OUTFILE vs DUMPFILE OUTFILE 导出查询结果(有分隔符),DUMPFILE 原样写单个字段字节
secure_file_priv 三种状态 NULL 禁用、空值任意目录、指定目录限制
MySQL 密码存哪 mysql.user 表,存哈希不存明文

加分项:参数化查询是根本,WAF 是应急。只靠 WAF,绕过姿势有很多种。


九、易错点与防御总结

9.1 常见易错点

易错点 正确理解
混淆文件读写方向 LOAD_FILE 读的是服务器文件,不是本机文件
混淆认证与授权 认证=能不能登录,授权=登录后能做什么
只查 FILE 权限忽略配置 还要检查 secure_file_priv 是否限制目录
忽略版本差异 5.5 默认宽松,5.7 默认严格
以为注入必然高危 没有 FILE 权限或 secure_file_priv 限制时,注入只能查数据
-- 后面忘加空格 -- 注释符后面通常需要跟一个空格

9.2 纵深防御体系

加固措施 具体做法
参数化查询 让用户输入永远不被当作 SQL 代码执行(根本防御)
最小权限原则 业务账号只授予必需权限,绝不使用 root
严控 FILE 权限 普通业务账号不授予 FILE 权限
配置 secure_file_priv 设为 NULL 或独立不可 Web 访问的目录
隐藏错误信息 生产环境不显示数据库报错
定期排查 扫描弱口令、权限漂移和配置失控

十、知识全景小结

模块 核心知识 一句话速记
数据库基础 SQL 四大分类、常用命令 DDL改结构,DML改数据,DQL查数据,DCL控权限
信息收集 information_schema 三张表三步走 先查库,再查表,后查字段
UNION 注入 列数对齐、类型兼容、回显位 有回显用 UNION
报错注入 错误信息带出数据 有报错用报错注入
盲注 页面真假判断 什么都没有才用盲注
万能密码 闭合→恒真→注释 只想绕登录用这个
文件读取 LOAD_FILE 读服务器文件 不是读本机文件
文件写入 INTO OUTFILE / DUMPFILE 需 FILE 权限 + 配置放行
secure_file_priv 限制导入导出目录 关键防线,NULL 最安全
用户权限 用户名@主机,认证与授权 root@localhost ≠ root@%
密码安全 哈希存储,弱密码可爆破 不复用、最小权限
攻击链 发现→收集→带出→判断权限→写文件 五步走
防御核心 参数化查询 + 最小权限 根本是预编译,WAF 是辅助

从第一条 SQL 语句到完整攻击链,从 information_schema 到 secure_file_priv,这一篇把 MySQL 安全的全部知识点串成了体系。核心观点:SQL 注入的本质是用户输入被当作代码执行,防御的根本是参数化查询;文件读写风险不是数据库功能本身的问题,而是高权限、弱配置、注入漏洞三者叠加的结果。掌握这套知识框架,无论是做渗透测试还是做安全加固,都能快速定位问题所在。

相关推荐
对我的心脏有害1 小时前
小心!你的飞书私聊,可能会被人看到
安全
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
pt10431 小时前
Cisco设备网络安全系列-20:DevSecOps集成
网络·安全·架构
安教安全员通关宝1 小时前
2026年河北安全员B证考试题库+答案+解析
安全
数据库小学妹1 小时前
AI Agent连数据库怎么控权限?只读账号的4个缺口
数据库·人工智能·安全·数据库权限·审计·ai数据库·只读账号
凤凰院凶涛QAQ1 小时前
《MySQL内核拆解:从SQL到InnoDB》(三) : 数据库设计 & 聚合查询 & 分组查询
数据库·sql·mysql
是真的小外套2 小时前
网络安全实战第12期:三步定位已知漏洞CVE+NSE+searchsploit
安全·web安全
自由彩虹2 小时前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
武雄(小星Ai)2 小时前
Cursor市场Claude Code扩展被植入SSH后门:一次供应链投毒的完整拆解与自查手册
安全·网络安全·供应链攻击