Изучение базы данных при атаках SQL-Injection
Чтобы эксплуатировать уязвимости SQL-инъекции, часто требуется узнать информацию о базе данных. В это входит:
Тип и версия программного обеспечения СУБД.
Таблицы и столбцы, содержащиеся в базе данных.
Определение типа и версии базы данных
Вы можете потенциально определить и тип, и версию базы, внедряя специфичные для конкретного вендора запросы и проверяя, какой из них сработает. Ниже приведены некоторые запросы для определения версии базы данных для популярных типов СУБД:
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