ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

红日靶场vulnstack 8四层内网横向渗透实战:从打点到域控

红日靶场vulnstack 8四层内网横向渗透实战:从打点到域控

红日靶场(vulnstack)这个系列,在安全圈里几乎成了内网渗透入门的标配。从第一弹玩到第八弹,网络规模一层比一层重,到了 vulnstack 8 这个版本,直接给你摆了一套四层内网。这篇文章是红日靶场 8 实战全流程的第四篇,前面几篇把基础打点和前几层网络的思路讲完之后,这篇集中处理四层网络结构下的完整横向链路:外网打点进来,办公网横向铺开,跨隔离网段继续推进,最后在域控上收口。四层内网的难点不是单点漏洞有多深,而是链路怎么维持、凭证怎么复用、权限怎么跨网段带过去。

这篇文章适合两类人。第一类是准备复现 vulnstack 8 的兄弟,可以把它当成一份能跟着走的流程记录;第二类是蓝队朋友,看攻击路径怎么从入口一路摸到核心,反过来知道自己该在哪一层设防。下面所有操作都基于授权靶场环境,不要搬到真实业务网络上去试。靶场里的每一台主机、每一条命令,目标都只是让你理解横向渗透的完整闭环:先摸清结构,再拿权限,最后把权限一路传递到最里层。

1. 环境拓扑与攻击面分析

1.1 先按层级把内网结构画出来

四层内网不是指四台机器,而是指四个隔离网段。我这次复现 vulnstack 8 的时候,用虚拟机创建了一个多网卡串联的网络结构,每一层之间在物理链路层面就是隔离的,只有特定主机同时连接着两个网段,才可能让流量从一层“跳”到下一层。这个设计思路和真实办公网非常像:对外提供一个 Web 入口,内部业务系统放在不同网段,核心域控放在最后面。

下面是我这次复现的简化拓扑,不同人部署同一个靶场时 IP 会有差异,大家不要死记地址,重点是记住每层之间通过双网卡主机串联的这个逻辑。

层级主机角色所在网段常见服务
攻击机Kali / Win 攻击终端模拟外部网络扫描、漏洞利用、转发链路
第一层边界 Web 服务器外部可达 + 内网 A 段Web 应用、SSH、远程桌面
第二层办公 PC / 应用服务器内网 A 段文件共享、远程桌面、Web 服务
第三层数据库 / 中间件服务器内网 B 段数据库、业务系统、文件服务
第四层域控制器内网 B 段AD 域、DNS、组策略、共享

在我这次的环境里,第一层边界机的外网口是模拟公网地址,第二层网段是 10.10.10.0/24,第三层和第四层共用一个 10.10.20.0/24 网段。第三层的数据库服务器是双网卡机器,一边连着办公网,一边连着核心网段,它就是通往第四层域控的那道门。

拿到这种多网段靶场,第一件事不是拿扫描器一阵猛扫,而是先确定每一层网络的边界在哪里。因为四层内网的重点在于控制“由哪台机器做跳板、从哪一层往哪一层转发流量”,如果你连哪台主机连着两块网卡都不知道,后面大概率会在链路中间断掉。我在第一轮信息收集的时候,会先把每台主机的网卡数量、ARP 缓存、路由表全部记下来,再决定下一步从哪台机器入手。

1.2 四层攻击面的拆解与优先级

四层网络每一层的攻击面都不一样,优先级也不一样。边界层主要看暴露出来的 Web 应用、中间件和远程管理端口,这是第一道入口;办公网层主要看 SMB 文件共享、远程桌面、计划任务服务,以及本机内存里缓存的凭证;隔离网段层主要看数据库弱口令、中间件管理控制台、未授权的内部接口;域控层则要依靠 AD 域自身的机制,比如域用户凭证复用、组策略脚本、时间同步服务这类能被利用的信息。

