[TryHackMe] Advent of Cyber 2, Day 21 - Walkthrough -

本稿では、[TryHackMe](https://tryhackme.com/)にて提供されている「[Advent of Cyber 2](https://tryhackme.com/room/adventofcyber2)」ルームに関する攻略方法（Walkthrough）について検証します。
「Advent of Cyber 2」は「free room」（無料）で提供されています。購読を必要とせずに仮想マシンを「展開（Deploy）」することができます。

>『Advent of Cyber 2』のWalkthroughインデックスを「[[TryHackMe] Advent of Cyber 2に参加してみた](https://qiita.com/v_avenger/items/ac9092374e5bf16a2dd0)」にて公開しました。

# [Day 21] Blue Teaming: Time for some ELForensics
# ストーリー

>「*little helpers*」の一人がワークステーションにログインしたところ、データベースのコネクタファイルが差し替えられていることに気付き、いたずらリストを見つけることができなくなってしまいました。さらに、データベース・コネクタファイルを実行すると、そのファイルが別の場所に移動されたことを示すメッセージが表示されました。
>
>エルフ・McEagerは通知を受け、データベース・コネクタファイルを探すためにピースをまとめます。

# タスク
フォレンジックのような調査技術を使って、データベースのコネクタファイルが隠されている場所を探します。

# Day 21 - #1.
> Read the contents of the text file within the Documents folder. What is the file hash for db.exe?

`CMD`、`PowerShell`のそれぞれにて調査してみます。

コマンドプロンプトにて、テキストファイルなどの内容を画面表示するには`TYPE`コマンドが使用できます。

```
C:\Users\littlehelper\Documents>type "db file hash.txt"
Filename:       db.exe
MD5 Hash:       5966{BLOCKED}E3A1
```

PowerShellでは、`Get-Content`コマンドレットが使用できます。

```PowerShell
PS C:\Users\littlehelper\Documents> Get-Content -Path '.\db file hash.txt'
Filename:       db.exe
MD5 Hash:       5966{BLOCKED}E3A1
```

# Day 21 - #2.
>What is the file hash of the mysterious executable within the Documents folder?

コマンドプロンプトにて、ファイルのハッシュ値を計算するには`CertUtil`コマンドが使用できます。

```
C:\Users\littlehelper\Documents>CertUtil -hashfile deebee.exe md5
MD5 hash of deebee.exe:
5f03{BLOCKED}09f0
CertUtil: -hashfile command completed successfully.
```

PowerShellでは、`Get-FileHash`コマンドレットが使用できます。

```PowerShell
PS C:\Users\littlehelper\Documents> Get-FileHash -Algorithm MD5 .\deebee.exe

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             5F03{BLOCKED}09F0                                       C:\Users\littlehelper\Documen...
```

# Day 21 - #3.
>Using Strings find the hidden flag within the executable?

Windows Sysinternalsの「[Strings.exe](https://docs.microsoft.com/ja-jp/sysinternals/downloads/strings)」ユーティリティーを使用することで、バイナリに含まれる文字列を調べることが可能です。
また、`findstr`コマンドと組み合わせると、正規表現を使った柔軟な文字列検索を行うことができます。

```
c:\Tools>strings64.exe C:\Users\littlehelper\Documents\deebee.exe | findstr THM*
THM{f618{BLOCKED}b6f9}
```

PowerShellでは、`Select-String`コマンドレットと`-Pattern`オプションが使用できます。

```PowerShell
PS C:\Users\littlehelper\Documents> Select-String -Path .\deebee.exe -Pattern 'THM*'
```

意図した文字列のみ抽出するには、`-Pattern`オプションの指定方法に工夫が必要です。
![Select-String.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/9197456f-96bc-1ad2-b86f-f5280f0eaff5.png)

# Day 21 - #4.
>What is the flag that is displayed when you run the database connector file?

NTFSファイルシステムには「**代替データストリーム（ADS：Alternate Data Stream）**」という機能があります。
コマンドプロンプトにて、代替データストリームの情報を表示するには`dir`コマンドの`/r`オプションが使用できます。

```
Microsoft Windows [Version 10.0.17763.737]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\littlehelper\Documents>dir /r
 Volume in drive C has no label.
 Volume Serial Number is C2ED-B403

 Directory of C:\Users\littlehelper\Documents

11/23/2020  04:12 PM    <DIR>          .
11/23/2020  04:12 PM    <DIR>          ..
11/23/2020  11:21 AM                63 db file hash.txt
11/23/2020  11:22 AM             5,632 deebee.exe
                                 6,144 deebee.exe:hidedb:$DATA
               2 File(s)          5,695 bytes
               2 Dir(s)   4,928,839,680 bytes free
```

PowerShellでは、`Get-Item`コマンドレットと`-Stream`オプションが使用できます。

```PowerShell
PS C:\Users\littlehelper\Documents> Get-Item .\deebee.exe -Stream *


PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Users\littlehelper\Documents\deebee.exe::$DATA
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Users\littlehelper\Documents
PSChildName   : deebee.exe::$DATA
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Users\littlehelper\Documents\deebee.exe
Stream        : :$DATA
Length        : 5632

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Users\littlehelper\Documents\deebee.exe:hidedb
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Users\littlehelper\Documents
PSChildName   : deebee.exe:hidedb
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Users\littlehelper\Documents\deebee.exe
Stream        : hidedb
Length        : 6144
```

代替データストリームに追加されている実行ファイルを起動させるには、`wmic.exe`（Windows Management Instrumentation Command Line）コマンドライン・ツールが使用できます。
コマンド構文は次のとおりです。

```
PS C:\Users\littlehelper\Documents> wmic process call create $(Resolve-Path .\deebee.exe:hidedb)
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
        ProcessId = 4804;
        ReturnValue = 0;
};
```

![wmic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/5f2c9f53-a18b-f4f6-84dc-907fe70add0c.png)

これにて、21日目のミッションが終了です。

# 参考情報
- ＠IT, 「[Windows PowerShell基本Tips（6）：【 Get-Content 】コマンドレット――ファイルの内容を参照する](https://www.atmarkit.co.jp/ait/articles/1608/05/news027.html)」
- ＠IT, 「[Tech TIPS：WindowsでMD5／SHA-1／SHA-256ハッシュ値を計算してファイルの同一性を確認する](https://www.atmarkit.co.jp/ait/articles/0507/30/news017.html)」
- ＠IT, 「[Tech TIPS：Windowsのfindstrで正規表現を検索する](https://www.atmarkit.co.jp/ait/articles/0412/18/news018.html)」
- ＠IT, 「[Windows PowerShell基本Tips（3）：【 Select-String 】コマンドレット――ファイルからテキスト（文字列）を検索する](https://www.atmarkit.co.jp/ait/articles/1607/06/news028.html)」
- ＠IT, 「[Tech TIPS：dirやPowerShellでNTFSの代替データストリーム情報を表示する](https://www.atmarkit.co.jp/ait/articles/1407/11/news111.html)」