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不敏感。
  • mysql注入点,用工具写入一句话木马的条件
    1、root权限
    2、网站绝对路径
    3、需要数据库开启secure_file_priv相当于为空。(默认不开启,需要修改my.ini配置文件)
  • mysql注入点,用工具写入一句话木马的,但是不清楚写入的绝对路径,可以如何获取?
    1、查secure_file_priv:SHOW VARIABLES LIKE 'secure_file_priv'。
    image
    image
    image
    2、读取配置文件:如果secure_file_priv不为空,尝试LOAD_FILE()读取MySQL的配置文件。
    image
    3、触发web错误:寻找功能点,触发错误,从错误信息中获取绝对路径。
    4、结合上下文信息猜解:看网站域名、网站技术、搜索默认结构。
    image
    5、暴力猜解:SQLMap的--file-dest,或手动批量尝试写入。
    image
    image
  • mysql数据库站,只开放一个80端口,3389无法连接的原因
    1、端口没有开放,开放80,进行站库分离。
    2、端口被修改了,更改了数据库端口,没有被扫描到
    3、端口被拦截
    4、端口处于内网,没出网,需要进行端口转发
posted @ 2025-02-13 16:42  予遂计划  阅读(833)  评论(0)    收藏  举报