我的经验是,不要试图在每一层把所有漏洞都挖一遍。四层网络横向渗透真正高效的打法,是把第一层当成入口,后面每一层都尽量复用前面拿到的凭证和权限,而不是重新去找一个新的漏洞。这就像你在一栋老办公楼里从一楼往四楼走,一楼的钥匙能开二楼的锁,二楼的门禁卡能刷三楼的闸机,那你就没有必要每次都在楼梯间砸墙。靶场里的玩法也是如此:先抓凭证,再试复用,最后才考虑针对性的新漏洞。

2. 第一层突破:外网打点与边界通路

2.1 Web 入口的识别与指纹判断

四层内网的起点,必然是先拿到第一层主机的权限。这次 vulnstack 8 的第一层边界机,开放了 80 和 8080 等常见 Web 端口,还有远程管理相关的端口。我先用扫描器做了一轮全端口识别,命令大概是这样的:

./fscan -h 192.168.100.0/24 -p 1-65535 -o result.txt

fscan 这类工具的好处是能一次性把端口、服务、Web 指纹、常见弱口令都扫出来,省去很多手工判断的时间。扫完后我注意到 Web 服务响应头里有明显的框架特征,页面报错信息也暴露了后台路径。这里我的建议是:先访问页面,把报错信息、静态资源路径、响应头全部看一遍,再用公开的指纹库去对比,往往比直接盲打漏洞更快。

确认框架之后,我开始验证是否存在反序列化这类历史漏洞。这里有一个非常重要的习惯:我在本地起了一个同版本的中间件环境,先把公开利用链在本地跑通,再拿到靶场上试。很多新手喜欢直接在目标上反复试错,结果要么把服务打崩,要么半天不出结果。先本地复现,再上靶场,至少能省一半时间。

2.2 拿到 Shell 后的三条判断

拿到边界机权限后,先别急着横向移动。我在这一步会做三件事:确认当前用户权限、确认主机出网情况、确认是否存在双网卡。这三件事直接决定了后面用哪种方式搭转发链路。

ipconfig /all arp -a route print whoami /all

如果当前权限是普通用户,我会先看看有没有明显的提权路径;如果已经是管理员权限,就直接进入凭证收集阶段。出网情况也很关键:如果边界机能主动访问攻击机,那后面就方便很多;如果不能出网,就只能靠边界机上的转发功能把流量导进来。双网卡则是判断它能否充当通往下一层的跳板,这一点在四层内网里尤其重要。

在这一步,我通常会选择在边界机上开一个本地转发端口,把内网侧流量送到攻击机这边。具体操作是:先在攻击机本地监听一个端口,再通过边界机上运行的一小段转发程序,把目标网段的 TCP 流量导到这个端口上。这样攻击机上的扫描器、连接工具都能直接“隔空”操作第二层内网的主机。

2.3 边界突破阶段的踩坑记录

这个阶段我踩过的坑有几个,第一个是 shell 动不动就掉线。第一层边界机如果是 Linux 系统,某些反弹方式容易因为终端交互问题断掉,后来我换成更稳定的 payload,并且把会话保持时间调长了,问题才缓解。第二个坑是中文系统编码乱码,命令输出全是乱码,后来用chcp 65001切到 UTF-8 编码就好多了。第三个坑是转发端口连通性,第一次开转发端口时,本地能连通,但从攻击机访问总是超时,最后发现是边界机防火墙没放行这个端口,换到 8443 这类高端口之后,流量就通了。

还有一个容易被忽略的细节:边界机上如果同时存在多张网卡,一定要看路由表。有些情况下,机器本身不知道目标网段怎么走,需要手动加一条静态路由,否则后面的扫描流量根本到不了第二层。我的建议是,每操作一步,就先在边界机上用route print确认当前路由状态,再往下走。

3. 第二层横向:办公网内的凭证与口令复用

3.1 横向开始前的信息收集三件事

进入第二层办公网之后,横向渗透已经变成了主要任务。但不要一上来就试图在所有机器上批量执行命令,先把该收集的信息收齐。我会做三件事:

net view /domain net user /domain net group "domain admins" /domain

