Доброго времени суток. Если в запросе фильтруются точки, то можно как-нибудь обратится к "INFORMATION_SCHEMA.TABLES"? Если ответ положительный, то как?
PHP: SELECT table_name FROM tables WHERE table_schema='information_schema'; SELECT table_name FROM information_schema/*!.*/tables;
1. #1046 - No database selected 2. Используется точка. А в моём случае ещё и слеш фильтруется(и амперсанд).
wtf?? вы проверяете что пишите? откуда вы сфантазировали таблицу tables в нынешней базе? второй запрос это всего лишь обход ваф, а фильтрации могут быть реализованы по разному PHP: <?php if (strpos($_GET['sqli'], '.') !== false) die('hack') ?>
У меня это тоже первая мысль была, но не всё так просто... upd. Вторая мысль - использовать CONCAT и CHAR, но в имени таблицы их использовать не получается.
верхний не работает и понятно почему. Но почему второй сработал? После декодирования получается ведь information_schema%.tables, что не соответствует синтаксису.
Если не ошибаюсь, подобная техника обхода, в данном случае фильтра на точку, называется Double Encoding. Еще варианты: точка %252e прямой слэш %252f обратный слеш %255c
select table_name from information_schema,tables Мне помог однажды такой запрос. Не можешь использовать точку, используй запятую.
Запрос делает полное обьединение таблиц information_schema и tables (full join, ищет их в текущей базе) и в нем ищет колонку table_namе. Если его подать напрямую на вход MySql - будет ошибка. Сработает, только если обрабатывается предварительно и обработчик меняет ',' на '.' Т.е. совет поможет вряд ли...
я делаю UNION select VERSION(),2,3 но запятые нельзя. Можно конечно как слепую крутить, через like. Но нужно union'ом