mysql身份认证绕过漏洞复现(CVE-2012-2122)
漏洞原理
MySQL 5.1.61 之前
这个漏洞的细节涉及到 MySQL 服务器中的加密方式和验证流程。在 MySQL 5.1.61 之前的版本中,当用户使用带有非 ASCII 字符(如空格或其他特殊字符)的密码进行登录时,MySQL 服务器会截断密码,并仅使用第一个字符进行验证。这就意味着,如果用户提供了一个以正确字符开头的密码,后面跟着任意字符的字符串,即使后续字符错误,MySQL 服务器仍然会认为密码是正确的,并允许用户登录。
例如,假设用户的密码是 “password”,但是攻击者提供的密码是 “p\x00assword”(\x00
是空字符),在此情况下,MySQL 服务器会截断密码,并只使用 “p” 进行验证,因此无论后面的部分是什么,都会认为密码是正确的。
而这个漏洞允许攻击者绕过密码验证,以任何用户身份登录到 MySQL 服务器,并执行未经授权的操作。当连接MariaDB/MYSQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即使是memcmp()返回一个非零值,也会使MYSQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能直接登录MySQL数据库。
受影响版本:
- 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
1 |
|
漏洞复现
首先使用kali中提供的工具nmap对这个目标进行简单扫描
1 |
|
可以看到3306端口的开放,3306端口是MySQL的默认端口,而22是ssd端口,提供远程登录,这里没看到开放。按照思路,可以尝试远程爆破登录MySQL,也就是跑弱口令了,方法和爆破ssh一样,先看一下MySQL是哪个版本的,是否存在漏洞。
使用nmap工具
1 |
|
使用-sV(启用版本检测)参数扫描出MySQL版本为5.5.23,这个版本存在”Mysql身份认证绕过漏洞(CVE-2012-2122”
使用shell语句爆破
1 |
|
爆破多次即绕过身份验证,成功登录数据库,复现成功
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。