07 Апр, 2023

Язык структурированных запросов PostGres (PostgreSQL)

Penetration Testing as a service (PTaaS)

Tests security measures and simulates attacks to identify weaknesses.

PostgreSQL это система управления реляционными базами данных с открытым исходным кодом, использующая модель клиент-сервер. Он использует язык SQL для управления данными и запросов к ним и может быть доступен через различные протоколы, включая TCP / IP и доменные сокеты Unix. Протокол поддерживает различные типы данных и функции, включая транзакции, триггеры и хранимые процедуры, совместимые с ACID. Протокол PostgreSQL использует протокол на основе сообщений по протоколу TCP / IP, при этом сообщения пересылаются между клиентом и сервером для обработки операций с базой данных.

Общие порты PGSQL

Клиенты обычно используют этот порт для подключения к серверу PostgreSQL и выполнения таких операций, как создание, изменение и запрос баз данных. В дополнение к TCP-порту 5432, PostgreSQL также использует другие порты для определенных целей, таких как:

Порт TCP 5433: используется для безопасных (с SSL-шифрованием) подключений к серверу PostgreSQL

Порт TCP 5434: используется для второго экземпляра сервера PostgreSQL, работающего на том же хосте

Порт TCP 5435: используется для третьего экземпляра сервера PostgreSQL, работающего на том же хосте

Стандартные команды от неавторизованных:

psql -U my_login -h 10.0.0.101 postgres

Инструменты для использования протокола PGSQL

Ручные Инструменты Тестирования:

  • pgAdmin 4 – pgAdmin 4 - это бесплатный инструмент администрирования и управления базой данных PostgreSQL с открытым исходным кодом. Он предоставляет графический пользовательский интерфейс для управления базами данных, таблицами и другими объектами и позволяет пользователям выполнять такие задачи, как создание запросов, генерация отчетов и мониторинг производительности.

  • psql – psql - это инструмент командной строки, который входит в состав PostgreSQL. Он позволяет пользователям взаимодействовать с базой данных непосредственно из командной строки и может использоваться для выполнения таких задач, как запрос данных, создание таблиц и управление пользователями.

  • DBeaver – DBeaver - это бесплатный инструмент управления базами данных с открытым исходным кодом, который поддерживает несколько баз данных, включая PostgreSQL. Он предоставляет графический пользовательский интерфейс для управления базой данных и включает в себя такие функции, как редактирование SQL, просмотр схемы и визуализация данных.

  • Navicat для PostgreSQL – Navicat - это коммерческий инструмент управления базами данных, который предоставляет графический пользовательский интерфейс для управления базами данных PostgreSQL. Он включает в себя такие функции, как моделирование данных, построение запросов и синхронизация данных.

  • pgcli – pgcli - это интерфейс командной строки для PostgreSQL, который обеспечивает автоматическое завершение, подсветку синтаксиса и другие функции, повышающие эффективность взаимодействия с базой данных.

  • HeidiSQL – HeidiSQL - это бесплатный инструмент управления базами данных с открытым исходным кодом, который поддерживает несколько баз данных, включая PostgreSQL. Он предоставляет графический пользовательский интерфейс для управления базой данных и включает в себя такие функции, как редактирование SQL, просмотр схемы и визуализация данных.

  • OmniDB – OmniDB - это веб-инструмент управления базами данных, который предоставляет графический пользовательский интерфейс для управления базами данных PostgreSQL. Он включает в себя такие функции, как редактирование SQL, просмотр схемы и визуализация данных.

  • pgweb – pgweb - это веб-инструмент администрирования для PostgreSQL, который предоставляет графический пользовательский интерфейс для управления базами данных, таблицами и другими объектами. Он включает в себя такие функции, как редактирование SQL, визуализация данных и управление пользователями.

  • SQL Workbench/J – SQL Workbench / J - это бесплатный инструмент управления базами данных с открытым исходным кодом, который поддерживает несколько баз данных, включая PostgreSQL. Он предоставляет графический пользовательский интерфейс для управления базой данных и включает в себя такие функции, как редактирование SQL, просмотр схемы и визуализация данных.

  • pgBadger – pgBadger - это анализатор журналов для PostgreSQL, который помогает пользователям выявлять узкие места производительности и другие проблемы в базе данных. Он предоставляет графические отчеты и диаграммы, основанные на журналах базы данных.

