この記事で行うこと
下図のように、Mac上のVirtualBoxで仮想マシン2つ(Metasploitable、Ubuntu)を作成し、Ubuntu上で起動したDockerコンテナ(metasploit-framework)からMetasploitableに対し、IPv4とIpv6の両アドレスにポートスキャンを行い、結果をPostgreSQLに格納します。
参考ページ(感謝します)
mastodon/docker_ipv6
Ubuntu 18.04にDockerをインストールする(+docker-composeも)
systemd時代のDockerをProxy環境下で使う
Metasploitをバッチで実行する
参考文献(感謝します)
プロフェッショナルIPv6(無料版)
ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習
インフラエンジニア教本――セキュリティ実践技術編 (Software Design[別冊])
スティーリング・ザ・ネットワーク―いかにしてネットワークは侵入されるか
VirtualBoxの仮想ネットワークを設定する
本記事では、VirtualBoxの仮想マシンを2つ作成します。
MetasploitableのVMは外部に接続する必要がありませんので、ホストオンリーアダプターのみ割り当てます。
UbuntuのVMは、NAT用とホストオンリー用の2枚挿しとします。NATは外部通信時に使用し(apt、docker pull等)、ホストオンリーアダプターはMetasploitableへのポートスキャン時に使用します。
安全のため、NATをオンにしたままポートスキャンを行わないことにします。あるいは、ポートスキャンを行うときはホストマシンのLANケーブルを抜いても良いでしょう。
ホストオンリーネットワークの作成と設定
本記事で使用しているVirtualBoxのバージョンは「6.08 r130520」です。
まずポートスキャン用にホストオンリーネットワークを作成します。VirtualBoxのファイルメニューからホストネットワークマネージャーを選択します。
作成ボタンを押して、適当なプライベートIPアドレスを設定します。
本記事では以下のように設定しました。
アダプター
IPv4アドレス 192.168.10.1
IPv4ネットマスク 255.255.255.0
IPv6アドレス fd00:10:10::1
IPv6ネットマスク長 64
DHCPサーバー
サーバーアドレス 192.168.10.100
サーバーマスク 255.255.255.0
アドレス下限 192.168.10.101
アドレス上限 192.168.10.254
VirtualBoxの仮想マシン(その1)を作成し、Metasploitableをインストールする
Metasploitableのサイトから、metasploitable-linux-2.0.0.zipをダウンロードします。
このファイルを展開すると、Metasploitable2-Linuxディレクトリの下にMetasploitable.vmdk等のファイルがあります。
Metasploitable2-Linux/ $ ls
Metasploitable.nvram Metasploitable.vmsd Metasploitable.vmxf
Metasploitable.vmdk Metasploitable.vmx
仮想マシンを以下の値で新規作成します。
仮想マシン
名前 Metasploitable2
タイプ Linux
バージョン Ubuntu (64-bit)
メモリーサイズ
1024MB
ハードディスク
すでにある仮想ハードディスクファイルを使用する(ダウンロード後に展開したvmdkファイルを指定)
ネットワークアダプターのアダプター1をホストオンリーアダプターにします。
仮想マシンを起動してログインします。ID・パスワード共に「msfadmin」です。
日本語キーボードを使っているのであれば、以下を実行してレイアウトを変更します(再起動すると元の状態に戻りますが)。
sudo loadkeys jp
静的IPアドレスを設定します。エディタを起動:
sudo vi /etc/network/interfaces
auto eth0の箇所を以下のように書き換えます。
auto eth0
iface eth0 inet static
address 192.168.10.101
netmask 255.255.255.0
gateway 192.168.10.1
iface eth0 inet6 static
address fd00:10:10::101
netmask 64
設定を反映させます。
sudo /etc/init.d/networking restart
eth0のIPv4アドレスが192.168.10.101に、IPv6アドレスがfd00:10:10::101になっていることを確認します。
ip a
ホストオンリーネットワークのホストOSにIPv4でpingが通ることを確認します。
ping 192.168.10.1
同様にIPv6でpingが通ることを確認します。
ping6 fd00:10:10::1
Metasploitableを終了するには、以下を実行します。
sudo shutdown -h now
最後に「System halted.」と表示されて停止しますが、電源は自動で落ちません。仮想マシンのウィンドウの×ボタンを押すと、選択肢が提示されますので、電源オフを選択します。
VirtualBoxの仮想マシン(その2)を作成し、Ubuntu 18.04をインストールする
本記事では、DockerのホストとしてUbuntu 18.04 LTS 日本語 Remixを使用します。お好みにより、CentOS等でも構いません。
Ubuntu 18.04 LTS 日本語 Remixのサイトから、ISOイメージをダウンロードします。
仮想マシンを以下の値で新規作成します。
仮想マシン
名前 Ubuntu 18.04
タイプ Linux
バージョン Ubuntu (64-bit)
メモリーサイズ
2048MB以上(?)
ハードディスク
仮想ハードディスクを作成する
ネットワークアダプターのアダプター1はデフォルトでNATになっていますので、そのままでOK。
アダプター2をホストオンリーアダプターにします。
ネットワーク以外の設定として、「一般→高度」でクリップボードの共有を双方向にしておくと、ホストOSとゲストOS間でコピペができて便利です。
それでは仮想マシンにUbuntuをインストールします。
「ストレージ」の光学ドライブにダウンロードしたISOファイルを割り当てます。
仮想マシンを起動するとUbuntuのインストールが始まります。選択肢を提示されたらデフォルトのままでもOKですが、お好みに合わせてご選択ください。
インストールが完了したらUbuntuにログインします。最初にVirtualBox Guest Additionsをインストールしておくと、ホストOSとクリップボード経由のコピペが効くので便利です。Devicesメニューから「Insert Guest Additions image...」を選択してインストールを実行し、終了したら仮想マシンを再起動し、ホストOS間とコピペできるか確認しておきます。
次に、ネットワークの現状を調べます。「ip a」を実行すると、以下のように表示されました。
username@username-VirtualBox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:0b:63:1a brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 86081sec preferred_lft 86081sec
inet6 fe80::eb56:783e:5ad3:53c0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:36:cd:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.105/24 brd 192.168.10.255 scope global dynamic noprefixroute enp0s8
valid_lft 881sec preferred_lft 881sec
inet6 fe80::7a38:9acf:f826:a016/64 scope link noprefixroute
valid_lft forever preferred_lft forever
表示内容から、enp0s3がNAT、enp0s8がホストオンリーアダプターということが分かります。
まずNAT経由でapt update & upgradeします。もしProxy配下の環境でなければ外部に接続できるはずですが、Proxy配下であればまだ外部に接続できません。
username@username-VirtualBox:~$ sudo apt update
[sudo] username のパスワード:
エラー:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
security.ubuntu.com:80 (91.189.88.162) へ接続できませんでした。
(後略)
apt用にProxyを設定します。
sudo vi /etc/apt/apt.conf.d/80proxy
Acquire::http::proxy "http://proxy:8080";
Acquire::https::proxy "http://proxy:8080";
再び「sudo apt update」を実行すると、aptが外部に繋がりました。
username@username-VirtualBox:~$ sudo apt update
取得:1 http://archive.ubuntulinux.jp/ubuntu bionic InRelease [15.4 kB]
ヒット:2 http://archive.ubuntulinux.jp/ubuntu-ja-non-free bionic InRelease
(中略)
49.6 MB を 59秒 で取得しました (844 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 322 個あります。表示するには 'apt list --upgradable' を実行してください。
引き続きapt upgradeを行います。
sudo apt upgrade -y
後々のために、パッケージを追加でインストールしておきます。bridge-utilsパッケージをインストールすると、brctlコマンドが使用できるようになります。
sudo apt install vim bridge-utils
Proxy設定の続き:
GUIでも設定しておきます。
~/.bashrcにもProxy設定を追加しておきます。一般ユーザとrootの両方でやっておくと良いでしょう。
export http_proxy="http://proxy:8080"
export https_proxy=$http_proxy
OSの更新が完了したら、一旦NAT側の接続をオフにします。
引き続き、ホストオンリー側の静的IPアドレスを設定します。本記事ではGUIで行います。
IPv6アドレスを設定します。
IPv6アドレス
fd00:10:10::102/64
IPv4アドレスを設定します。
DHCPで自動割当されたアドレスでも良いのですが、ホスト部をIPv6アドレスに合わせて102にしておくとわかりやすいでしょう。
IPv4アドレス
192.168.10.102/24
設定を反映させるために、enp0s8を一旦オフにし、再びオンにします。
「ip a」を実行して、enp0s8のIPv4アドレスが192.168.10.102に、IPv6アドレスがfd00:10:10::102になっていることを確認します。
username@username-VirtualBox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:0b:63:1a brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:36:cd:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.102/24 brd 192.168.10.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
inet6 fd00:10:10::102/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::7a38:9acf:f826:a016/64 scope link
valid_lft forever preferred_lft forever
ホストオンリーネットワークのホストOSにIPv4でpingが通ることを確認します。
ping 192.168.10.1
username@username-VirtualBox:~$ ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.448 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.372 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.826 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=0.690 ms
^C
--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3035ms
rtt min/avg/max/mdev = 0.372/0.584/0.826/0.182 ms
同様にIPv6でpingが通ることを確認します。
ping6 fd00:10:10::1
username@username-VirtualBox:~$ ping6 fd00:10:10::1
PING fd00:10:10::1(fd00:10:10::1) 56 data bytes
64 bytes from fd00:10:10::1: icmp_seq=1 ttl=64 time=0.492 ms
64 bytes from fd00:10:10::1: icmp_seq=2 ttl=64 time=0.311 ms
64 bytes from fd00:10:10::1: icmp_seq=3 ttl=64 time=0.567 ms
64 bytes from fd00:10:10::1: icmp_seq=4 ttl=64 time=0.296 ms
^C
--- fd00:10:10::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3060ms
rtt min/avg/max/mdev = 0.296/0.416/0.567/0.117 ms
Ubuntuの仮想マシンにDockerをインストールする
NAT接続をオンにします。
「Ubuntu 18.04にDockerをインストールする(+docker-composeも)」の手順に従い、Dockerとdocker-composeをインストールします。本記事では手順は割愛しますが、インストールした時の画面表示だけコピペしておきます。
Dockerをインストールした時の画面表示:
username@username-VirtualBox:~$ sudo apt install -y \
> apt-transport-https \
> ca-certificates \
> curl \
> software-properties-common
[sudo] username のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
ca-certificates はすでに最新バージョン (20180409) です。
ca-certificates は手動でインストールしたと設定されました。
software-properties-common はすでに最新バージョン (0.96.24.32.9) です。
software-properties-common は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libllvm7
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
libcurl4
以下のパッケージが新たにインストールされます:
apt-transport-https curl libcurl4
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
374 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,189 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 apt-transport-https all 1.6.11 [1,692 B]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libcurl4 amd64 7.58.0-2ubuntu3.7 [214 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 curl amd64 7.58.0-2ubuntu3.7 [159 kB]
374 kB を 1秒 で取得しました (647 kB/s)
以前に未選択のパッケージ apt-transport-https を選択しています。
(データベースを読み込んでいます ... 現在 163749 個のファイルとディレクトリがインストールされています。)
.../apt-transport-https_1.6.11_all.deb を展開する準備をしています ...
apt-transport-https (1.6.11) を展開しています...
以前に未選択のパッケージ libcurl4:amd64 を選択しています。
.../libcurl4_7.58.0-2ubuntu3.7_amd64.deb を展開する準備をしています ...
libcurl4:amd64 (7.58.0-2ubuntu3.7) を展開しています...
以前に未選択のパッケージ curl を選択しています。
.../curl_7.58.0-2ubuntu3.7_amd64.deb を展開する準備をしています ...
curl (7.58.0-2ubuntu3.7) を展開しています...
apt-transport-https (1.6.11) を設定しています ...
libcurl4:amd64 (7.58.0-2ubuntu3.7) を設定しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
curl (7.58.0-2ubuntu3.7) を設定しています ...
username@username-VirtualBox:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
username@username-VirtualBox:~$ sudo add-apt-repository \
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
> $(lsb_release -cs) \
> stable"
ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:3 http://archive.ubuntulinux.jp/ubuntu bionic InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease
ヒット:5 http://archive.ubuntulinux.jp/ubuntu-ja-non-free bionic InRelease
取得:6 https://download.docker.com/linux/ubuntu bionic InRelease [64.4 kB]
ヒット:7 http://security.ubuntu.com/ubuntu bionic-security InRelease
取得:8 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages [7,236 B]
71.7 kB を 1秒 で取得しました (56.0 kB/s)
パッケージリストを読み込んでいます... 完了
username@username-VirtualBox:~$ sudo apt update
ヒット:1 http://archive.ubuntulinux.jp/ubuntu bionic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:3 https://download.docker.com/linux/ubuntu bionic InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:5 http://archive.ubuntulinux.jp/ubuntu-ja-non-free bionic InRelease
ヒット:6 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease
ヒット:7 http://security.ubuntu.com/ubuntu bionic-security InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。
username@username-VirtualBox:~$ sudo apt install -y docker-ce
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libllvm7
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
aufs-tools cgroupfs-mount containerd.io docker-ce-cli git git-man
liberror-perl pigz
提案パッケージ:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email
git-gui gitk gitweb git-cvs git-mediawiki git-svn
以下のパッケージが新たにインストールされます:
aufs-tools cgroupfs-mount containerd.io docker-ce docker-ce-cli git
git-man liberror-perl pigz
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
58.1 MB のアーカイブを取得する必要があります。
この操作後に追加で 287 MB のディスク容量が消費されます。
取得:1 https://download.docker.com/linux/ubuntu bionic/stable amd64 containerd.io amd64 1.2.6-3 [22.6 MB]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 pigz amd64 2.4-1 [57.4 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 aufs-tools amd64 1:4.9+20170918-1ubuntu1 [104 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 cgroupfs-mount all 1.4 [6,320 B]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 liberror-perl all 0.17025-1 [22.8 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git-man all 1:2.17.1-1ubuntu0.4 [803 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git amd64 1:2.17.1-1ubuntu0.4 [3,907 kB]
取得:8 https://download.docker.com/linux/ubuntu bionic/stable amd64 docker-ce-cli amd64 5:18.09.8~3-0~ubuntu-bionic [13.2 MB]
取得:9 https://download.docker.com/linux/ubuntu bionic/stable amd64 docker-ce amd64 5:18.09.8~3-0~ubuntu-bionic [17.4 MB]
58.1 MB を 14秒 で取得しました (4,266 kB/s)
以前に未選択のパッケージ pigz を選択しています。
(データベースを読み込んでいます ... 現在 163766 個のファイルとディレクトリがインストールされています。)
.../0-pigz_2.4-1_amd64.deb を展開する準備をしています ...
pigz (2.4-1) を展開しています...
以前に未選択のパッケージ aufs-tools を選択しています。
.../1-aufs-tools_1%3a4.9+20170918-1ubuntu1_amd64.deb を展開する準備をしています ...
aufs-tools (1:4.9+20170918-1ubuntu1) を展開しています...
以前に未選択のパッケージ cgroupfs-mount を選択しています。
.../2-cgroupfs-mount_1.4_all.deb を展開する準備をしています ...
cgroupfs-mount (1.4) を展開しています...
以前に未選択のパッケージ containerd.io を選択しています。
.../3-containerd.io_1.2.6-3_amd64.deb を展開する準備をしています ...
containerd.io (1.2.6-3) を展開しています...
以前に未選択のパッケージ docker-ce-cli を選択しています。
.../4-docker-ce-cli_5%3a18.09.8~3-0~ubuntu-bionic_amd64.deb を展開する準備をしています ...
docker-ce-cli (5:18.09.8~3-0~ubuntu-bionic) を展開しています...
以前に未選択のパッケージ docker-ce を選択しています。
.../5-docker-ce_5%3a18.09.8~3-0~ubuntu-bionic_amd64.deb を展開する準備をしています ...
docker-ce (5:18.09.8~3-0~ubuntu-bionic) を展開しています...
以前に未選択のパッケージ liberror-perl を選択しています。
.../6-liberror-perl_0.17025-1_all.deb を展開する準備をしています ...
liberror-perl (0.17025-1) を展開しています...
以前に未選択のパッケージ git-man を選択しています。
.../7-git-man_1%3a2.17.1-1ubuntu0.4_all.deb を展開する準備をしています ...
git-man (1:2.17.1-1ubuntu0.4) を展開しています...
以前に未選択のパッケージ git を選択しています。
.../8-git_1%3a2.17.1-1ubuntu0.4_amd64.deb を展開する準備をしています ...
git (1:2.17.1-1ubuntu0.4) を展開しています...
aufs-tools (1:4.9+20170918-1ubuntu1) を設定しています ...
git-man (1:2.17.1-1ubuntu0.4) を設定しています ...
containerd.io (1.2.6-3) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
ureadahead (0.100.0-21) のトリガを処理しています ...
liberror-perl (0.17025-1) を設定しています ...
cgroupfs-mount (1.4) を設定しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
systemd (237-3ubuntu10.24) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
docker-ce-cli (5:18.09.8~3-0~ubuntu-bionic) を設定しています ...
pigz (2.4-1) を設定しています ...
git (1:2.17.1-1ubuntu0.4) を設定しています ...
docker-ce (5:18.09.8~3-0~ubuntu-bionic) を設定しています ...
update-alternatives: /usr/bin/dockerd (dockerd) を提供するために自動モードで /usr/bin/dockerd-ce を使います
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
ureadahead (0.100.0-21) のトリガを処理しています ...
systemd (237-3ubuntu10.24) のトリガを処理しています ...
username@username-VirtualBox:~$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor
Active: active (running) since Fri 2019-07-19 10:14:38 JST; 5s ago
Docs: https://docs.docker.com
Main PID: 19710 (dockerd)
Tasks: 8
CGroup: /system.slice/docker.service
└─19710 /usr/bin/dockerd -H fd:// --containerd=/run/containe
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
7月 19 10:14:38 username-VirtualBox systemd[1]: Started Docker Applica
7月 19 10:14:38 username-VirtualBox dockerd[19710]: time="2019-07-19T1
username@username-VirtualBox:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
username@username-VirtualBox:~$ whoami
username
username@username-VirtualBox:~$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied
username@username-VirtualBox:~$ cat /etc/group | grep docker
docker:x:998:
username@username-VirtualBox:~$ sudo gpasswd -a username docker
ユーザ username をグループ docker に追加
username@username-VirtualBox:~$ cat /etc/group | grep docker
docker:x:998:username
username@username-VirtualBox:~$ sudo chmod 666 /var/run/docker.sock
username@username-VirtualBox:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker-composeをインストールした時の画面表示:
username@username-VirtualBox:~$ export compose='1.24.0'
username@username-VirtualBox:~$ sudo -E curl -L https://github.com/docker/compose/releases/download/${compose}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-100 617 0 617 0 0 1434 0 --:--:-- --:--:-- --:--:-- 1438
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:- 1 15.4M 1 186k 0 0 102k 0 0:02:34 0:00:01 0:02:3 12 15.4M 12 1954k 0 0 697k 0 0:00:22 0:00:02 0:00:2 37 15.4M 37 5837k 0 0 1534k 0 0:00:10 0:00:03 0:00:0 66 15.4M 66 10.1M 0 0 2168k 0 0:00:07 0:00:04 0:00:0 92 15.4M 92 14.2M 0 0 2522k 0 0:00:06 0:00:05 0:00:0100 15.4M 100 15.4M 0 0 2559k 0 0:00:06 0:00:06 --:--:-- 3591k
username@username-VirtualBox:~$ sudo chmod 0755 /usr/local/bin/docker-compose
username@username-VirtualBox:~$ docker-compose -v
docker-compose version 1.24.0, build 0aa59064
もしProxy配下の環境であれば、「systemd時代のDockerをProxy環境下で使う」の手順に従い、設定を行います。本記事では手順は割愛しますが、設定した時の画面表示だけコピペしておきます。
username@username-VirtualBox:~$ sudo mkdir -p /etc/systemd/system/docker.service.d
[sudo] username のパスワード:
username@username-VirtualBox:~$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy:8080/"
username@username-VirtualBox:~$ sudo vim /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=http://proxy:8080/"
username@username-VirtualBox:~$ sudo systemctl daemon-reload
username@username-VirtualBox:~$ sudo systemctl restart docker
Ubuntuの仮想マシンにDockerコンテナ docker-ipv6nat と metasploit-framework を導入し、MetasploitableとのIPv6の疎通を確認する
docker-ipv6natの機能については、robbertkl/docker-ipv6nat のドキュメントをご参照ください。
docker-ipv6natのための前準備
Ubuntu側がIPv6をルーティングするために、カーネルにip6_tablesモジュールが組み込まれている必要があります。
lsmodしてip6_tablesがあるか確認:
lsmod | grep tables
username@username-VirtualBox:~$ lsmod | grep tables
ip_tables 28672 2 iptable_filter,iptable_nat
x_tables 40960 5 xt_conntrack,iptable_filter,ipt_MASQUERADE,xt_addrtype,ip_tables
ip6_tablesがなければ、以下を実行します。
sudo -i
echo "ip6_tables" >> /etc/modules
Ubuntuを再起動後、lsmodしてip6_tablesがあることを確認します。
lsmod | grep tables
username@username-VirtualBox:~$ lsmod | grep tables
ip6_tables 28672 0
ip_tables 28672 2 iptable_filter,iptable_nat
x_tables 40960 6 xt_conntrack,iptable_filter,ipt_MASQUERADE,xt_addrtype,ip6_tables,ip_tables
ipv6natコンテナの起動
この記事 を真似して、docker-composeで起動することにしました。起動場所は「~/ipv6nat」にしました。
以下のようにdocker-compose.ymlを用意します。
mkdir ~/ipv6nat
cd ~/ipv6nat
vim docker-compose.yml
version: '3'
services:
driver:
image: robbertkl/ipv6nat
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
privileged: true
network_mode: "host"
起動します。
docker-compose up -d
起動確認。
username@username-VirtualBox:~/ipv6nat$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------
ipv6nat_driver_1 /docker-ipv6nat-compat --retry Up
ネットワーク確認
username@username-VirtualBox:~$ brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242f55bb006 no
username@username-VirtualBox:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d2635c53d8a7 bridge bridge local
afd89bc5a48c host host local
34d1c4e2b022 none null local
IPv6が有効なブリッジの作成と、metasploit-frameworkコンテナからの利用
これも この記事 を真似して、docker-composeで起動することにしました。起動場所は「~/metasploit」にしました。
以下のように、IPv6疎通確認用に仮のdocker-compose.ymlを用意します(後でmetasploitの部分を書き換えます)。
net6のsubnetには、適当なプライベートIPアドレスを設定します。
mkdir ~/metasploit
cd ~/metasploit
vim docker-compose.yml
version: '2.1'
networks:
net6:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: fd00:1:2::/64
services:
metasploit:
image: metasploitframework/metasploit-framework
entrypoint: ["bash"]
networks:
- net6
tty: true
起動します。
docker-compose up -d
起動確認。
username@username-VirtualBox:~/metasploit$ docker-compose ps
Name Command State Ports
-------------------------------------------------
metasploit_metasploit_1 bash Up
必要なDockerイメージのダウンロードが完了していますので、外部との接続(NAT接続)をオフにします。
ネットワーク確認
username@username-VirtualBox:~/metasploit$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:0b:63:1a brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:36:cd:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.102/24 brd 192.168.10.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
inet6 fd00:10:10::102/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::7a38:9acf:f826:a016/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:f5:5b:b0:06 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
5: br-aa9b8c60c86e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:61:79:cc:fe brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-aa9b8c60c86e
valid_lft forever preferred_lft forever
inet6 fd00:1:2::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::42:61ff:fe79:ccfe/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link
valid_lft forever preferred_lft forever
7: veth101c9e0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-aa9b8c60c86e state UP group default
link/ether 16:5b:a2:b5:30:8e brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::145b:a2ff:feb5:308e/64 scope link
valid_lft forever preferred_lft forever
username@username-VirtualBox:~/metasploit$ brctl show
bridge name bridge id STP enabled interfaces
br-aa9b8c60c86e 8000.02426179ccfe no veth101c9e0
docker0 8000.0242f55bb006 no
username@username-VirtualBox:~/metasploit$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d2635c53d8a7 bridge bridge local
afd89bc5a48c host host local
aa9b8c60c86e metasploit_net6 bridge local
34d1c4e2b022 none null local
metasploit_net6というブリッジが増えていることが確認できます。これはIPv6が有効なブリッジであり、このブリッジ上でIPv6でもNAT接続が可能となります。
IPv6疎通確認のために、起動したコンテナに入ります。
docker exec -it metasploit_metasploit_1 bash
無事に入れたら、IPアドレスを確認します。
ip a
画面から処理結果をコピペ:
username@username-VirtualBox:~/metasploit$ docker exec -it metasploit_metasploit_1 bash
bash-4.4# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fd00:1:2::2/64 scope global flags 02
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:2/64 scope link
valid_lft forever preferred_lft forever
eth0のIPアドレスが自動割当されていて、IPv6アドレスはdocker-compose.ymlで指定したsubnet下のアドレスになっていることが確認できました。
VirtualBoxからMetasploitable2の仮想マシンを起動し(ログインする必要はありません)、このDockerコンテナからpingを発行してみます。
ping 192.168.10.101
ping6 fd00:10:10::101
以下のように、pingが通れば成功です。
bash-4.4# ping 192.168.10.101
PING 192.168.10.101 (192.168.10.101): 56 data bytes
64 bytes from 192.168.10.101: seq=0 ttl=63 time=0.685 ms
64 bytes from 192.168.10.101: seq=1 ttl=63 time=0.916 ms
64 bytes from 192.168.10.101: seq=2 ttl=63 time=0.664 ms
64 bytes from 192.168.10.101: seq=3 ttl=63 time=0.800 ms
^C
--- 192.168.10.101 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.664/0.766/0.916 ms
bash-4.4# ping6 fd00:10:10::101
PING fd00:10:10::101 (fd00:10:10::101): 56 data bytes
64 bytes from fd00:10:10::101: seq=0 ttl=63 time=0.789 ms
64 bytes from fd00:10:10::101: seq=1 ttl=63 time=0.660 ms
64 bytes from fd00:10:10::101: seq=2 ttl=63 time=0.742 ms
64 bytes from fd00:10:10::101: seq=3 ttl=63 time=0.567 ms
^C
--- fd00:10:10::101 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.567/0.689/0.789 ms
疎通が確認できたら、Dockerコンテナからexitして、docker-compose stopもしておきます。
bash-4.4# exit
username@username-VirtualBox:~/metasploit$ docker-compose stop
Stopping metasploit_metasploit_1 ... done
username@username-VirtualBox:~/metasploit$ docker-compose ps
Name Command State Ports
--------------------------------------------------
metasploit_metasploit_1 bash Exit 0
metasploit-frameworkのDockerコンテナからMetasploitableに対し、IPv4とIpv6の両アドレスにポートスキャンを行い、結果をPostgreSQLに格納する
PostgreSQL環境
本記事ではホストマシンのMacOSで、PostgreSQLを有効にしたLaradockを立ち上げており、Mac上でlocalhostのポート5432でPostgreSQLにアクセスできます(ローカルポートフォワード)。
本記事の環境からは、192.168.10.1でPostgreSQLにアクセスできるはずです(後で確認します)。
PostgreSQLの環境設定については、以前書いた記事「PostgreSQLを操作するAPIを提供する、PostgRESTとPostGraphileを両方試してみた」をご参照ください(本記事では環境設定手順は割愛します)。
nmapのオプションを保守的に決める
ポートスキャンにはnmapを使用します。
セキュリティチェックのファーストステップとして行うことが目的なので、オプションは極力保守的かつ基本的なものに留めることにします。
バージョンスキャンをやめておく
インフラエンジニア教本――セキュリティ実践技術編 (Software Design[別冊]) p.127によれば、TCP/9100〜9107のポートはプリンタで利用されており、バージョンスキャンにより大量の印刷が行われる可能性があるため、バージョンスキャンから除外されているとのことです。
本記事ではバージョンスキャンそのものを行わないことにします。
OS検出をやめておく
古い本なので今は事情が違うかもしれませんが、スティーリング・ザ・ネットワーク―いかにしてネットワークは侵入されるか p.3によれば、OSフィンガープリント機能を使うとターゲットをダウンさせることがあるそうです。
本記事ではOS検出を行わないことにします。
本記事で避けるオプションのまとめ
-sV:バージョンスキャン
-O:OS検出
-A:-sV、-O等を組み合わせたもの
本記事で採用するオプション
-6:IPv6スキャンを有効にする(IPv6の時に指定)
-v:verbose
-n:DNSによる逆引きを行わない(時間節約)
-Pn:システムの起動状態の確認にpingを使わず、ホストが生存しているとみなす。ICMPを許可していないネットワークに使う。
-sS:TCP SYNスキャン(管理者ユーザで実行する必要あり)
-sU:UDPスキャン
-iL :ホストのリストから入力
metasploitの環境設定
ログファイル格納用のディレクトリを作成します。
cd ~/metasploit
mkdir logs
docker-compose.ymlを以下のように書き換えます。データベース名をmetasploit_dbにしましたが、何でも良いです。
vim docker-compose.yml
version: '2.1'
networks:
net6:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: fd00:1:2::/64
services:
metasploit:
image: metasploitframework/metasploit-framework
environment:
DATABASE_URL: postgres://default:secret@192.168.10.1:5432/metasploit_db
RUN_URL: /root/metasploit
volumes:
- ${HOME}/metasploit:/root/metasploit
entrypoint: "bash -c /root/metasploit/cmd.sh"
networks:
- net6
docker-compose.ymlのentrypointで指定したcmd.shを作成します。
vim cmd.sh
#!/bin/bash
# ホスト側にマウントしているディレクトリで実行する
cd ${RUN_URL}
# msfconsoleのログファイル名(正常実行されたらnmapの結果はPostgreSQLに格納されるのでそっちを見る)
LOGFILE_NAME="${RUN_URL}/logs/msfconsole-`date +%Y-%m-%d_%H%M%S`.log"
# msfconsoleのログファイル設定をリソースファイルに出力
echo "spool ${LOGFILE_NAME}" > run.rc
# msfconsoleで実行するコマンド群を、#行と空行を削除しながらリソースファイルに出力
cat msfconsole.cmd | grep -v '^#' | sed '/^$/d' >> run.rc
# msfconsoleでリソースファイルを実行。ここでnmapを実行し、結果をPostgreSQLに格納している。
$APP_HOME/msfconsole -r run.rc
# ログファイルのエスケープシーケンスを削除して見やすくする
sed -i -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?m//g" ${LOGFILE_NAME}
このcmd.shに実行権限を与えます。
chmod a+x cmd.sh
msfconsole(Metasploitのコンソール)で実行するコマンド群を作成します。このファイルは、cmd.shから使用されます。
今回は試行ということで、処理時間短縮のため、nmapのオプションに-Fを加えました(100ポートのみ実施されます)。
vim msfconsole.cmd
# データベースに接続する
<ruby>
run_single("db_connect #{ENV['DATABASE_URL']}") if ENV['DATABASE_URL']
</ruby>
# 現在のデータベースを確認する
db_status
# データベースの古いデータを消す
hosts -d
# nmapを実行して結果をデータベースに格納する
db_nmap -F -v -n -Pn -sS -sU -iL hosts4.txt
db_nmap -F -6 -v -n -Pn -sS -sU -iL hosts6.txt
# nmapの結果を表示する
hosts
services
# データベースを切断してmsfconsoleからも抜ける
db_disconnect
exit
ポートスキャンするホストのリストを作成します。本記事ではMetasploitable2のIPアドレスを書き込みます。
vim hosts4.txt
192.168.10.101
vim hosts6.txt
fd00:10:10::101
ポートスキャン実行
以下を実行すると、Dockerコンテナが立ち上がり、ポートスキャンが実行された後、Dockerコンテナが終了します。
docker-compose up -d
途中経過を見るには、以下を実行します。
正常に動いている様子であれば、logsディレクトリに出力中のログファイルをtail -fするのも良いです。
docker-compose logs
処理が終了したかを調べるには、以下を実行します。
docker-compose ps
logsディレクトリに以下の内容のログが出力されました。
[*] Spooling to file /root/metasploit/logs/msfconsole-2019-07-19_063414.log...
[*] resource (run.rc)> Ruby Code (71 bytes)
Connected to Postgres data service: 192.168.10.1/metasploit_db
resource (run.rc)> db_status
[*] Connected to metasploit_db. Connection type: postgresql. Connection name: YjL7nxEt.
resource (run.rc)> hosts -d
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
resource (run.rc)> db_nmap -F -v -n -Pn -sS -sU -iL hosts4.txt
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-19 06:34 UTC
[*] Nmap: Initiating SYN Stealth Scan at 06:34
[*] Nmap: Scanning 192.168.10.101 [100 ports]
[*] Nmap: Discovered open port 139/tcp on 192.168.10.101
[*] Nmap: Discovered open port 21/tcp on 192.168.10.101
[*] Nmap: Discovered open port 445/tcp on 192.168.10.101
[*] Nmap: Discovered open port 23/tcp on 192.168.10.101
[*] Nmap: Discovered open port 25/tcp on 192.168.10.101
[*] Nmap: Discovered open port 53/tcp on 192.168.10.101
[*] Nmap: Discovered open port 111/tcp on 192.168.10.101
[*] Nmap: Discovered open port 22/tcp on 192.168.10.101
[*] Nmap: Discovered open port 3306/tcp on 192.168.10.101
[*] Nmap: Discovered open port 80/tcp on 192.168.10.101
[*] Nmap: Discovered open port 5900/tcp on 192.168.10.101
[*] Nmap: Discovered open port 5432/tcp on 192.168.10.101
[*] Nmap: Discovered open port 8009/tcp on 192.168.10.101
[*] Nmap: Discovered open port 6000/tcp on 192.168.10.101
[*] Nmap: Discovered open port 514/tcp on 192.168.10.101
[*] Nmap: Discovered open port 2121/tcp on 192.168.10.101
[*] Nmap: Discovered open port 2049/tcp on 192.168.10.101
[*] Nmap: Discovered open port 513/tcp on 192.168.10.101
[*] Nmap: Increasing send delay for 192.168.10.101 from 0 to 5 due to 43 out of 143 dropped probes since last increase.
[*] Nmap: Completed SYN Stealth Scan at 06:34, 1.63s elapsed (100 total ports)
[*] Nmap: Initiating UDP Scan at 06:34
[*] Nmap: Scanning 192.168.10.101 [100 ports]
[*] Nmap: Discovered open port 2049/udp on 192.168.10.101
[*] Nmap: Discovered open port 111/udp on 192.168.10.101
[*] Nmap: Increasing send delay for 192.168.10.101 from 0 to 50 due to max_successful_tryno increase to 4
[*] Nmap: Increasing send delay for 192.168.10.101 from 50 to 100 due to max_successful_tryno increase to 5
[*] Nmap: Increasing send delay for 192.168.10.101 from 100 to 200 due to max_successful_tryno increase to 6
[*] Nmap: Increasing send delay for 192.168.10.101 from 200 to 400 due to max_successful_tryno increase to 7
[*] Nmap: Increasing send delay for 192.168.10.101 from 400 to 800 due to 11 out of 12 dropped probes since last increase.
[*] Nmap: UDP Scan Timing: About 50.67% done; ETC: 06:35 (0:00:30 remaining)
[*] Nmap: Discovered open port 53/udp on 192.168.10.101
[*] Nmap: Discovered open port 137/udp on 192.168.10.101
[*] Nmap: Completed UDP Scan at 06:36, 99.84s elapsed (100 total ports)
[*] Nmap: Nmap scan report for 192.168.10.101
[*] Nmap: Host is up (0.0011s latency).
[*] Nmap: Not shown: 176 closed ports
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 21/tcp open ftp
[*] Nmap: 22/tcp open ssh
[*] Nmap: 23/tcp open telnet
[*] Nmap: 25/tcp open smtp
[*] Nmap: 53/tcp open domain
[*] Nmap: 80/tcp open http
[*] Nmap: 111/tcp open rpcbind
[*] Nmap: 139/tcp open netbios-ssn
[*] Nmap: 445/tcp open microsoft-ds
[*] Nmap: 513/tcp open login
[*] Nmap: 514/tcp open shell
[*] Nmap: 2049/tcp open nfs
[*] Nmap: 2121/tcp open ccproxy-ftp
[*] Nmap: 3306/tcp open mysql
[*] Nmap: 5432/tcp open postgresql
[*] Nmap: 5900/tcp open vnc
[*] Nmap: 6000/tcp open X11
[*] Nmap: 8009/tcp open ajp13
[*] Nmap: 53/udp open domain
[*] Nmap: 69/udp open|filtered tftp
[*] Nmap: 111/udp open rpcbind
[*] Nmap: 137/udp open netbios-ns
[*] Nmap: 138/udp open|filtered netbios-dgm
[*] Nmap: 2049/udp open nfs
[*] Nmap: Read data files from: /usr/bin/../share/nmap
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 101.54 seconds
[*] Nmap: Raw packets sent: 392 (14.597KB) | Rcvd: 258 (12.842KB)
resource (run.rc)> db_nmap -F -6 -v -n -Pn -sS -sU -iL hosts6.txt
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-19 06:36 UTC
[*] Nmap: Initiating SYN Stealth Scan at 06:36
[*] Nmap: Scanning fd00:10:10::101 [100 ports]
[*] Nmap: Discovered open port 22/tcp on fd00:10:10::101
[*] Nmap: Discovered open port 53/tcp on fd00:10:10::101
[*] Nmap: Discovered open port 2121/tcp on fd00:10:10::101
[*] Nmap: Discovered open port 5432/tcp on fd00:10:10::101
[*] Nmap: Increasing send delay for fd00:10:10::101 from 0 to 5 due to 43 out of 143 dropped probes since last increase.
[*] Nmap: Completed SYN Stealth Scan at 06:36, 1.64s elapsed (100 total ports)
[*] Nmap: Initiating UDP Scan at 06:36
[*] Nmap: Scanning fd00:10:10::101 [100 ports]
[*] Nmap: Increasing send delay for fd00:10:10::101 from 0 to 50 due to max_successful_tryno increase to 4
[*] Nmap: Increasing send delay for fd00:10:10::101 from 50 to 100 due to max_successful_tryno increase to 5
[*] Nmap: Increasing send delay for fd00:10:10::101 from 100 to 200 due to max_successful_tryno increase to 6
[*] Nmap: Increasing send delay for fd00:10:10::101 from 200 to 400 due to max_successful_tryno increase to 7
[*] Nmap: Increasing send delay for fd00:10:10::101 from 400 to 800 due to 11 out of 12 dropped probes since last increase.
[*] Nmap: UDP Scan Timing: About 47.00% done; ETC: 06:37 (0:00:35 remaining)
[*] Nmap: Discovered open port 53/udp on fd00:10:10::101
[*] Nmap: Completed UDP Scan at 06:37, 93.46s elapsed (100 total ports)
[*] Nmap: Nmap scan report for fd00:10:10::101
[*] Nmap: Host is up (0.00082s latency).
[*] Nmap: Not shown: 195 closed ports
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 22/tcp open ssh
[*] Nmap: 53/tcp open domain
[*] Nmap: 2121/tcp open ccproxy-ftp
[*] Nmap: 5432/tcp open postgresql
[*] Nmap: 53/udp open domain
[*] Nmap: Read data files from: /usr/bin/../share/nmap
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 95.42 seconds
[*] Nmap: Raw packets sent: 366 (22.356KB) | Rcvd: 262 (20.118KB)
resource (run.rc)> hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
192.168.10.101 Unknown device
fd00:10:10::101 Unknown device
resource (run.rc)> services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.10.101 21 tcp ftp open
192.168.10.101 22 tcp ssh open
192.168.10.101 8009 tcp ajp13 open
192.168.10.101 23 tcp telnet open
192.168.10.101 25 tcp smtp open
192.168.10.101 53 tcp domain open
192.168.10.101 6000 tcp x11 open
192.168.10.101 5900 tcp vnc open
192.168.10.101 53 udp domain open
192.168.10.101 69 udp tftp unknown
192.168.10.101 80 tcp http open
192.168.10.101 111 tcp rpcbind open
192.168.10.101 111 udp rpcbind open
192.168.10.101 137 udp netbios-ns open
192.168.10.101 3306 tcp mysql open
192.168.10.101 139 tcp netbios-ssn open
192.168.10.101 445 tcp microsoft-ds open
192.168.10.101 513 tcp login open
192.168.10.101 514 tcp shell open
192.168.10.101 2049 tcp nfs open
192.168.10.101 2049 udp nfs open
192.168.10.101 5432 tcp postgresql open
192.168.10.101 2121 tcp ccproxy-ftp open
192.168.10.101 138 udp netbios-dgm unknown
fd00:10:10::101 5432 tcp postgresql open
fd00:10:10::101 2121 tcp ccproxy-ftp open
fd00:10:10::101 53 udp domain open
fd00:10:10::101 53 tcp domain open
fd00:10:10::101 22 tcp ssh open
resource (run.rc)> db_disconnect
Successfully disconnected from the data service: local_db_service.
resource (run.rc)> exit
IPv6のポートスキャンでも、TCP・UDP共にopenしているポートの存在が確認できます。さすがMetasploitable。
PostgreSQL確認
処理結果がPostgreSQLに格納されたかどうか、調べてみました。
$ psql -U default -h localhost -p 5432 -d metasploit_db
Password for user default:
psql (11.3, server 11.4)
Type "help" for help.
metasploit_db=# select * from hosts;
id | created_at | address | mac | comm | name | state | os_name | os_flavor | os_sp | os_lang | arch | workspace_id | updated_at | purpose | info | comments | scope | virtual_host | note_count | vuln_count | service_count | host_detail_count | exploit_attempt_count | cred_count | detected_arch | os_family
----+----------------------------+-----------------+-----+------+------+-------+---------+-----------+-------+---------+------+--------------+----------------------------+---------+------+----------+-------+--------------+------------+------------+---------------+-------------------+-----------------------+------------+---------------+-----------
1 | 2019-07-19 06:36:06.545178 | 192.168.10.101 | | | | alive | Unknown | | | | | 1 | 2019-07-19 06:36:10.039214 | device | | | | | 0 | 0 | 24 | 0 | 0 | 0 | |
2 | 2019-07-19 06:37:45.773489 | fd00:10:10::101 | | | | alive | Unknown | | | | | 1 | 2019-07-19 06:37:46.255952 | device | | | | | 0 | 0 | 5 | 0 | 0 | 0 | |
(2 rows)
metasploit_db=# select * from services;
id | host_id | created_at | port | proto | state | name | updated_at | info
----+---------+----------------------------+------+-------+---------+--------------+----------------------------+------
1 | 1 | 2019-07-19 06:36:06.694065 | 21 | tcp | open | ftp | 2019-07-19 06:36:06.694065 |
2 | 1 | 2019-07-19 06:36:06.92518 | 22 | tcp | open | ssh | 2019-07-19 06:36:06.92518 |
3 | 1 | 2019-07-19 06:36:07.148219 | 23 | tcp | open | telnet | 2019-07-19 06:36:07.148219 |
4 | 1 | 2019-07-19 06:36:07.277935 | 25 | tcp | open | smtp | 2019-07-19 06:36:07.277935 |
5 | 1 | 2019-07-19 06:36:07.396815 | 53 | tcp | open | domain | 2019-07-19 06:36:07.396815 |
6 | 1 | 2019-07-19 06:36:07.555868 | 80 | tcp | open | http | 2019-07-19 06:36:07.555868 |
7 | 1 | 2019-07-19 06:36:07.667929 | 111 | tcp | open | rpcbind | 2019-07-19 06:36:07.667929 |
8 | 1 | 2019-07-19 06:36:07.775778 | 139 | tcp | open | netbios-ssn | 2019-07-19 06:36:07.775778 |
9 | 1 | 2019-07-19 06:36:07.869133 | 445 | tcp | open | microsoft-ds | 2019-07-19 06:36:07.869133 |
10 | 1 | 2019-07-19 06:36:07.964888 | 513 | tcp | open | login | 2019-07-19 06:36:07.964888 |
11 | 1 | 2019-07-19 06:36:08.075891 | 514 | tcp | open | shell | 2019-07-19 06:36:08.075891 |
12 | 1 | 2019-07-19 06:36:08.175428 | 2049 | tcp | open | nfs | 2019-07-19 06:36:08.175428 |
13 | 1 | 2019-07-19 06:36:08.278987 | 2121 | tcp | open | ccproxy-ftp | 2019-07-19 06:36:08.278987 |
14 | 1 | 2019-07-19 06:36:08.3691 | 3306 | tcp | open | mysql | 2019-07-19 06:36:08.3691 |
15 | 1 | 2019-07-19 06:36:08.471806 | 5432 | tcp | open | postgresql | 2019-07-19 06:36:08.471806 |
16 | 1 | 2019-07-19 06:36:08.63471 | 5900 | tcp | open | vnc | 2019-07-19 06:36:08.63471 |
17 | 1 | 2019-07-19 06:36:08.840415 | 6000 | tcp | open | x11 | 2019-07-19 06:36:08.840415 |
18 | 1 | 2019-07-19 06:36:09.146391 | 8009 | tcp | open | ajp13 | 2019-07-19 06:36:09.146391 |
19 | 1 | 2019-07-19 06:36:09.426134 | 53 | udp | open | domain | 2019-07-19 06:36:09.426134 |
20 | 1 | 2019-07-19 06:36:09.594851 | 69 | udp | unknown | tftp | 2019-07-19 06:36:09.594851 |
21 | 1 | 2019-07-19 06:36:09.696363 | 111 | udp | open | rpcbind | 2019-07-19 06:36:09.696363 |
22 | 1 | 2019-07-19 06:36:09.790798 | 137 | udp | open | netbios-ns | 2019-07-19 06:36:09.790798 |
23 | 1 | 2019-07-19 06:36:09.89251 | 138 | udp | unknown | netbios-dgm | 2019-07-19 06:36:09.89251 |
24 | 1 | 2019-07-19 06:36:10.002336 | 2049 | udp | open | nfs | 2019-07-19 06:36:10.002336 |
25 | 2 | 2019-07-19 06:37:45.80868 | 22 | tcp | open | ssh | 2019-07-19 06:37:45.80868 |
26 | 2 | 2019-07-19 06:37:45.922504 | 53 | tcp | open | domain | 2019-07-19 06:37:45.922504 |
27 | 2 | 2019-07-19 06:37:46.019622 | 2121 | tcp | open | ccproxy-ftp | 2019-07-19 06:37:46.019622 |
28 | 2 | 2019-07-19 06:37:46.124534 | 5432 | tcp | open | postgresql | 2019-07-19 06:37:46.124534 |
29 | 2 | 2019-07-19 06:37:46.219566 | 53 | udp | open | domain | 2019-07-19 06:37:46.219566 |
(29 rows)
metasploit_db=# \q
以上です。