NFS no_root_squash/no_all_squash misconfiguration PE
最后更新于
最后更新于
读取 _ /etc/exports _ 文件,如果找到某个目录配置为 no_root_squash,那么您可以从客户端访问该目录,并在其中写入文件,就好像您是本地机器的root一样。
no_root_squash:此选项基本上授予客户端上的root用户访问NFS服务器上文件的权限。这可能导致严重的安全问题。
no_all_squash:这类似于 no_root_squash 选项,但适用于非root用户。想象一下,您以nobody用户的身份获得了shell;检查了 /etc/exports 文件;存在 no_all_squash 选项;检查了 /etc/passwd 文件;模拟一个非root用户;以该用户的身份创建一个suid文件(通过使用nfs进行挂载)。以nobody用户身份执行suid文件并成为不同的用户。
如果您发现了此漏洞,您可以利用它:
在客户端机器上挂载该目录,并以root身份将 /bin/bash 二进制文件复制到挂载的文件夹中,并赋予其SUID权限,然后从受害者机器上执行**该bash二进制文件。
根据内核版本的不同,库的编译步骤可能需要进行调整。在这种特定情况下,fallocate系统调用被注释掉了。编译过程涉及以下命令:
该利用涉及创建一个简单的C程序(pwn.c
),将权限提升至root,然后执行一个shell。该程序被编译,生成的二进制文件(a.out
)被放置在共享目录中,并使用ld_nfs.so
来伪造RPC调用中的uid:
编译利用代码:
将利用程序放置在共享目录中,并通过伪造uid修改其权限:
执行利用程序以获取root权限:
一旦获得root访问权限,为了与NFS共享进行交互而不更改所有权(以避免留下痕迹),使用一个Python脚本(nfsh.py)。该脚本调整uid以匹配所访问文件的uid,允许在共享目录中与文件进行交互而不会出现权限问题:
运行如下:
在客户端机器上挂载该目录,并以root身份复制我们编译好的恶意载荷到挂载的文件夹中,该载荷将滥用SUID权限,赋予它SUID权限,并从受害者机器上执行该二进制文件(您可以在这里找到一些)。
该场景涉及利用本地机器上挂载的NFS共享,利用NFSv3规范中的一个缺陷,允许客户端指定其uid/gid,从而可能实现未经授权的访问。利用涉及使用 ,这是一个允许伪造NFS RPC调用的库。
如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看!
获取
探索,我们的独家
加入 💬 或 或 关注我的Twitter 🐦 。
通过向和 github仓库提交PR来分享您的黑客技巧。