靶机地址:https://www.vulnhub.com/entry/hacklab-vulnix,48/
靶机难度:初级(CTF)
靶机发布日期:2012年9月10日
靶机描述:在这里,我们有一台易受攻击的Linux主机,该主机具有配置缺陷,而不是有目的的易受攻击的软件版本(无论如何,在发布之时就如此!)
目标:得到root权限&找到flag.txt
作者:DXR嗯嗯呐
信息收集
nmap扫描靶机地址
nmap端口扫描
22 ssh OpenSSH 5.9
25 smtp
79 Finger Finger原是UNIX系统中用于查询用户情况的实用程序(DOS系统也包含此命令)。UNIX系统保存了每个用户的详细资料,包括E-mail地址、帐号、真实姓名、登录时间等信息。
110 pop3
111 rpcbind
143 imap
…..太多了就不一一列举了
首先从25端口开始
nc连接端口,VRFY验证用户是否存在
- VRFY---用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细信息。
- 220--服务就绪。
- 502--命令尚未实现。
- 421--无法提供正常服务,关闭传输管道。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在服务器遇到问题,必须关闭传输。
- 500--命令格式错误,不可识别。当命令行太长时也会发生这样的错误。
这里我们通过脚本快速测试存在的用户,首先安装smtp-user-enum
执行smtp-user-enum命令测试用户
smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploit/namelist.txt -t 192.168.16.145
- -M 用户名猜测EXPN、VRFY或RCPT的方法(默认为VRFY)
- -U 通过smtp服务检查的用户名文件
- -t 服务器运行smtp服务的主机
kail自带的字典很多,我这是随便找的,找到不少用户呢
finger命令查一下用户
finger用于查找并显示用户信息,包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。
将这两个用户放在一个文件里爆破一下密码试试
执行命令
hydra -L 1.txt -P /usr/share/wordlists/rockyou.txt -t 4 ssh://192.168.16.145
获得user/letmein
ssh登陆,发现home目录下有两个用户,之后就没有获得什么可以提权的信息了
先退出,再看其他端口
nfs服务配置
在前面的端口扫描时,发现过端口2049的nfs服务
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。最早由sun公司开发,是类unix系统间实现磁盘共享的一种方法。
首先查看一下NFS目录列表
showmount命令用于查询NFS服务器的相关信息
- -e 显示目录列表
这里我们看到了靶机将vulnix用户的家目录共享
我们将共享目录挂着到kail攻击者电脑的tmp目录下
mount -t nfs 192.168.16.145:/home/vulnix /tmp/nfs
但是不能访问
估计设置了root_squash
- no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限。
- root_squash:在登入 NFS 主机使用分享目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。
在此登陆user用户,查看vulnix用户的UID和GID,在攻击者终端建立一个和靶机UID和GID用户一致的vulnix用户,应该就可以访问上面挂载的目录了,
建立一个临时vulnix用户
groupadd -g 2008 vulnix #创建一个组并指定组的GID
adduser vulnix -uid 2008 -gid 2008 #创建一个用户指定UID和GID
切换用户,访问成功,没有获得有用的信息
我们这里可以在这个网络目录中生成一个ssh秘钥,用来登陆vulnix用户
在root用户下,执行ssh-keygen命令生成秘钥
ssh-keygen用来生成ssh公钥认证所需的公钥和私钥文件。
在nfs目录创建一个.ssh目录,将刚才生成的公钥id_rsa.pub复制到/tmp/nfs/.ssh目录下,并重命名为authorized_keys
使用私钥,登陆成功
ssh -i id_rsa vulnix@192.168.16.145
提权
用户具备sudo权限
使用sudoedit 命令打开/etc/exports看一下,是一个nsf配置文件,添加/root目录共享,将no_root_squash
- Ro 只读权限
- Rw读写权限
- Sync数据同步写入内存硬盘
- no_root_squash 访问共享目录时,用户如果是root权限,对共享目录也具有root权限(最好不要设置,增加服务安全隐患,稍后再提)
- root_squash 如果访问共享目录是root的权限用户,对共享目录的权限会被压缩为nfsnobody用户的权
- all_squash 不管你访问共享目录的用户是谁,都必须压缩为nfsnobody用户的权限
让配置文件生效有两个办法:
- 1、使用root权限执行exportfs -a,但是我们没有权限
- 2、重启目标靶机(在现实渗透中很不现实)
重启靶机,showmount -e 我们看到了/root的共享目录
挂载目录,可以root用户访问nfs目录了
将本地的/bin/bash文件放在/tmp/nfs共享目录中
赋4777权限
登陆靶机执行bash文件,获得root权限并获得flag
完成!!!
总结
这个靶机虽然很是初级的,但是包含了很多服务,收益良多
- 1、nmap扫描很多端口,利用finger 79端口查询靶机存在的用户(虽然上面写道用smtp-user-enum扫描用户,但是只是扫描的是SMTP用户,而且没用到。)
- 2、hydra爆破到user用户的密码,并发现nfs服务存在共享目录/home/vulnix目录。
- 3、将/home/vulnix网络共享目录挂载到本地目录下,发现nfs配置了root_squash,限制了必须和共享目录拥有者相同的SID和GID。
- 4、在本地建立一个SID和GID为2008的vulnix用户,即可访问挂载的目录。
- 5、在nfs网络目录下建立.ssh文件,通过ssh-keygen命令创建一个秘钥。将公钥复制到.shh目录,使用ssh命令通过秘钥登陆vulinx用户。
- 6、vulnix用户具有sudo权限,可以sudoedit修改nfs配置文件,将nfs配置文件中,/home/vulnix的访问限制root_squash修改为no_root_squash,重启靶机,就可以任何用户访问了。
- 7、将/bin/bash复制到nfs目录,使用root权限赋4777权限。登陆靶机执行bash文件,获得root权限。