CTF ringzer0team - SQL Injection 4: Random Login Form

Очередная инъекция эта смежная форма регистрации и авторизации:

Сперва я подумал что тут все упирается в то что надо "дропнуть" таблицу пользователей, но тогда форма для авторизации была бы ни к чему, но я все же попробовал.

Результат меня немного удивил, но это лишь означало что есть фильтрация пользовательского ввода (типа real_escape_string в PHP), да и будь это обычный mysqli->query то все равно ничего бы не вышло (нужно использовать multi_query для нескольких запросов). Поэтому эту идею я вскоре забросил, но сперва были попытки типа:

a';DROP TABLE users --
стоит учесть что после -- обязательно нужен пробел иначе это не воспримется интерпретатором как начало комментария.

Там была странная особенность: мне показалось будто пропал лишний пробел после --, точней на тот момент я подумал что забыл его поставить, но как я уже говорил тогда я понимал что мои попытки дропнуть тщетны и начал пробовать создать аккаунт админа. Ничего конечно не вышло:

Еще минут 15 безрезультатности привели меня снова к попытке дропнуть ведь в заголовках нигде не было очевидно указано что это PHP. И я попробовал снова но на всякий случай поставил побольше пробелов, чтобы было наглядней:

"a';DROP TABLE users -- " двойные ковычки только чтобы показать количество пробелов, для наглядности

Стало совершенно очевидно что пробелы тримятся (TRIM - обрезать), возникла новая идея, а что если они тримятся не перед проверкой на наличие пользователя, а уже при записи на уровне (и средствами) БД?

Я попробовал что то типа " admin" и пароль 123456

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

Как оказалось нужно использовать юзернейм с пробелами чтобы авторизоваться под поддельным админом (Если создавали там аккаунт и авторизовывались под ним, то видели сообщении о том что у пользователя нет прав админа). При введении юзернейма с пробелами и пароля получаем флаг!

That's all, folks!