Автоматизированные инструменты тестирования:

  • pgTAP – pgTAP - это платформа тестирования для PostgreSQL, которая предоставляет набор функций и макросов для написания тестов на SQL. Это позволяет пользователям писать тесты для схем баз данных, функций и других объектов.

  • pg_regress – pg_regress - это инструмент регрессионного тестирования для PostgreSQL, который позволяет пользователям писать и запускать тесты для базы данных. Он включает в себя такие функции, как параллельное тестирование, форматирование выходных данных и отчеты об ошибках.

  • Pgtcl-ng – Pgtcl-ng - это расширение Tcl / Tk для PostgreSQL, которое предоставляет платформу тестирования для написания автоматических тестов на Tcl. Он включает в себя такие функции, как управление тестовыми приборами, отчетность о результатах и автоматизация тестирования.

  • pgTapTest – pgTapTest - это веб-платформа тестирования для PostgreSQL, которая предоставляет графический пользовательский интерфейс для написания и запуска тестов. Он включает в себя такие функции, как управление тестовыми наборами, отчеты о результатах и автоматизация тестирования.

  • pg_prove – pg_prove - это инструмент командной строки для запуска автоматических тестов в базах данных PostgreSQL. Он позволяет пользователям писать тесты на SQL или в пользовательском формате и включает в себя такие функции, как отчеты о результатах тестирования и управление набором тестов.

  • pgTAPish – pgTAPish - это платформа тестирования на основе Python для PostgreSQL, которая предоставляет набор функций и классов для написания тестов. Он включает в себя такие функции, как управление тестовыми приборами, отчетность о результатах и автоматизация тестирования.

  • pg_qualstats – pg_qualstats - это инструмент для анализа запросов в PostgreSQL с целью выявления узких мест в производительности и других проблем. Он предоставляет статистику о времени выполнения запроса, планах запроса и других показателях.

  • pgbench – pgbench - это инструмент сравнительного анализа для PostgreSQL, который позволяет пользователям тестировать производительность базы данных при различных рабочих нагрузках. Он включает в себя такие функции, как измерение скорости транзакций и отчет о результатах.

  • pg_stat_statements – pg_stat_statements - это инструмент для анализа статистики запросов в PostgreSQL для выявления проблем с производительностью. Он предоставляет статистику о времени выполнения запроса, планах запроса и других показателях.

  • pgAudit – pgAudit - это инструмент для аудита баз данных PostgreSQL с целью выявления проблем безопасности и других проблем. Он предоставляет подробный журнал всех действий базы данных, включая запросы, транзакции и действия пользователя.

Разведывательная или нестандартная команда

Информационная схема queries: они позволяют запрашивать метаданные базы данных для сбора информации о таблицах, столбцах, индексах и других объектах.

запрос pg_catalogies: Этот каталог содержит информацию о внутренней структуре базы данных и может быть запрошен для сбора информации о системных таблицах и индексах.

SQL-инъекция аттаcks: Если уязвимое приложение использует PostgreSQL в качестве серверной части, атаки с использованием SQL-инъекций могут использоваться для сбора информации или выполнения несанкционированных операций с базой данных.

Нестандартное расширениеns: PostgreSQL поддерживает различные расширения, которые могут предоставлять дополнительные функциональные возможности, такие как поддержка географических информационных систем (ГИС). Для взаимодействия с этими расширениями может потребоваться использование нестандартных команд.

