NFS服务配置漏洞
简介
NFS(Network File System)
即网络文件系统,是FreeBSD
支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP
网络共享资源。在NFS
的应用中,本地NFS
的客户端应用可以透明地读写位于远端NFS
服务器上的文件,就像访问本地文件一样。如今NFS
具备了防止被利用导出文件夹的功能,但遗留系统中的NFS
服务配置不当,则仍可能遭到恶意攻击者的利用。
发现NFS服务
NFS服务的默认开放端口为2049/TCP,因此我们可以借助Nmap
来针对性的进行探测。
此外,我们也可以通过rpcinfo
命令来确定主机上是否运行或挂载了NFS服务。
显示导出文件夹列表
以下命令将会检索给定主机的导出文件夹列表,这些信息将被用于访问这些文件夹。
当showmount
命令与以下参数一起使用时,可以为我们检索到更多的信息,例如:
- 挂载点
- 连接的主机
- 目录
另外,Metasploit
框架中也有一个模块,可以用来列出导出文件夹。
在这里我再推荐一个实用的小工具NFS Shell,它可以连接到NFS共享并可以帮助我们手动识别一些常见的安全问题。想要使用它我们首先需要安装以下依赖项:
使用以下命令获取导出文件夹列表:
访问NFS共享
导出的文件夹可以通过创建一个空的本地文件夹,并将共享挂载到该文件夹来访问,如下所示:
当成功验证共享挂载后,我们可以通过以下命令来列出所有的本地磁盘信息。
此时,我们可以像访问其他文件夹一样轻松的访问共享文件夹。
UID操作
如果对于共享上的文件我们没有读取权限该怎么办?其实这也很简单,我们可以伪造文件所有者的UID来欺骗NFS服务器。以下展示的是NFS文件访问拒绝提示:
首先,我们通过以下命令来获取文件所有者的UID(用户ID)
和GUID(组ID)
。
接着,我们在本地创建一个新用户,并将该用户的UID
和名称修改为与文件所有者相同。
UID
可以在passwd
文件中更改。
从挂载的文件夹执行su
命令,并使用之前创建的已知密码,此时当前用户将会被切换到新用户。
由于该文件的UID与新用户的UID相同,因此系统会误认为这是文件权限的所有者,这样我们就可以以一个合法的用户身份来读取文件的内容了。
之所以造成这种问题,原因在于导出文件夹并未设置root_squash选项。root_squash登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份,以防止越权访问。
可以在以下位置启用或禁用root_squash选项:
如果passwd文件具有写入权限,那么我们可以通过将一些非特权用户的UID更改为0,使其具有根级别的访问权限。从下图中可以看到,我将service用户的UID修改为了0,此时该用户将具备root的访问权限。
通过SSH连接命令再次与目标服务器建立连接,service将获取到一个root访问权限。
shell访问
根据存储在导出文件夹中的文件,可能可以通过SSH或RSH和Rlogin来获取到shell访问权限。 我们着重来关注以下两个文件:
- authorized_keys
- rhosts
这两个文件都隐藏在NFS文件夹中,我们可以利用以下命令来确定这些文件的存在。
生成一个SSH密钥对并将其公钥添加到授权密钥列表中,那样我们就可以通过NFS服务器上的SSH与其建立连接了。
.rhosts
文件用来配置哪些远程主机或用户可以访问系统上的本地帐户。如果.rhosts
文件的内容为++符号,则说明它允许来自网络上的任何主机和用户的连接。
以下命令将允许系统的root用户直接连接目标系统,系统将不会提示密码输入,因为来自系统的所有用户都将被信任。
或者如果.rhosts的内容不同,则检查文件将有助于确定哪些主机和用户是可信的,因此可以在无需密码的情况下进行身份验证。
转自:https://www.freebuf.com/articles/network/159468.html
__EOF__
本文链接:https://www.cnblogs.com/lktop/p/13734533.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通