HackTheBox-Oopsie

实验环境

信息收集

端口扫描:

1
nmap -sT -Pn 10.10.10.28

发现80端口开放,在浏览器打开,啥也没有,尝试找登录界面

目录扫描:

成功找到登录界面

在bp中也可以看到登录页的js加载记录

在浏览器打开

实验过程

账号为admin,密码是上一题中出现过的MEGACORP_4dm1n!!,直接登录,登录后看到有一个上传功能,点击提示需要super admin权限

先看一下我们现在账号信息,在url中还可以看到目前的用户id=1

再抓包看一下

id和user、role对应,可以尝试遍历用户

发送到interlude模块,标记id参数,设置好payload开始爆破

看到id=30的响应包的长度比较大,看一下他的响应包的内容,确认为super admin用户

修改目前用户的user和role值,成功越权到super admin用户

然后尝试上传shell,同样修改当前用户的user和role值,就可以进行文件上传

直接用kali自带的反弹shell文件,修改好ip和port

注意上传的过程中也要修改当前用户的user和role,改成super admin的值,就可以成功上传

接下来开启一个监听端口来接收反弹的shell

然后就是要找到我们上传的shell,扫目录的时候有一个uploads的路径,我们上传的文件应该就在这里

访问上传的shell来执行

回到netcat中就可以看到反弹的shell了

拿到shell先看看有没有有用的文件,我们拿到了数据库的账号密码

但是现在的shell是非交互式的,我们接下来要升级到交互的shell,两者的区别如下:

1
2
交互式模式就是shell等待你的输入,并且立即执行你提交的命令,退出后才终止
非交互式模式就是以shell script方式执行,shell不与你进行交互,而是读取存放在文件中的命令并执行它们,读取到结尾就终止
1
用netcat获得的shell是非交互式的,不能传递tab来进行补全,不能使用su、nano,也不能执行ctrl+c等命令,所以我们需要升级为交互式的shell

逐条键入命令:

1
2
3
4
5
6
7
8
9
10
11
12
# 将在环境变量下将shell设置为/bin/bash且参数为-q和/dev/null的情况下运行脚本,-q参数为静默运行,输出到/dev/null里,如果不加script -q /dev/null不会新启一个bash,shell=/bin/bash只是设置shell为bash,加了以后会给你挂起一个新的shell,并帮你记录所有内容
SHELL=/bin/bash script -q /dev/null
# 将netcat暂挂至后台
Ctrl-Z
# 将本地终端置于原始模式,以免干扰远程终端
stty raw -echo
# 将netcat返回到前台,注意:这里不会显示输入的命令
fg
# 重置远程终端,经测试也可以不进行此操作
reset
# 运行xterm
xterm

拿到交互的shell我们就可以切换到Robert用户了

获取普通用户权限的flag

权限提升

下面我们就要想办法提权,我们先看看这个组里面有没有特殊权限

1
2
3
4
# -type f 为查找普通文档,-group bugtracker 限定查找的组为bugtracker,2>/dev/null 将错误输出到黑洞(不显示)
find / -type f -group bugtracker 2>/dev/null
# -al 以长格式方式显示并且显示隐藏文件
ls -al /usr/bin/bugtracker

拥有者有ssetuid)特殊权限,可执行的文件搭配这个权限,可以得到特权,任意存取该文件的所有者能使用的全部系统资源,我们尝试运行它,发现这个文件根据提供的ID值输出以该数字为编号的bug报告

接下来我们可以使用strings命令来看看对象文件或二进制文件中查找可打印的字符串

可以看到bugtracker调用了cat命令,输出了/root/reports/目录下的bug报告,其实本来我们当前用户是没有权限访问/root目录的,但是我们有了setuid后就拥有了/root目录的访问有权限,也就拥有了root权限,当前用户执行bugtracker程序是会优先使用当前的path变量,这时候我们就可以在当前用户环境变量指定的路径中搜索cat命令,然后创建一个恶意的cat命令,修改当前用户环境变量,完成提权操作

1
2
3
4
export PATH=/tmp:$PATH                //将/tmp目录设置为环境变量
cd /tmp/ //切换到/tmp目录下
echo '/bin/sh' > cat //在此构造恶意的cat命令
chmod +x cat //赋予执行权限

这样bugtracker再次调用cat命令时实际上调用的是/tmp目录下的恶意的cat命令,我们运行一下bugtracker可以看出,此时robert用户临时具有了root权限,执行id命令发现只是robert用户的uid变为了root,不是真正的root用户

这样我们就可以获取system的flag了

在/root/.config/filezilla/filezilla.xml文件中有下一题的ftp账号密码

参考:

1、https://www.echocipher.life/index.php/archives/872/

2、关于Linux下s、t、i、a权限

3、LINUX s权限位提权