最近,在为客户执行渗透测试时,我遇到了一个漏洞,该漏洞几乎可危害所有范围内的系统。在本文中,我们将学习如何利用弱配置的NFS共享访问远程主机,然后进行特权升级。
网络文件系统(NFS):网络文件系统允许远程主机通过网络安装系统/目录。NFS服务器可以导出在远程Linux机器上安装的目录。这允许用户将数据集中共享到网络中的所有机器。
为了演示目的,我在本文中使用了Metasploitable。从http://sourceforge.net/projects/metasploitable/files/Metasploitable2/metasploitable-linux-2.0.0.zip/download下载Metasploitable VM。
设置它并运行VM。提示登录时输入“msfadmin”作为用户名和密码。通过运行“ifconfig”命令来记录托管机器的IP地址。为了模拟确切的场景,我已经将导出目录从“/”(root)修改为“/ etc / exports”文件下的“/ home”。该文件包含NFS的配置。完成更改后,运行以下命令重新启动NFS服务:
sudo /etc/init.d/nfs-kernel-server重新启动
现在,让我们开始我们的Kali Linux机器执行渗透测试。
第1步:从nmap服务指纹扫描开始,对主机的IP地址进行扫描:
nmap -sV 192.168.100.25
步骤2:端口扫描结果显示端口2049已打开并且nfs服务正在运行。
第3步:在Kali中使用showmount工具检查是否有任何共享可用于安装:
showmount -e 192.168.100.25
“home”目录是可安装的。请注意/home前面的星号,这意味着网络中的每台计算机都可以挂载本机的/home文件夹。如果您看到目录前面定义的任何IP地址或IP范围,那意味着只有具有该特定IP或范围的计算机才能挂载该目录,这是一项很好的安全措施。
第4步:在Kali的tmp文件夹下创建一个新目录,然后运行以下命令以在此新创建的目录上安装主目录。
mkdir / tmp / infosec mount -t nfs 192.168.100.25:/home/tmp/infosec
mount:安装文件夹/目录
-t:指定执行逻辑安装请求的文件系统的类型。必须使用NFS参数。
192.168.100.25:/home:挂载IP 192.168.100.25的主文件夹
/ tmp / infosec:要在本地/ tmp / infosec文件夹中挂载的远程主文件夹
执行该命令后,可以使用以下命令来检查目录装载:
df -k
第5步:导航到/tmp/infosec目录并列出内容。列出的内容来自远程主机的/home文件夹。
第6步:导航到任何用户目录并找到.ssh文件夹。该文件夹包含用于特定用户的SSH登录的公共、私有和授权密钥。
步骤7:这里的方法是创建自己的SSH密钥,并将新创建的公钥添加到受害用户的authorized_key中。然后用受害者用户和自己的密码登录到远程主机。
要创建SSH密钥对,我们将在我们的攻击机器上使用ssh-keygen命令,即Kali Linux。按照屏幕上的步骤,提供文件路径和密码。只需按下键盘上的“Enter”按钮,我们就可以保持密码空白。
命令完成后,导航到上面提供的文件路径,并检查公共文件的内容。
第8步:导航到/tmp/infosec/msfadmin/.ssh文件夹,并将新创建的公钥添加到msfadmin用户的authorized_key中。
echo < 新生成的公钥的内容 > >> authorized_keys
第9步:使用用户msfadmin从Kali机器SSH进入远程主机,并提供私钥的路径。
ssh -i infosec_rsa msfadmin@10.0.50.58
-i私钥的路径
msfadmin@10.0.50.58:用户名msfadmin和主机IP为10.0.50.58 (由于VM重新启动而更改了IP)
由于我们创建了一个没有密码的密钥对,并修改了msfadmin用户的“authorized_keys”文件,因此我们无需密码即可登录系统。
移动设备渗透测试
第10步:现在我们获得了对目标机器的低权限用户访问权限,我们的目标是将我们的权限提升为root用户。虽然有多种方法可以升级Linux中的权限,例如利用内核级未修补漏洞,弱安全性配置,存储在文件中的密码,密码重用等。在本文中,我们将看到弱配置的NFS如何导致我们获得更高的权限。
第11步:创建一个如下所示的C文件,并在Kali机器上使用GCC进行编译。
gcc root.c -o rootme
(将C文件编译为可执行的二进制文件)
第12步:将已编译的二进制文件复制到NFS共享中的msfadmin目录。使用以下命令设置SUID位:
chmod 4755 rootme
为什么要在这个文件上设置suid位?当设置了suid位的文件被任何用户运行时,该进程将以文件所有者的权限执行。
步骤13:使用ls -al命令列出msfadmin目录的内容。观察“rootme”文件是否由root用户拥有。
步骤14:从SSH会话中运行“rootme”二进制文件。由于该文件由root用户拥有,并且设置了suid位,因此其中的命令将为该shell提供root权限。
从现在开始,我们拥有这台机器的最高的权限,这时候我们可以这台机器的信息,如转储和破解哈希,枚举数据库,读取其他用户拥有的敏感文件,使用本机作为跳板来侦查其他用户机器和网络。
让我们通过读取/etc/exports文件的内容来看看NFS配置。
/home:主目录是可挂载的
*:每台机器都可以安装NFS共享
rw:读取和写入卷的访问权限
no_root_squash:这允许具有root权限的客户端以root用户身份操作挂载的共享。因此,复制的二进制文件由远程机器上的root用户拥有。
同步:只有在提交更改后,Sync才会向共享目录确认请求。
no_subtree_check:当共享目录是较大文件系统的子目录时,NFS会对其上的每个目录执行扫描,以验证其权限和详细信息。
让我们修改“/etc/exports”文件的内容,并将“no_root_squash”更改为“root_squash”,如下所示:
使用以下命令重新启动NFS服务:
sudo /etc/init.d/nfs-kernel-server重新启动
重复第4点给出的步骤来安装NFS共享。一旦安装,尝试上传/创建/移动/复制文件到导出的共享。你会观察两件事情:
1.用户不允许在其他用户拥有的目录上创建文件。(请参阅下面屏幕截图中的第一个突出显示的命令)。
2.我们在具有777(读,写和执行)权限的“/ tmp”目录中复制了一个二进制文件,该文件被复制到具有用户“nobody”权限的文件夹中,如下所示。
如果我们现在尝试在远程机器上执行相同的可执行文件,那么权限不会升级,因为该文件是以“nobody”用户身份运行的。
结论:
NFS共享通常运营在内部的Linux机器上。不要使用默认的配置,否则会导致整个系统的被入侵。限制可以共享的IP地址和使用“root_squash”功能的设置可以在很大程度上减少NFS服务的攻击面。
原文发布时间为:2018-05-29