第一件,确认当前网络环境是否属于域环境,如果不是域,那后面就不需要考虑域内机制;第二件,查看当前域内有哪些用户和组,尤其是域管理员组,这决定了最终目标;第三件,检查当前主机上缓存的凭据和共享资源,有时候隔壁机器开放了 Everyone 可读的共享,里面放着密码本或配置文件,这就是最简单的路。

很多新手在这一步容易陷入“扫到一堆开放端口,然后挨个尝试漏洞”的误区。我的观点是,办公网内横向最优先做的事情是找凭证,而不是打漏洞。因为办公网里的机器配置差异大,有些机器补丁很新,漏洞不一定打得动;但凭证不一样,同一个管理员把密码用在多台机器上,在真实网络里太常见了。

3.2 抓取内存凭证与密码喷洒的核心逻辑

在办公网的一台管理员机器上,我用凭证抓取工具把内存里缓存的密码和哈希都导了出来。命令还是经典的那套:

privilege::debug sekurlsa::logonpasswords

这里解释一下原理:Windows 登录过程中会把用户的明文密码或 NTLM 哈希缓存在系统进程内存里,只要拿到了系统权限,就能把这些缓存读出来。这也是为什么办公网里的机器不能乱装软件、不能随便插别人的设备——你永远不知道谁曾经在这台机器上登录过。

抓到一批凭证之后,下一步就是验证这些凭证能不能用。这里我会用密码喷洒的思路:拿已知的一个密码,去尝试一批用户名,而不是拿着一个用户名去爆破无限多个密码。后一种方式很容易触发账号锁定策略,把账号锁死以后反而坏事。前一种方式更温和,也更贴近真实攻击者的习惯,因为他们在拿到一个密码之后,最想知道的不是某个特定账号的密码,而是“这个密码在多少台机器上还能用”。

3.3 用计划任务实现横向移动

凭证验证通过之后,要考虑怎么在目标机器上执行命令。在靶场里,我会优先尝试计划任务的方式,命令大概是这样:

schtasks /create /s 10.10.10.20 /u red8\user /p "Password123" /tn "update" /sc once /st 23:59 /tr "cmd /c whoami > C:\Windows\Temp\out.txt" schtasks /run /s 10.10.10.20 /tn update

这条命令的意思是:在目标机器 10.10.10.20 上创建一个名为 update 的计划任务,用 red8\user 这个账号去执行,执行的命令是whoami,并把结果写到临时目录里。创建完再手动触发一次。

为什么优先用计划任务而不是直接使用远程执行类工具?因为计划任务依赖的端口和服务相对简单,只要目标开放了对应的远程计划任务接口,并且你手里的账号有权限,就能执行。而很多远程管理工具要求目标开放 ADMIN$ 这类隐藏共享,一旦 IPC$ 被禁用或者共享权限收紧,工具就会直接失败。计划任务的另一个好处是执行痕迹相对可控,在靶场里更容易复盘。

如果计划任务这条路走不通,我通常还会换 WMI 的方式再试一次,核心思路还是“有凭据,就有横向移动的资本”。这一步成功之后,第二层办公网基本就在控制范围内了,接下来要考虑的是怎么进入第三层隔离网段。

4. 第三层跨越:隔离网段与多级转发链路

4.1 双网卡主机就是天然的通路

第三层网络和第二层不在同一个网段,正常情况下办公网的机器是访问不到数据库服务器的。我在信息收集阶段发现,第二层有一台应用服务器同时连着一个 10.10.20.0/24 网段,这就等于告诉我,这台机器就是通往第三层的门。

我在这台双网卡机器上做的事情,和第一层边界机类似:开启一个本地转发端口,把 10.10.20.0/24 网段的流量导到攻击机这边。此时我的攻击机上已经有一条到 10.10.10.0/24 的转发链路,再加上这一条到 10.10.20.0/24 的转发链路,就形成了一个跨三层的访问通道。攻击机本地访问 10.10.20.0/24 里的主机时,流量实际上是经过“攻击机 -> 第一层边界机 -> 第二层双网卡机器”这样一段一段传过去的。

