📚

NFSの情報収集 [enum-nfs]

2022/02/19に公開

対象ホスト上でNFSのサービスが稼動しているか確認

まずは、対象ホスト上でNFSが稼動しているか確認しましょう。みんな大好きnmapを使っていきます。
なお、IPアドレスは192.168.0.2としています。

sudo nmap -sS -Pn 192.168.0.2 -vv
# ---出力結果---
# # Nmap 7.92 scan initiated Mon Feb 14 21:41:15 2022 as: nmap -sS -Pn -vv -o result 192.168.0.2
# Nmap scan report for 192.168.0.2
# Host is up, received user-set (0.31s latency).
# Scanned at 2022-02-14 21:41:28 JST for 4s
# Not shown: 997 closed tcp ports (reset)
# PORT     STATE SERVICE REASON
# 22/tcp   open  ssh     syn-ack ttl 63
# 111/tcp  open  rpcbind syn-ack ttl 63
# 2049/tcp open  nfs     syn-ack ttl 63
# 
# Read data files from: /usr/bin/../share/nmap
# # Nmap done at Mon Feb 14 21:41:32 2022 -- 1 IP address (1 host up) scanned in 17.23 seconds

NFSは2049/tcpがウェルノウンポートです。
なお、nmapは基本の動作としてポート上でどのサービスが稼動しているかをウェルノウンポートで判断しているようです。ですので、サービスが別のポート番号で稼動していた場合はサービスの判定がうまくいきません。ポート番号ではなく返ってきたレスポンスを元にサービス判断をするには -sV オプションを使用します。

なお、以下のサンプルでは実行時間の短縮のため、スキャン対象のポートを2049だけに絞っています。

sudo nmap -sV -Pn -p2049 192.168.0.2 -vv
# ---出力結果---
# # Nmap 7.92 scan initiated Mon Feb 14 22:03:01 2022 as: nmap -sV -Pn -p2049 -vv -o result 192.168.0.2
# Nmap scan report for 192.168.0.2
# Host is up, received user-set (0.33s latency).
# Scanned at 2022-02-14 22:03:15 JST for 8s
# 
# PORT     STATE SERVICE REASON         VERSION
# 2049/tcp open  nfs     syn-ack ttl 63 3-4 (RPC #100003)
# 
# Read data files from: /usr/bin/../share/nmap
# Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# # Nmap done at Mon Feb 14 22:03:23 2022 -- 1 IP address (1 host up) scanned in 22.26 seconds

-sVオプションはサービスの稼動判定だけでなく、サービスのバージョンも判定しようとしてくれます。この結果では ver3~4であることが示唆されていますね。
さて、ここまででNFSのサービスがTCP2049番ポートで稼動していることがわかりましたので、次はどのようなフォルダを公開しているか等の情報を集めていきましょう。

公開されているファイルの確認

NFSの情報収集はnmapのスクリプト("nfs-ls.nse","nfs-showmount.nse","nfs-statfs.nse")もありますが、素直に専用のツールを使うほうがやりやすいです。 ここは nfs-commonというツール群を使っていきます。

nfs-toolには色々と種類があるのですが、ここで主に使っていくのは以下2つです。

  • showmount
  • mount.nfs
    showmountコマンドはNFSサーバへのマウント情報を出力するためのコマンドです。

まず、サーバで公開されているディレクトリを見てみましょう。-eオプションを使用します。

showmount -e 192.168.0.2
# ---出力結果---
# Export list for 192.168.0.2:
# /home *

/homeディレクトリが公開されていることが確認できました。
次に、このディレクトリをマウントしてみます。
マウント用のディレクトリを作成し、mount.nfsコマンドを使用してマウントします。

mkdir /tmp/mount      # <- マウント用ディレクトリの作成
sudo mount.nfs -r -v 192.168.0.2 :/home /tmp/mount # <- -rオプションを使用してread onlyでマウント(read-writeでマウントするには-wオプションを使用する)
# ---出力結果---
# mount.nfs: timeout set for Sat Feb 19 17:18:10 2022
# mount.nfs: trying text-based options 'vers=4.2,addr=192.168.0.27,clientaddr=192.168.0.1'
cd /tmp/mount # <- マウントしたディレクトリに移動

これでマウントが完了し、ディレクトリの中を覗けるようになりました。
次の記事で、 root_squash を無効にしているNFSサーバに対するexploitの手順についても書いていきたいと思います。

Discussion