1. MySQL提权基础概念与前置准备
作为一名长期从事渗透测试的安全工程师,我经常遇到需要通过MySQL数据库进行权限提升的场景。MySQL作为最流行的关系型数据库之一,其提权技术在实际渗透测试中具有重要价值。本文将详细解析两种经典的MySQL提权方法:UDF提权和启动项提权。
首先需要明确的是,这些技术仅用于合法授权的安全测试。在实际操作前,必须确保已获得系统所有者的明确授权。未经授权的测试可能违反法律法规。
1.1 MySQL登录限制与权限配置
当我们通过WebShell获取到数据库连接权限后,第一步需要检查MySQL的登录限制。默认情况下,MySQL只允许本地连接:
sql复制select host,user from mysql.user;
如果结果显示为localhost root,意味着只有本地可以root身份登录。这就是为什么通过蚁剑可以连接,而MSF等远程工具无法直接登录的原因——因为WebShell是在目标服务器本地执行的。
解决方法是通过已有连接创建新的远程访问用户:
sql复制grant all privileges on *.* to 'newuser'@'%' identified by 'password';
flush privileges;
这条SQL语句创建了一个名为newuser的用户,允许从任何IP(%)连接,密码为password。flush privileges命令使权限变更立即生效。
注意:在实际操作中,建议使用非root用户进行提权操作,避免影响原有数据库配置。创建的新用户权限与root相同,但不会覆盖原root账户。
1.2 文件读写权限检查
UDF提权需要向服务器写入文件,因此必须检查secure_file_priv参数:
sql复制show variables like '%secure%';
这个参数有三种可能状态:
- 空值:允许读写任意目录
- 指定路径:只能在指定目录读写
- NULL:禁止所有文件读写操作
只有当值为空或指向可写目录时,UDF提权才可能成功。如果值为NULL,则需要先找到其他方法修改MySQL配置或寻找替代方案。
1.3 系统环境确认
不同操作系统和MySQL版本需要不同的
