Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pgAdminOpendoor — Эксплойт и тестовый стенд для CVE-2025-2945 | Kitploit
Инструменты/GitHubGitHub/i3r1h0n/pgadminopendoor
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubi3r1h0n/pgadminopendoor

pgAdminOpendoor

Эксплойт и тестовый стенд для CVE-2025-2945

Репозиторий
110 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

pgAdminOpendoor (CVE-2025-2945)

Обзор

Это моё исследование по CVE-2025-2945. Этот репозиторий содержит тестовый стенд с PostgreSQL и уязвимым pgAdmin, а также эксплойт.

CVE

Полезные ссылки:

  • Детали NVD
  • Анализ WIZ
  • Metasploit

Разбор

В бэкенде pgAdmin, написанном на python, есть две конечные точки, в которых отсутствует должная санитизация. Конечные точки:

  • /sqleditor/query_tool/download — параметр query_commited
  • /cloud/deploy — параметр high_availability

Посмотрим на код sqleditor:

root@kitploit:~
for key, value in data.items():
    if key == 'query':
        sql = value
    if key == 'query_commited':
        query_commited = (
            eval(value) if isinstance(value, str) else value
        )

Что мы здесь видим: значение query_commited напрямую передаётся функции eval(). Вы можете посмотреть документацию по eval.

Также посмотрите на код pgacloud:

root@kitploit:~
def _create_google_postgresql_instance(self, args):
    credentials = self._get_credentials(self._scopes)
    service = discovery.build('sqladmin', 'v1beta4',
                              credentials=credentials)
    high_availability = \
        'REGIONAL' if eval(args.high_availability) else 'ZONAL'

Та же проблема здесь.

Тем не менее, для доступа к этим конечным точкам требуются действительные учётные данные и доступ к pgAdmin. Но любой злоумышленник, имеющий к ним доступ, также может передать любое значение в eval. Это равносильно выполнению произвольного однострочного кода на Python.

Эксплуатация

Эксплуатация довольно прямолинейна. Смотрите exploit/src/main.py. Не забудьте обновить конфигурацию, чтобы получить обратную оболочку.

Настройка стенда

Чтобы настроить стенд, выполните:

root@kitploit:~
cd stand
docker compose up -d

И всё. pgAdmin теперь доступен по адресу http://localhost:8080. Учётные данные по умолчанию:

root@kitploit:~
[email protected]
admin

Не стесняйтесь редактировать файл .env и stand/init-db/01-init.sql.


создано I3r1h0n.

Скачать инструмент