 |
|

13.06.2009, 01:45
|
|
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
С нами:
9610769
Репутация:
380
|
|
Сообщение от ?maybe
вы неверно уловили суть проблемы, во
1-ых. по за-альяс'иным колонкам сортирует только груп, который находится в строке с inj.(%23)
Не согласен, при UNION по альясным колонкам в MySQL 5 нужно сортировать ТОЛЬКО ORDER http://dev.mysql.com/doc/refman/5.1/en/union.html:
Also, if a column to be sorted is aliased, the ORDER BY clause must refer to the alias, not the column name. The first of the following statements will work, but the second will fail with an Unknown column 'a' in 'order clause' error
конкретно здесь работать не будет, потому что поля в ордербае задаются в виде имя_табл.колонка (что не катит в двойных запросах)
Конкретно ни где это работать не будет(если продемострируете работоспобный запрос для 5 версии MySQL то я буду только рад этому) изходя из первого условия для UNION,ORDER BY и MySQL 5. Согласен с of ORDER BY cannot use column references that include a table name но я и не утверждал что это не так. Ваш запрос такой же не работоспособный был бы если в ORDER сортировался просто по именни колонки без table name.
+Боюсь предположить что это при определеных условиях вызовет - #1222 - The used SELECT statements have a different number of columns
|
|
|

13.06.2009, 02:56
|
|
Новичок
Регистрация: 08.06.2009
Сообщений: 4
С нами:
8908255
Репутация:
6
|
|
Не согласен, при UNION по альясным колонкам в MySQL 5 нужно сортировать ТОЛЬКО ORDER
я говорил про этот запрос, а не образно)
=>2
select columns.*,1,2/*или сколько там*/ from columns order by columns.column_name
select columns.*,1,2 from columns union select tables.* from tables order by columns.column_name
select columns.*,1,2 from columns union select tables.* from tables order by column_name
+Боюсь предположить что это при определеных условиях вызовет
например?)
|
|
|

13.06.2009, 05:08
|
|
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
С нами:
9610769
Репутация:
380
|
|
Сообщение от ?maybe
я говорил про этот запрос, а не образно)
Мдя, а в 1 своем посте я не про это писал(как тогда воспринимать ваши заявления,и понт было это отписывать не пойму, это типа того у кого больше яйца)?
Сообщение от ?maybe
select columns.*,1,2 from columns union select tables.* from tables order by columns.column_name
К чему это? Мало того что вы сами описали почему это не работает, разговор то идет про альяс в первом запросе и про иньект до ордер по названию колонки в оригинале и версию MySQL 5.(e.g. select table_name as lol, table_schema as lol2 from columns
where column_name='user' [sql_injection] order by table_name)
Например если кодер поймет что ему не надо все значения из columns:
select 3,1,2 from columns union select tables.* from tables order by column_name
З.Ы. Давайте закончим эту пустой спор, ничего нового я не узнал и из того что вы написали, равно как и вы от того что написал я, если с чем то не согласны и хотите обсудить, для этого есть ПМ.
Последний раз редактировалось PaCo; 13.06.2009 в 05:24..
|
|
|

13.06.2009, 11:16
|
|
Новичок
Регистрация: 08.06.2009
Сообщений: 4
С нами:
8908255
Репутация:
6
|
|
приведёный пример никак не связан с этой скулей, что касается 3,1,2 - из этой же области: таблица cats.* не везде существует, админ пролил пиво на системник, ...; мой пост был не понтом, а замечанием, что inj в общем случае возможна.
|
|
|

13.06.2009, 17:51
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами:
9410786
Репутация:
2731
|
|
PHP код:
if (strpos($clean, 'union') !== false && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0)
$fail = true;
Можно ли (если да, то как?) обойти такую фильтрацию?
|
|
|

13.06.2009, 17:54
|
|
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами:
10483586
Репутация:
5826
|
|
strpos() чувствителен к регистру UNION он не заметит.
А вот со stripos() такое не прокатит.
P.S. да и регулярка тоже чувствительна к регистру без i, т.е. они тоже проглотит UNION и ничего не заметит.
Последний раз редактировалось Grey; 13.06.2009 в 18:04..
|
|
|

13.06.2009, 18:04
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами:
9410786
Репутация:
2731
|
|
Да, но вся проблема в том, что переменная $clean изначально переводиться в нижний регистр (забыл упомянуть об этом в предыдущем посте).
Последний раз редактировалось mailbrush; 13.06.2009 в 18:07..
|
|
|

13.06.2009, 18:10
|
|
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами:
10483586
Репутация:
5826
|
|
Сообщение от mailbrush
Да, но вся проблема в том, что переменная $clean изначально переводиться в нижний регистр (забыл упомянуть об этом в предыдущем посте).
Тогда хрен что сделаешь, правда без union`a прожить можно - ведь можно и посимвольно инъекцию заюзать.
|
|
|

13.06.2009, 18:15
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами:
9410786
Репутация:
2731
|
|
Grey, ага, только трабла в том, что селект фильтрует, тобишь посимвольный вывод даных из бд (кроме информации о ней) тоже не катит.
PHP код:
// Sub selects? We don't use those either.
elseif (preg_match('~\([^)]*?select~s', $clean) != 0)
$fail = true;
Плюс еще к всему этому он фильтрует < и >, т.е. подбирать придется по очереди через =.
Сама уязвимость, если кому интересно
Код:
http://forum.antichat.ru/showpost.php?p=1328827&postcount=40
|
|
|

13.06.2009, 18:23
|
|
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами:
10483586
Репутация:
5826
|
|
А эта регулярка уже кривая:
and (/*)*/select substring(version(),1))=4 - такое она пропустит
А что касается фильтрации < > - то можно юзать:
WHERE IN (0, 255) - по сути (вернее по скорости) тоже самое, что если юзать < >
Последний раз редактировалось Grey; 13.06.2009 в 18:46..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|