ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

06.06.2009, 09:41
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Велемир, кажется это гз, но я могу ошибаться.
|
|
|

06.06.2009, 11:00
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме: 861008
Репутация:
58
|
|
чтож спасибо cr0w,jokester,Grey что помогли)
смысл понятен. я к этому и стремился.
я например сделал для себя открытие) а вы наверна просто забыли что таблица пустая) или может тоже увидите что нить новое)
как я понял все упиралось в то что таблица была пустая и мускул раз нечего было сортировать и не обращает на ордер внимание)
(таблица act_topup пустая)
mysql> select * from test.act_topup order by if(1=2,1,(select 1 union select 2));
Empty set (0.00 sec)
mysql> select * from test.act_topup order by if(1=1,1,(select 1 union select 2));
Empty set (0.00 sec)
mysql> select * from mysql.user order by if(1=1,1,(select 1 union select 2));
...(вывод результатов)
4 rows in set (0.00 sec)
mysql> select * from mysql.user order by if(1=2,1,(select 1 union select 2));
ERROR 1242 (21000): Subquery returns more than 1 row
вот такая фигня)
поэтому есть ли какая нить функция которая бы принудительно заставила его брать в расчет ордер?
desc не помогает(
|
|
|

06.06.2009, 12:38
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
j0ker13
Ну а где тогда инъекция-то я не пойму?
Сортировка по любому полю даёт ошибку, это не инъекция , а нерабочий запрос.
У тебя нет рабочего запроса и влиять на запрос ты тоже никак не можешь. Его нельзя сделать рабочим. Ошибка будет всегда, если я правильно тебя понял. Тоесть даже при верном значении сортируемого поля сортировать будет нечего и база будет ругаться на то, что сортировать ей "не чего" и "не по чему".
Или я опять что-то упустил?
|
|
|

06.06.2009, 13:06
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме: 861008
Репутация:
58
|
|
2jokester
ну смотри. поправь если где то неправ.
запрос который я дал выше может выполнится и без меня. я могу только чтонить к нему подписать. после ордер.
для примера два запроса(смысл схож с тем который был изначально)-
select * from mysql.user order by user,if(1=1,1,(select 1 union select 2));
выполнится нормально
select * from mysql.user order by user,if(1=2,1,(select 1 union select 2));
вылезет ошибка.
это не инъекция , а нерабочий запрос
запрос изначально рабочий. только таблица пустая
влиять на запрос ты тоже никак не можешь
да это так) но я могу в условии if сорвать запрос ошибкой)
все упирается в то что таблица пустая. если там была хоть одна бы запись можно веть было бы написать эксплоит только вместо
вставлять что то типа
substring(version(),1,1)>
и получится блинд)
все выше написанное не утверждение а домыслы) поправь если не трудно где ошибся)
|
|
|

06.06.2009, 13:33
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
То что ты показываешь выборку из mysql.user это понятно, она работает. Но она работает потому, что в таблице есть что сортировать.
Если в таблице ничего нет , то мы не сможем получить нормальный запрос. Тоесть пофигу какое там поле сортировки(если сортировка именно по полю), база его не обрабатывает(точнее обрабатывает , но как-то очень странно  ), она выбирает данные видит что их там нет и выкидывает Empty set
Сообщение от j0ker13
да это так) но я могу в условии if сорвать запрос ошибкой)
Только если в таблице что-то есть. Иначе нет.
Вообще на эту тему (ну или почти на эту) есть множество интересных задумок, но нет нормальной документации на mysql, стандарты она не держит и приходится всё проверять ручками. Так что то, что я пишу тут, это исключительно МОЙ взгляд, возможно и есть какое-то решение, но я его не вижу
Последний раз редактировалось jokester; 06.06.2009 в 13:35..
|
|
|

