Это задание немного отличается от иных SQL инъекций (потому что это не совсем SQL) и лично я убил много времени на это задание хотя по сути оно пустяковое, если знать одну важную особенность хоть она и не очевидна.
Первое что мы видим это типичная форма авторизации:
И тут я перепробовал множество базовых комбинаций, типа:
admin' --
admin' or 1=1 --
admin' or 1=1 #
и т.д.
Но все они приводили к подобному результату:
Именно в этот период бесполезных попыток я убил добрых пару часов из жизни. Пока при очередной попытке
admin'/**/or/**/1=1/*
Меня не смутила совсем другая, но уж очень знакомая надпись
Я продолжал пытаться подобрать инъекцию мне все казалось что там какая-то фильтрация и я пытался заменять вводимые значения аналогичными, например в выше указанном юзернейме нет ни одного пробела, мне казалось что они str_replace-сятся или что то типа того. И попутно я пытался вспомнить что же это за фраза знакомая пока не попробовал ее поискать в яндексе. Результат все расставил на свои места это часть из ответа при ldap_search с некорректными параметрами (среагировал так на *) (возможно еще где то его тоже видел). Признаться я с LDAP сталкивался не особо часто, но сама эта тема с уязвимостью с * как то попадалась на глаза. Решение оказалось очень простым, на момент поиска я пробовал
username: admin
password: *
Но его устроит даже:
username: *
password: *
Вот и заветный флаг! И опять же все сводится к вопросу о фильтрации пользовательского ввода.
That's all, folks!