hacktricks/network-services-pentesting/nfs-service-pentesting.md
2023-07-07 23:42:27 +00:00

12 KiB
Raw Blame History

2049 - NFSサービスのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

NFSは、ネットワーク上のファイルにアクセスし、それらをローカルのファイルディレクトリと同様に扱うためのクライアント/サーバーシステムです。SMBと同じ目的を持っていますが、SMBとは通信できません。

NFSプロトコルには、認証または認可のためのメカニズムはありません。認可は、サーバーがクライアントから提供されたユーザー情報をファイルシステムの情報に変換し、UNIXで必要な構文にできるだけ正確に変換することを担当します。

最も一般的な認証方法はUNIXのUID/GIDグループメンバーシップです。そのため、この構文がNFSプロトコルに適用される可能性が最も高いです。問題は、クライアントサーバー必ずしも同じUID/GIDのマッピングを持っている必要がないことです。サーバー側ではさらなるチェックは行われません。そのため、NFSは信頼できるネットワークでのみこの認証方法で使用する必要があります。

デフォルトポート: 2049/TCP/UDPバージョン4を除く、TCPまたはUDPのみ必要

2049/tcp open  nfs     2-3 (RPC #100003

バージョン

(From https://academy.hackthebox.com/module/112/section/1068)

バージョン 特徴
NFSv2 これは古いバージョンですが、多くのシステムでサポートされており、最初は完全にUDP上で動作していました。
NFSv3 変数サイズとより良いエラーレポートなど、より多くの機能を備えていますが、NFSv2クライアントと完全に互換性がありません。
NFSv4 Kerberosを含み、ファイアウォールやインターネットを介して動作し、ポートマッパーが不要になり、ACLをサポートし、状態ベースの操作を適用し、パフォーマンスの向上と高いセキュリティを提供します。また、最初のバージョンで状態を持つプロトコルを持っています。

列挙

便利なnmapスクリプト

nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share

便利なMetasploitモジュール

Metasploitモジュールは、NFSサービスのペンテストに役立つさまざまな機能を提供します。

nfs_enum

このモジュールは、NFS共有の情報を列挙するために使用されます。以下のコマンドを使用して実行します。

use auxiliary/scanner/nfs/nfsmount

nfs_showmount

このモジュールは、NFSサーバーがエクスポートしている共有を表示するために使用されます。以下のコマンドを使用して実行します。

use auxiliary/scanner/nfs/nfs_showmount

nfs_version

このモジュールは、NFSサーバーのバージョンを特定するために使用されます。以下のコマンドを使用して実行します。

use auxiliary/scanner/nfs/nfs_version

nfs_mount

このモジュールは、NFS共有をマウントするために使用されます。以下のコマンドを使用して実行します。

use exploit/linux/nfs/nfs_mount

nfs_rpcbind

このモジュールは、NFSサーバーのRPCバインドサービスを検出するために使用されます。以下のコマンドを使用して実行します。

use auxiliary/scanner/nfs/nfs_rpcbind

これらのMetasploitモジュールを使用することで、NFSサービスのペンテストに役立つ情報を取得できます。

scanner/nfs/nfsmount #Scan NFS mounts and list permissions

マウント

サーバーがマウント可能なフォルダを知るために、次のコマンドを使用してサーバーに問い合わせることができます。

showmount -e <IP>

次に、次のコマンドを使用してマウントします:

mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock

次の例では、バージョン2を使用するように指定する必要があります。なぜなら、バージョン2には認証や承認が一切ないからです。

例:

mkdir /mnt/new_back
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock

Permissions

もし、特定のユーザーにのみアクセス可能なファイルやフォルダUIDによって)が含まれているフォルダをマウントする場合、そのUIDを持つユーザーローカルに作成し、そのユーザーを使用してファイル/フォルダにアクセスすることができます。

NSFShell

ファイルを簡単にリストアップ、マウント、UIDとGIDを変更してアクセスするためには、nfsshellを使用することができます。

Nice NFSShell tutorial.

Config files

/etc/exports
/etc/lib/nfs/etab

危険な設定

(From https://academy.hackthebox.com/module/112/section/1068)

オプション 説明
rw 読み書きの権限を持つ。
insecure 1024以上のポートが使用される。
nohide エクスポートされたディレクトリの下に別のファイルシステムがマウントされている場合、このディレクトリは独自のエクスポートエントリでエクスポートされる。
no_root_squash rootによって作成されたすべてのファイルは、UID/GID 0で保持される。
no_all_squash

NFSの設定ミスを利用した特権昇格

NFS no_root_squashとno_all_squashの特権昇格

HackTricks自動コマンド

Protocol_Name: NFS    #Protocol Abbreviation if there is one.
Port_Number:  2049     #Comma separated if there is more than one.
Protocol_Description: Network File System         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for NFS
Note: |
It is a client/server system that allows users to access files across a network and treat them as if they resided in a local file directory.

#apt install nfs-common
showmount 10.10.10.180      ~or~showmount -e 10.10.10.180
should show you available shares (example /home)

mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
cd /mnt
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in

https://book.hacktricks.xyz/pentesting/nfs-service-pentesting

Entry_2:
Name: Nmap
Description: Nmap with NFS Scripts
Command: nmap --script=nfs-ls.nse,nfs-showmount.nse,nfs-statfs.nse -p 2049 {IP}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