06.06.2009, 14:05
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме: 861008
Репутация:
58
|
|
2jokester
ну смотри. как я понимаю такие конструкции разрабатывать через подзапросы или(и) функции но и их не везде вставить(
так же есть запрос:
select .. from .. order by id limit a,b
a и b можно вставлять свои. но есть тока один вариант раскрутить это но там стоит ордер и юнион не прокатит.
а в лимит, как я пытался, не вставить if()
 или можно как нить по другому?) как думаешь?
|
|
|

06.06.2009, 14:17
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
В лимите подзапросы и выражения запрещены (и как не странно это мускул держит)
Юнион как ты правильно заметил туда не впихнёшь, он будет после ордера.
И самое смешное, что в ордере по идее подзапросы тоже запрещёны, но разрабы mysql на это положили, и они там работают. Но это значит , что доков ты по этой теме не увидишь, их как-бэ нет, подзапросов в ордере , а значит и доков нет
Соответственно хрен поймёшь как база обрабатывает подзапрос, нельзя сказать, что она его совсем игнорирует, т.к. если таблица не пустая то он обрабатывается.
Тоесть что-то она проверяет, а вот с пустой таблицей я не смог заставить работать
more than 1 row
Такое ощущение, что в этом случае, базе плевать на то, что в подзапросе и она выкидывает Empty set
Моё мнение что не выйдет, но в любом случае можешь поразвлекаться на локалке и посмотреть, т.к. не исключаю, что решение может и найтись
==================
add
Сообщение от cr0w
Насколько я понимаю, если в параметр ORDER BY мы помещаем выражение, то нужно чтоб оно возвращало именно имя колонки, по которой должна происходить сортировка, а не ее номер.
Кстати, если сможешь заставить базу воспринимать то, что она возвращает из подзапроса в ордере как ИМЯ КОЛОНКИ, дай мне знать , мы об эту тему с некоторыми товарищами уже весь мозг вывернули
Возвращает она строку, и никак не удаётся убедить её в том, что это колонка и по ней нужна сортировка.
Последний раз редактировалось jokester; 06.06.2009 в 20:58..
|
|
|

06.06.2009, 21:59
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
jokester
Код:
mysql> SELECT @@version;
+---------------------+
| @@version |
+---------------------+
| 5.0.45-community-nt |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT * from `users2`;
+-------+----------+
| name | password |
+-------+----------+
| admin | 348 |
| user1 | 469 |
| user2 | 1091 |
| user3 | 2221 |
| user4 | 5239 |
| user5 | 909 |
| cr0w | 3 |
+-------+----------+
7 rows in set (0.00 sec)
mysql> SELECT * from `users2` ORDER BY (SELECT password);
+-------+----------+
| name | password |
+-------+----------+
| user2 | 1091 |
| user3 | 2221 |
| cr0w | 3 |
| admin | 348 |
| user1 | 469 |
| user4 | 5239 |
| user5 | 909 |
+-------+----------+
7 rows in set (0.00 sec)
j0ker13
Я обратил внимание на то, что таблица пустая, но так и не понял, чего ты хотел в итоге получить тем своим запросом, поэтому решил оставить этот момент без комментария. (:
add: Мне почему-то ранее думалось, что выражение в первом параметре ORDER BY будет выполняться даже если в таблице нет данных. Надо будет поэксперементировать с этим...
Последний раз редактировалось cr0w; 06.06.2009 в 22:11..
|
|
|

06.06.2009, 22:24
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
cr0w
(SELECT password) Это не запрос знаешь-ли, так-же как и (select 1). Любая база увидев такое пошлёт тебя куда подальше. Это нестандартные фичи мускула, и работают они соответственно непонятно как
Ты запросы вот такие погоняй :
order by (select table_name from information_schema.tables limit 1)
order by (select user from mysql.user limit 1)
|
|
|

06.06.2009, 22:34
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
cr0w, мне кажется что если в таблице нет данных, то после ORDER BY выражение не посчитается, из-за банально оптимизации. Т.е. база не будет выполнять то, что не имеет смысла изначально.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|