这种多级转发链路,就是四层内网和普通两层内网最大的区别。你在两层网络里只需要一个跳板,但在四层网络里,可能每一层都要有对应的转发节点,而且某个节点一旦下线,整条链路就断了。所以我强烈建议,在进入第三层之后,先不要急着做大量扫描,而是在沿途的每一台机器上都保留一个可用的会话,并检查转发端口的存活状态。

4.2 端口通了不代表能连上:受限访问的处理

第三层的数据库服务器开放了 1433 和 445 等端口,但我第一次通过转发链路去探测时,发现结果非常诡异:某些主机 ping 不通,但 445 端口却是开放的。后来才确认,Windows 防火墙默认会拦截 ICMP 协议,ping 不通根本不能说明主机不在线,必须用 TCP 连接去验证端口。

nc -zv 10.10.20.10 445

这个命令会尝试与目标的 445 端口建立一次真实的 TCP 连接,如果端口开放,会立刻返回成功信息。在隔离网段里,这种轻量探测比全端口扫描更实用,因为跨网段后带宽有限、延迟偏高,扫描器一次发太多包反而容易触发安全设备告警。

还有一个场景要注意:有时候扫描显示所有端口都是 filtered,其实不是目标没有开放端口,而是防火墙只放行了特定来源 IP。比如数据库服务器可能只允许应用服务器网段的机器访问 1433,其他来源一律丢弃。遇到这种情况,我的处理方法是:丢弃从攻击机直接探测的思路,跳到那台被白名单信任的双网卡机器上,从它发起连接。内网横向里,发起连接的位置往往比目标端口本身更重要。

4.3 多级转发链路的维护与保活

链路越长,越容易出问题。我在这套四层环境里遇到过好几次链路中断的情况,原因基本都是某个中间节点的程序被系统回收了、端口被占用,或者机器重启。后来我总结了几个保活经验:

第一个经验,沿途每一台中转机器上的转发进程都不要关,也不要只挂一个转发端口。我会在每层多开放一个备用端口,万一主端口出问题,立刻切换。

第二个经验,不要在一条很长的链路上同时跑太多重量级工具。比如一边挂着大型漏洞扫描器,一边又在传文件、跑爆破,链路很容易超时。轻量探测用扫描器,拿到结果后立刻关掉,只保留必要的连接。

第三个经验,写一个简单的本地端口检测脚本,定期检测攻击机这边的转发端口是否还在监听,如果发现掉线,再通过应急会话把中间节点上的转发进程拉起来。这个脚本本身不复杂,但能在关键时刻省下大量排查时间。

5. 第四层攻坚:域控前的最后一跳

5.1 定位域控:不要靠猜

三层到四层虽然共用同一个网段,但第四层的核心目标是域控制器。进入这一阶段后,第一步永远是定位域控,而不是盲目扫描所有主机。

nslookup -type=SRV _ldap._tcp.red8.lab net time /domain echo %logonserver%

第一条命令通过查询 DNS 里的服务记录来定位域控,因为在正常域环境里,域控会注册 LDAP 服务记录;第二条命令通过向域控同步时间来判断当前网络是否属于某个域,域控会返回当前可信时间源;第三条命令直接查看当前登录会话的域控名称。三条结果交叉验证,就能确认域控的 IP 和主机名。

这种方式比单纯扫描主机名更可靠。有些内网环境里主机名并不包含 DC 字样,盲扫很容易错过;而 DNS 服务和域控是强绑定的,只要域是健康的,这个办法基本不会失手。

5.2 从核心网段到域控的权限传递

定位到域控之后,最后一跳的路径通常是这样的:先看之前从办公网抓到的域用户凭证里,有没有域管理员账号。如果办公网里的某台机器已经被管理员登录过,内存缓存里很可能就有域管哈希,拿这个哈希可以直接在核心网段验证权限。如果没有域管凭证,就退一步看当前拿到的普通域用户有没有委派权限或本地管理员权限;再不行,就只能用离线弱口令字典去尝试常见弱密码。

