Изучение базы данных при атаках SQL-Injection

Чтобы эксплуатировать уязвимости SQL-инъекции, часто требуется узнать информацию о базе данных. В это входит:

  • Тип и версия программного обеспечения СУБД.

  • Таблицы и столбцы, содержащиеся в базе данных.

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

Вы можете потенциально определить и тип, и версию базы, внедряя специфичные для конкретного вендора запросы и проверяя, какой из них сработает. Ниже приведены некоторые запросы для определения версии базы данных для популярных типов СУБД:

Database type
Query

Microsoft, MySQL

SELECT @@version

Oracle

SELECT * FROM v$version

PostgreSQL

SELECT 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) есть набор представлений под названием information schema. Он предоставляет информацию о базе данных.

Например, вы можете запросить information_schema.tables, чтобы перечислить таблицы в базе:

Это вернёт примерно такой вывод:

Этот вывод показывает, что есть три таблицы с именами Products, Users и Feedback. Затем вы можете запросить information_schema.columns, чтобы перечислить столбцы в отдельных таблицах:

Это вернёт примерно такой вывод:

Этот вывод показывает столбцы указанной таблицы и тип данных каждого столбца.

Вывод содержимого базы данных Oracle

В Oracle ту же информацию можно получить следующим образом:

  • Таблицы можно перечислить, запросив all_tables:

  • Столбцы можно перечислить, запросив all_tab_columns:

Last updated