# NFS配置不当那些事

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-09-16T06:44:00Z
Canonical: https://wepostx.com/topics/1044

> 乌云历史资料归档
>
> **原始作者：** Blood_Zero
> **原始编号：** superkieran-wooyundrops:769
> **原始发布时间：** 2015-09-16 14:44
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 背景

NFS（Network File System）：是FreeBSD支持的文件系统中的一种，它允许网络中的计算机之间通过TCP/IP网络共享资源；
NFS配置：（声明：以下NFS实验是在RedHat7上完成）
首先安装NFS（我的机子是最小化的系统，需要自己安装）：

```text
#!bash yum install nfs-utils.x86_64 -y
```
启动服务：

```text
#!bash systemctl start rpcbind（如果这个服务不启动，nfs服务会启动失败） systemctl start nfs-server systemctl enable rpcbind;systemctl enable nfs-server 开机自启 firewall-cmd --permanent --add-service=nfs 让防火墙通过NFS服务 firewall-cmd --permanent --add-service=rpc-bind 通过rpc服务（如果不开启，rpcinfo就不能扫描） firewall-cmd --permanent --add-service=mountd 通过mountd服务（如果不开启，不能远程showmount） firewall-cmd --reload 配置： mkdir /pentest（创建一个共享目录） vi /etc/exports cat /etc/exports / *(rw,sync,no_root_squash) （注意：问题就出在这个地方，原理在文后解释） exportfs -r （启动共享） showmount -e （查看共享） 客户端挂载： mount -t nfs NFS服务器IP:/ /tmp/test （挂载到本地的/tmp/test中）
```

![原文图片](/media/2016/06/6c08b2b11b226ee3a17c9ac90f55936f)

![原文图片](/media/2016/06/8291140f1c2dae286a5fb5dd1cfd8cd1)

# 0x01 检测

对存在NFS配置错误的机子进行扫描：rpcinfo -p 192.168.119.131

![原文图片](/media/2016/06/d3a765147dcab49a632203952092759c)

查看nfs挂载新型：showmount -e 192.168.119.131

![原文图片](/media/2016/06/bef7208c495767827b2aebffd2bad884)

得到这些信息，我们就可以挂载NFS，并传输ssh永久连接文件

![原文图片](/media/2016/06/e74f9a7eba879be47374ceba06d2de51)

![原文图片](/media/2016/06/20ce2baeb8849ed681297dd6306c04ed)

# 0x02 总结

其实漏洞形成的原理就是权限不对，/etc/exports这个文件中的权限设置，我们上文采用的是root权限，所以导致服务器被入侵；
/etc/exports 文件格式

```text
<输出目录> [客户端1 选项（访问权限,用户映射,其他）] [客户端2 选项（访问权限,用户映射,其他）]
```
a. 输出目录：输出目录是指NFS系统中需要共享给客户机使用的目录；
b. 客户端：客户端是指网络中可以访问这个NFS输出目录的计算机
指定ip地址的主机：192.168.0.200
指定子网中的所有主机：192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主机：david.bsmart.cn
指定域中的所有主机：*.bsmart.cn
所有主机：*
c. 选项：选项用来设置输出目录的访问权限、用户映射等。
设置输出目录只读：ro
设置输出目录读写：rw
d. 用户映射选项
all_squash：将远程访问的所有普通用户及所属组都映射为匿名用户或用户组（nfsnobody）；
no_all_squash：与all_squash取反（默认设置）；
root_squash：将root用户及所属组都映射为匿名用户或用户组（默认设置）；
no_root_squash：与rootsquash取反；
anonuid=xxx：将远程访问的所有用户都映射为匿名用户，并指定该用户为本地用户（UID=xxx）；
anongid=xxx：将远程访问的所有用户组都映射为匿名用户组账户，并指定该匿名用户组账户为本地用户组账户（GID=xxx）；
e. 其它选项
secure：限制客户端只能从小于1024的tcp/ip端口连接nfs服务器（默认设置）；
insecure：允许客户端从大于1024的tcp/ip端口连接服务器；
sync：将数据同步写入内存缓冲区与磁盘中，效率低，但可以保证数据的一致性；
async：将数据先保存在内存缓冲区中，必要时才写入磁盘；
wdelay：检查是否有相关的写操作，如果有则将这些写操作一起执行，这样可以提高效率（默认设置）；
no_wdelay：若有写操作则立即执行，应与sync配合使用；
subtree：若输出目录是一个子目录，则nfs服务器将检查其父目录的权限(默认设置)；
no_subtree：即使输出目录是一个子目录，nfs服务器也不检查其父目录的权限，这样可以提高效率。

## Replies
