ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ_OLD > Уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #7481  
Старый 06.06.2009, 09:41
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Велемир, кажется это гз, но я могу ошибаться.
 

  #7482  
Старый 06.06.2009, 11:00
j0ker13
Участник форума
Регистрация: 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 не помогает(
 

  #7483  
Старый 06.06.2009, 12:38
Jokester
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме:
17621293

Репутация: 4915


По умолчанию

j0ker13

Ну а где тогда инъекция-то я не пойму?

Сортировка по любому полю даёт ошибку, это не инъекция , а нерабочий запрос.

У тебя нет рабочего запроса и влиять на запрос ты тоже никак не можешь. Его нельзя сделать рабочим. Ошибка будет всегда, если я правильно тебя понял. Тоесть даже при верном значении сортируемого поля сортировать будет нечего и база будет ругаться на то, что сортировать ей "не чего" и "не по чему".

Или я опять что-то упустил?
 

  #7484  
Старый 06.06.2009, 13:06
j0ker13
Участник форума
Регистрация: 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 сорвать запрос ошибкой)

все упирается в то что таблица пустая. если там была хоть одна бы запись можно веть было бы написать эксплоит только вместо
Цитата:
1=1,1=2
вставлять что то типа
Цитата:
substring(version(),1,1)>
и получится блинд)

все выше написанное не утверждение а домыслы) поправь если не трудно где ошибся)
 

  #7485  
Старый 06.06.2009, 13:33
Jokester
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..
 

  #7486  
Старый 06.06.2009, 14:05
j0ker13
Участник форума
Регистрация: 28.07.2008
Сообщений: 199
Провел на форуме:
861008

Репутация: 58
По умолчанию

2jokester
ну смотри. как я понимаю такие конструкции разрабатывать через подзапросы или(и) функции но и их не везде вставить(
так же есть запрос:
select .. from .. order by id limit a,b
a и b можно вставлять свои. но есть тока один вариант раскрутить это но там стоит ордер и юнион не прокатит.
а в лимит, как я пытался, не вставить if()
или можно как нить по другому?) как думаешь?
 

  #7487  
Старый 06.06.2009, 14:17
Jokester
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..
 

  #7488  
Старый 06.06.2009, 21:59
cr0w
Познающий
Регистрация: 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..
 

  #7489  
Старый 06.06.2009, 22:24
Jokester
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)
 

  #7490  
Старый 06.06.2009, 22:34
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

cr0w, мне кажется что если в таблице нет данных, то после ORDER BY выражение не посчитается, из-за банально оптимизации. Т.е. база не будет выполнять то, что не имеет смысла изначально.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