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

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

Euler 19.03.2013 00:57

Доброго времени суток. Если в запросе фильтруются точки, то можно как-нибудь обратится к "INFORMATION_SCHEMA.TABLES"? Если ответ положительный, то как?

cat1vo 19.03.2013 02:17

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]SELECT table_name FROM tables WHERE table_schema[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'information_schema'[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]SELECT table_name FROM information_schema[/COLOR][COLOR="#FF8000"]/*!.*/[/COLOR][COLOR="#0000BB"]tables[/COLOR][COLOR="#007700"];[/COLOR][/COLOR


Euler 19.03.2013 02:40

Цитата:

Сообщение от cat1vo
cat1vo said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]SELECT table_name FROM tables WHERE table_schema[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'information_schema'[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]SELECT table_name FROM information_schema[/COLOR][COLOR="#FF8000"]/*!.*/[/COLOR][COLOR="#0000BB"]tables[/COLOR][COLOR="#007700"];[/COLOR][/COLOR


1. #1046 - No database selected

2. Используется точка. А в моём случае ещё и слеш фильтруется(и амперсанд).

Konqi 19.03.2013 03:04

Цитата:

Сообщение от cat1vo
cat1vo said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]SELECT table_name FROM tables WHERE table_schema[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'information_schema'[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]SELECT table_name FROM information_schema[/COLOR][COLOR="#FF8000"]/*!.*/[/COLOR][COLOR="#0000BB"]tables[/COLOR][COLOR="#007700"];[/COLOR][/COLOR


wtf??

вы проверяете что пишите?

откуда вы сфантазировали таблицу tables в нынешней базе?

второй запрос это всего лишь обход ваф, а фильтрации могут быть реализованы по разному

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR


Euler 19.03.2013 03:08

Цитата:

Сообщение от OxoTnik
OxoTnik said:
Легко, закодируй весь запрос в URLdecode

У меня это тоже первая мысль была, но не всё так просто...

upd. Вторая мысль - использовать CONCAT и CHAR, но в имени таблицы их использовать не получается.

BigBear 19.03.2013 04:06

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]select[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]from information_schema[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2etables

select
[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]from information_schema[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]252etables[/COLOR][/COLOR


Euler 19.03.2013 04:36

Цитата:

Сообщение от BigBear
BigBear said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]select[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]from information_schema[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]2etables

select
[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]from information_schema[/COLOR][COLOR="#007700"]%[/COLOR][COLOR="#0000BB"]252etables[/COLOR][/COLOR


верхний не работает и понятно почему. Но почему второй сработал? После декодирования получается ведь information_schema%.tables, что не соответствует синтаксису.

Га-Ноцри 19.03.2013 05:21

Цитата:

Сообщение от Euler
Euler said:
верхний не работает и понятно почему. Но почему второй сработал? После декодирования получается ведь
information_schema%.tables
, что не соответствует синтаксису.

Если не ошибаюсь, подобная техника обхода, в данном случае фильтра на точку, называется Double Encoding. Еще варианты:

точка %252e

прямой слэш %252f

обратный слеш %255c

Грабитель 19.03.2013 06:04

select table_name from information_schema,tables

Мне помог однажды такой запрос.

Не можешь использовать точку, используй запятую.

nikp 19.03.2013 13:14

Цитата:

Сообщение от Грабитель
Грабитель said:
select table_name from information_schema,tables
Мне помог однажды такой запрос.
Не можешь использовать точку, используй запятую.

Запрос делает полное обьединение таблиц information_schema и tables (full join, ищет их в текущей базе) и в нем ищет колонку table_namе.

Если его подать напрямую на вход MySql - будет ошибка.

Цитата:

Сообщение от None
ERROR 1146 (42S02): Table 'test.information_schema' doesn't exist

Сработает, только если обрабатывается предварительно и обработчик меняет ',' на '.'

Т.е. совет поможет вряд ли...


Время: 14:31