Последние пять известных CVE для IKE

 CVE-2021-29625: Adminer - это программное обеспечение для управления базами данных с открытым исходным кодом. Уязвимость межсайтового скриптинга в версиях Adminer с 4.6.1 по 4.8.0 затрагивает пользователей MySQL, MariaDB, PgSQL и SQLite. XSS в большинстве случаев предотвращается строгим CSP во всех современных браузерах. Единственное исключение - когда Администратор использует расширение `pdo_` для связи с базой данных (оно используется, если собственные расширения не включены). В браузерах без CSP затронуты версии Adminer с 4.6.1 по 4.8.0. Уязвимость исправлена в версии 4.8.1. В качестве обходных путей можно использовать браузер, поддерживающий строгий CSP, или включить собственные расширения PHP (например, `mysqli`), или отключить отображение ошибок PHP (`display_errors).

 CVE-2020-25269: Проблема была обнаружена в InspIRCd 2 до версии 2.0.29 и 3 до версии 3.6.0. Модуль pgsql содержит уязвимость use after free. В сочетании с модулями sqlauth или sqloper эта уязвимость может быть использована для удаленного сбоя сервера InspIRCd любым пользователем, способным подключиться к серверу.

 CVE-2015-7766: PGSQL:SubmitQuery.do в ZOHO ManageEngine OpManager 11.6, 11.5 и более ранних версиях позволяет удаленным администраторам обходить ограничения SQL-запросов с помощью комментария в запросе к api/json/admin/SubmitQuery, как показано “INSERT/**/INTO”.

 CVE-2015-4644: Функция php_pgsql_meta_data в pgsql.c в расширении PostgreSQL (он же pgsql) в PHP до версии 5.4.42, 5.5.x до версии 5.5.26 и 5.6.x до версии 5.6.10 не проверяет извлечение токена для имен таблиц, что может позволить удаленным злоумышленникам вызвать отказ в обслуживании (разыменование нулевого указателя и сбой приложения) с помощью созданного имени. ПРИМЕЧАНИЕ: эта уязвимость существует из-за неполного исправления для CVE-2015-1352. 

 CVE-2015-1352: Функция build_tablename в pgsql.c в расширении PostgreSQL (он же pgsql) в PHP до версии 5.6.7 не проверяет извлечение токена для имен таблиц, что позволяет удаленным злоумышленникам вызывать отказ в обслуживании (разыменование нулевого указателя и сбой приложения) с помощью созданного имени. 

Связь с перечислением

Для подключения и выполнения перечисления в базе данных PostgreSQL вы можете использовать psql инструмент командной строки. Вот краткий обзор этого процесса:

  1. Откройте окно терминала и введите psql -h <hostname> -U <username> для подключения к базе данных PostgreSQL используйте указанные имя хоста и имя пользователя. Вам может быть предложено ввести пароль, в зависимости от используемого метода аутентификации.

  2. После подключения вы можете использовать различные команды для перечисления базы данных, такие как \dt чтобы перечислить все таблицы, \du чтобы перечислить всех пользователей, \dv чтобы перечислить все виды, и \df чтобы перечислить все функции.

  3. Вы также можете использовать SQL-запросы для извлечения определенной информации из базы данных. Например, SELECT * FROM pg_catalog.pg_user получит список всех пользователей в базе данных.

  4. Важно использовать методы перечисления только этичным и авторизованным образом, а также следовать рекомендациям по безопасности для защиты базы данных от несанкционированного доступа или модификации.

Грубое силовое подключение:

nmap -p 5432 –script pgsql-brute <host>

Полезная информация

– Поддерживает широкий спектр типов данных, включая целочисленные, числовые, логические, символьные, текстовые, дату / время, временную метку и многие другие.

– Поддерживает SQL (язык структурированных запросов) и позволяет пользователям выполнять сложные запросы к своим данным.

– Поддерживает как синхронную, так и асинхронную репликацию, позволяя пользователям реплицировать данные на несколько узлов для повышения доступности и масштабируемости.

– Богатый набор функций для обеспечения целостности и согласованности данных, включая ограничения внешнего ключа, триггеры и поддержку транзакций.

– Поддерживает полнотекстовый поиск, позволяя пользователям искать текстовые данные в своей базе данных.

– Большое и активное сообщество разработчиков и пользователей, предоставляющее обширную документацию, форумы и другие ресурсы.

– Доступно на различных платформах, включая Windows, Linux, macOS и Unix-подобные системы.

– Открытый исходный код и бесплатный в использовании, что делает его привлекательным выбором для организаций, стремящихся снизить затраты.

Известные баннеры

“Добро пожаловать в PostgreSQL” – Это баннер по умолчанию, отображаемый PostgreSQL при подключении к серверу с помощью инструмента командной строки psql.

“Сервер PostgreSQL” – Этот баннер часто используется серверами PostgreSQL для идентификации себя перед подключающимися к ним клиентами.

“PostgreSQL” – Это простой баннер, используемый некоторыми серверами PostgreSQL для идентификации самих себя.

“Добро пожаловать в psql” – Этот баннер отображается инструментом командной строки psql при подключении к серверу PostgreSQL.

“pgAdmin” (Администратор) – Это баннер, отображаемый инструментом графического пользовательского интерфейса pgAdmin для управления базами данных PostgreSQL.

“psycopg2” – Это баннер, отображаемый библиотекой psycopg2 для Python, которая используется для подключения к базам данных PostgreSQL и взаимодействия с ними.

“JDBC” - "JDBC" – Это баннер, отображаемый драйвером PostgreSQL JDBC для Java, который используется для подключения к базам данных PostgreSQL и взаимодействия с ними.

“ODBC” – Это баннер, отображаемый драйвером PostgreSQL ODBC, который используется для подключения к базам данных PostgreSQL и взаимодействия с ними с использованием стандарта Open Database Connectivity (ODBC).

Книги для изучения протокола PostGres Structured Query Language (PGSQL)

PostgreSQL: Запущен Реджина Обе и Лео Хсу – Эта книга представляет собой введение в PostgreSQL, охватывающее такие темы, как установка, настройка и базовые команды SQL.

Практический PostgreSQL Джон Уорсли и Джошуа Д. Дрейк – Эта книга представляет собой всеобъемлющее руководство по PostgreSQL, охватывающее такие темы, как проектирование баз данных, администрирование и расширенный SQL.

Высокопроизводительная поваренная книга PostgreSQL Читидж Чаухан и Динеш Кумар – В этой книге представлены практические решения для повышения производительности баз данных PostgreSQL.

Высокая производительность PostgreSQL 9.0 автор: Грегори Смит – Эта книга представляет собой подробное руководство по оптимизации производительности баз данных PostgreSQL, охватывающее такие темы, как настройка запросов, индексация и репликация.

Основы администрирования PostgreSQL автор Ханс-Юрген Шениг – Эта книга представляет собой всеобъемлющее руководство по администрированию баз данных PostgreSQL, охватывающее такие темы, как резервное копирование и восстановление, мониторинг и безопасность.

Поваренная книга по администрированию PostgreSQL 9 Саймон Риггс и Ханну Кросинг – В этой книге представлены практические решения для администрирования баз данных PostgreSQL, охватывающие такие темы, как репликация, резервное копирование и восстановление, а также настройка производительности.

Руководство разработчика PostgreSQL Эвальд Гешвинде и Ханс-Юрген Шениг – Эта книга представляет собой всеобъемлющее руководство по разработке приложений с использованием PostgreSQL, охватывающее такие темы, как моделирование данных, программирование на SQL и программирование на стороне сервера.

Освоение PostgreSQL 11 автор Ханс-Юрген Шениг – Эта книга представляет собой подробное руководство по PostgreSQL 11, охватывающее такие темы, как установка и настройка, программирование на SQL и администрирование баз данных.

Поваренная книга по администрированию PostgreSQL 11 Саймон Риггс и Джанни Чолли – В этой книге представлены практические решения для администрирования баз данных PostgreSQL 11, охватывающие такие темы, как репликация, резервное копирование и восстановление, а также настройка производительности.

Поваренная книга по администрированию PostgreSQL 13 Саймон Риггс и Джанни Чолли – В этой книге представлены практические решения для администрирования баз данных PostgreSQL 13, охватывающие такие темы, как резервное копирование и восстановление, настройка производительности и безопасность.

Список полезной нагрузки для протокола PostGres Structured Query Language (PGSQL)

  • Сообщение о запуске: Первоначальное сообщение, отправленное от клиента на сервер, содержащее параметры подключения, такие как имя пользователя, имя базы данных, кодировка клиента и т.д.

  • Сообщение об аутентификации: Отправляется с сервера клиенту для аутентификации пользователя.

  • Сообщение с паролем: Отправлено с клиента на сервер, содержащее пароль пользователя.

  • Сообщения инструкции SQL: Эти сообщения включают:

Сообщение запроса: используется для отправки одной инструкции SQL на сервер для выполнения.

Пакетное сообщение: используется для отправки нескольких инструкций SQL на сервер для выполнения в одном пакете.

Описание сообщения: используется для запроса информации о результате запроса, такой как имена столбцов и типы данных.

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

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

Синтаксический анализ сообщения: используется для преобразования инструкции SQL во внутреннее представление.

Сообщение синхронизации: используется для синхронизации состояния клиента и сервера.

  • Сообщения данных: Эти сообщения включают:

Сообщение с описанием строки: отправляется сервером для описания столбцов в результате запроса.

Сообщение строки данных: отправляется сервером для отправки одной строки данных в результате запроса.

Сообщение о завершении выполнения команды: отправляется сервером для указания завершения SQL-команды вместе с любой соответствующей статистикой.

Сообщение о готовности к запросу: отправляется сервером, чтобы указать, что он готов принять следующую команду SQL.

  • Сообщение о завершении: Отправлено клиентом или сервером для завершения соединения.

Смягчение последствий

  1. Убедитесь, что для PostgreSQL установлены последние исправления безопасности и обновления, чтобы устранить все известные уязвимости.

  2. Используйте шифрование SSL / TLS для соединений PostgreSQL, чтобы гарантировать безопасность передаваемых данных.

  3. Используйте надежные пароли, многофакторную аутентификацию и ограничьте доступ к базе данных только авторизованным персоналом.

  4. Назначьте пользователям и ролям минимальные необходимые привилегии, чтобы ограничить ущерб, который может быть причинен в случае взлома учетной записи.

  5. Регулярно просматривайте журналы PostgreSQL на предмет необычной активности или попыток несанкционированного доступа.

  6. Используйте брандмауэры для ограничения доступа к серверам PostgreSQL из внешних сетей.

  7. Регулярно создавайте резервные копии баз данных PostgreSQL, чтобы гарантировать, что данные могут быть восстановлены в случае инцидента безопасности или системного сбоя.

  8. Внедрите системы обнаружения / предотвращения вторжений для мониторинга и обнаружения потенциальных угроз безопасности в режиме реального времени.

Заключение

PostgreSQL это мощная и широко используемая система управления базами данных с открытым исходным кодом, которая предоставляет ряд расширенных функций для управления данными. Однако, как и в случае с любой сложной программной системой, важно быть осведомленным о потенциальных рисках безопасности и уязвимостях, которые могут возникнуть. Внедряя ряд мер безопасности, таких как использование безопасной аутентификации, шифрования SSL / TLS, регулярных обновлений и систем обнаружения / предотвращения вторжений, сетевые администраторы могут помочь снизить эти риски и обеспечить конфиденциальность, целостность и доступность своих данных. В целом, PostgreSQL остается высоко ценимой и надежной системой баз данных для широкого спектра приложений и отраслей.

Другие Услуги

Готовы к безопасности?

Связаться с нами