前言

前段时间在准备NISP考试的事情,考完题目是不难,倒是各种小事情有点搞,又是考试时间提前,又是考试前一天高铁取消,,欸不说了。

0x00.靶机的基本信息

名称: HackLAB: Vulnix
发布日期:2012 年 9 月 10 日
靶机作者:Reboot User
系列: HackLAB
作者主页:http://www.rebootuser.com/?p=933

靶机地址:https://www.vulnhub.com/entry/hacklab-vulnix,48/

0x01.Nmap:收集目标信息

image-20211006221423987

0x02.端口79:通过finger收集用户信息

Finger原是UNIX系统中用于查询用户情况的实用程序(DOS系统也包含此命令)。UNIX系统保存了每个用户的详细资料,包括E-mail地址、帐号、真实姓名、登录时间、未阅读的信件、最后一次阅读E-mail的时间以及外出时的留言等资料。当用Finger命令查询时,系统会将上述资料一一显示在查询者的终端或计算机上。
79端口Finger作为一个简单的用于查询用户信息的服务,除了在UNIX系统中应用,其它一些非UNIX系统也支持Finger,不同系统之间命令的形式有所差异。
finger user@10.10.10.183
image-20211006221802942

得到两个用户:user和dovenull

0x03.端口2049:通过NFS

目标开启了NFS。

先来看看目标的NFS信息:

sudo showmount -e 10.10.10.183
    (tips:showmount命令用于查询NFS服务器的相关信息)
image-20211006223125023

将这个共享文件夹挂载到本地/tmp/nfs下:

mkdir /tmp/nfs
sudo mount -t nfs 10.10.10.183:/home/vulnix /tmp/nfs
image-20211006223751633

挂载完毕,访问显示权限不足。注意到这个目录是/home/vulnix下的,所以大概率是只有vulnix这个用户能访问,这里就要用到NFS在v4版本之前的一个认证漏洞,下面简单概况下。

概述:
    NFS(网络文件系统)允许网络内计算机通过TCP/IP网络共享资源。NFS客户端可以像访问本地文件一样,访问NFS服务器上的文件。在NFSv4以下,存在认证漏洞,允许相同UID的用户直接访问NFS的共享资源。Kali Linux针对该漏洞提供一个专用工具NfSpy。该工具使用Python语言编写,包含两个脚本文件nfspy和nfspysh。通过这个工具,用户可以直接访问NFS的共享资源,而不用提供身份信息。同时,该工具还自动隐藏用户,避免被发现。
漏洞原理:
    v4版本之前的NFS依赖于服务器主机对身份验证机制的信任关系。NFS服务器会信任那些通过相同用户ID(与共享文件系统的UID相同)进行身份验证的客户端设备,这种机制适用于NIS、NIS+和LDAP域,但只有这些设备没有受到攻击或身份并非伪造的前提下这种验证机制才有效,因为NFS协议所使用的唯一的身份验证因素就是客户端设备传递过来的UID或GID(Group ID)。这也就意味着,如果我们能够伪造客户端设备的访问ID,我们就能够绕过NFS服务器的身份验证了。

简单来说,只要本地用户的UID或GID跟目标用户相同,即可伪造目标用户身份,欺骗服务器。

但目前不知道vulnix的UID。

0x04端口22:九头蛇hydra爆破

尝试爆破一下前面已知的用户名user,

hydra -l user -P /usr/share/wordlists/fasttrack.txt -vV -f -t 10 ssh://10.10.10.183
    -vV 显示详细信息
    -f 当破解了一个密码就停止
    -t 设定线程(不要设置太大,多了容易超时)
image-20211006225228858

成功爆破出了密码。

[22][ssh] host: 10.10.10.183   login: user   password: letmein

登录user用户的ssh:

image-20211006225541011

看一下当前用户可以执行的命令:

image-20211006225747145

好吧,没有权限。

查看密码文件,找到vulnix的UID为2008:

image-20211006230020201

那么直接在本地创建一个uid为2008的用户。

sudo useradd -u 2008 vulnix
su vulnix    (这里因为vulnix用户密码未指定,所以只能由root用户切换)
tips:
    在执行 su - 指令时,高级用户向低级用户切换不需要密码,如root用户切换至student用户;而低级用户切换至高级用户以及平级用户之间的切换均需要输入密码。
image-20211006230735476

可以看到,现在成功进入了共享文件夹。

0x05.ssh密钥登录vulnix

我们在当前用户目录/home/vulnix上传一个私钥就可以通过ssh登录vulnix用户了。

通过ssh-keygen命令生成密钥:

image-20211006231103744

密钥会生成在/home/kali/.ssh下:

image-20211006231213823

id_rsa.pub是公钥,id_rsa是私钥,我们要做的是将公钥上传到/home/vulnix/.ssh/下,并将公钥重命名为authorized_keys。

image-20211006231856190

现在我们就可以登录vulnix的ssh:

image-20211006232017148

看一下vulnix可以执行的命令:

image-20211006232107801

可以以root权限编辑/etc/exports这个文件(此文件是NFS的配置文件)

image-20211006232654495

我们往下加一行配置:

image-20211006232805791
参数解释:
    (3) Root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
    (4) No_root_squash 客户机用root访问该共享文件夹时,不映射root用户 

大致意思是将服务器的/root目录共享出来,且本地用户是root权限时,那么对于这个分享的目录来说,他就具有 root 的权限。

0x06.提权到root

配置文件修改完后保存退出,并先将本地挂载的共享目录卸载,

sudo umount /tmp/nfs

然后重启靶机以让配置文件生效。

再来查看NFS的共享目录:

sudo showmount -e 10.10.10.180
image-20211006234410433

可以看到root目录以及被共享出来了(重启完靶机IP变了,大家根据实际情况来就好)。

sudo mount -t nfs 10.10.10.180:/root /tmp/nfs/

然后切换到root用户访问/tmp/nfs

image-20211006235116003

这里已经拿到flag了,就是trophy.txt。

跟前面一样,上传公钥:

image-20211006235415343

连接ssh,

image-20211006235609056

至此,我们拿到了目标的root权限。

总结

最后除了上传密钥提权,上传一个bash也是可以的,不过我没有复现成功,网上说是bash版本问题,不太清楚。