这一阶段的优先级是“复用 > 委派 > 爆破”。因为域控是核心资产,任何直接的漏洞利用都容易触发告警,而凭证复用是环境里本来就存在的问题,不一定会被监控到。靶场里模拟的就是这种最常见的情况:管理员在办公网机器上登录过,导致域管凭证泄漏,最终被横向到域控。

拿到域控权限后,我习惯做一轮确认:

net group "domain admins" /domain set | findstr USERDOMAIN

确认当前账户已经属于域管理员组,同时确认当前会话所在的域名称无误。到这里,四层内网的链路就走通了。

5.3 蓝队视角:每一层该设什么防

一通操作下来,对蓝队来说有几个非常明确的设防点。边界层要在 Web 入口前面加 WAF 或反向代理,同时隐藏后台管理路径,避免指纹泄露;办公网层要限制管理员在普通业务机器上的登录行为,尤其不能让域管账户在办公 PC 上登录;核心网段要用 ACL 白名单控制访问来源,而不是只封禁高危端口;最后一层要重点监控异常的服务请求和计划任务创建行为。

这四层里最值得投入的是蓝队重点监控域控,因为从第一层打到第四层,链路越长,中间环节越多,暴露在日志里的痕迹也就越多。进攻方最怕的不是目标漏洞少,而是自己的每一步都被记录、被关联、被还原。

6. 常见问题与排查技巧实录

下面这个表格,是我在复现四层内网靶场时遇到的高频问题,以及对应的排查思路,直接整理成速查表,方便以后复盘:

现象可能原因排查办法
目标主机 ping 不通但端口能用ICMP 被防火墙拦截用 nc 或扫描器做 TCP 连接探测
刚抓到的密码在下一层网段失效凭证属于另一个域或账户已被改密进入新网段后重新抓取、重新验证
计划任务创建失败,提示拒绝访问凭据权限不够或目标计划任务服务未启动换用 WMI 方式横向,并检查服务状态
反弹会话执行命令乱码中英文编码不匹配在会话里切到 UTF-8,或改用英文环境命令
整条转发链路突然中断中间某个节点进程被清理或端口被封沿链路逐个检查跳板进程,启用备用端口
某端口扫描全是 filtered防火墙只放行特定来源 IP从被信任的那台跳板机器上发起连接

除了表格里的这些问题,我再补充一个容易被忽略的经验:尽量多依赖系统自带命令,少依赖大体积工具。四层内网链路带宽有限,一个几十兆的工具传半天还可能被杀软拦住,但 Windows 自带的命令、脚本以及系统管理接口,往往才是真正可靠的手段。靶场里你可以随便传工具,但在真实授权测试里,文件落地越少,链路越可靠。

还有一个经验是关于口令策略的:在靶场里我见过有人为了赶进度,一次性用同一个账号连续尝试了几百个密码,最后把目标账号锁死,整个环境都得重置。我的建议是,任何批量尝试都要控制频率和并发,并且优先采用提前收集到的字典,而不是现场随机生成。横向渗透比的是谁能更快找到那条可复用的凭证链,不是谁的爆破线程开得多。

7. 写在最后:这套靶场练完之后的体会

这套四层内网靶场,我前后完整复现过三遍。第一遍在第三层断了,原因是中间那台双网卡机器被我手滑关掉了转发进程,整条链路直接瘫痪;第二遍在密码喷洒阶段把办公网的一个账号锁了,虽然很快解除了,但那一步也让我意识到,内网横向最忌讳的就是贪快;第三遍顺利打穿后,我又专门试了一遍全程只用系统自带命令的版本,收获反而比第一次更大。

我个人的体会是,vulnstack 8 这一类四层内网靶场,真正训练的不是某一个具体工具的熟练度,而是对链路、凭证、权限这三件事的整体掌控力。Shell 拿到手只是开始,能不能把它一路安全地传递到域控,中间涉及大量决策。希望这篇复盘能让你在开始打红日靶场 8 之前心里有数,也祝你能一遍打通、链路不断。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进