Несмотря на свою «популярность», SQL-инъекции по-прежнему встречаются на множестве ресурсов. Но, как известно, основной проблемой при реализации скул-инъектов является вытягивание записей из табличек. Конечно, можно по старинке менять значение LIMIT'а, регулируя, тем самым, вывод данных в отображаемые поля. Однако есть более простой и действенный способ, заюзав который, ты получишь много данных и сразу. Речь идет о функции GROUP_CONCAT() в MySQL => 4.1 версии. Она позволяет объединить в одну строку несколько записей из таблицы (по аналогии с известной тебе функцией concat(), объединяющей несколько полей).
Проще говоря, с помощью GROUP_CONCAT() ты можешь отобразить не одну, а сразу десяток-другой записей из таблички. Причем, максимальный объем получаемых тобой данных по дефолту ограничен 1 метром (aka 1024 байта), – именно такое значение имеет по умолчанию системная переменная group_concat_max_len. Конечно, слить всю необходимую инфу вряд ли удастся, но вот упростить себе жизнь можно изрядно. Итак, несколько важных особенностей функции GROUP_CONCAT():- Функция позволяет задавать собственный символ разделения записей.
- Функция поддерживает работу с такими операторами, как DISTINCT, ORDER BY, ASC/DESC.
- Функция не поддерживает работу с оператором LIMIT.
- Максимальный объем получаемых с помощью функции данных - 1024 байта (по дефолту).
В качестве примера, рассмотрим получение списка всех БД и всех табличек для текущей БД с помощью функции GROUP_CONCAT() в MySQL => 5 версии.
1. Предположим, у нас есть sql-инъекция вида:
http://www.hacked.com/index.php?id=-12. Получим список всех БД (при условии, что данные <= 1024 байта) за один запрос в одном поле:
http://www.hacked.com/index.php?id=-1+UNION+SELECT+GROUP_CONCAT
(SCHEMA_NAME SEPARATOR 0?0a)+FROM+information_schema.SCHEMATA/*3. Теперь получим список всех табличек для текущей БД (при условии, что данные <= 1024 байта) за один запрос в одном поле:
http://www.hacked.com/index.php?id=-1+UNION+SELECT+GROUP_CONCAT
(TABLE_NAME SEPARATOR 0?0a)+FROM+information_schema.TABLES/*Думаю, принцип использования функции ты понял, а почитать дополнительную инфу по теме ты можешь в блоге Raz0r'а: http://raz0r.name/obzory/group_concat.
Комментариев нет:
Отправить комментарий