Когда говорят о SQLi у большинства возникает ассоциация примерно такая : ‘ » ; Поставить апостроф после какого-нибудь дорка, увидеть ошибку SQL и встречай мама своего кулцхакера. Честно говоря, это было актуально лет 10 назад. Сейчас, встретить что-то вроде
Сегодня хочу рассмотреть довольно интересный случай, и он не ограничится
Обычное поле ввода логина пароля. Чтобы найти уязвимость требуется повозится. В данном случае я воспользовалась burp
Поставила
Действительно мы видим предупреждение
И вправду, спустя какое-то время я увидела эту функцию в действии, она реагировала на некоторые ключевые слова, например
Но до этого момента мы еще дойдем, а пока попробуем ввести в поля спецсимволы:
Отлично! Мы на верном пути. Не забываем фиксировать ошибки, которые находим:
Следует вывод, что какой-то символ ломает синтаксис SQLite, поэтому сейчас надо его найти.
Методом проб и ошибок, оказалось что это обычная одинарная ковычка. Но только в одном поле, либо логина, либо пароля, а я вводила в оба, поэтому ошибка не появлялась.
Дальше интереснее — раннее при вводе неверного логина, пароля мы видели «no such user/password». Ну чтож, это наталкивает на мысль, что мы можем попробовать найти валидных юзеров. Сформируем запрос, например такой admin’ — а пароль введем рандомный:
Чудненько, логин admin валидный, можно таким образом найти и другие, и кстати, регистр имеет значение. Так например Admin уже не является валидным юзером.
Поэксперементируем с запросами и выявим других пользователей:
Создать карусель
Ну а дальше я наткнулась на вышеупомянутый фильтр, когда хотела использовать запрос
На помощь я позвала Python с библиотекой httplib
Я взяла исходники оттуда и буду допиливать. Нам нужны пост запросы, т.к. мы нашли уязвимость в них. Будем писать эксплоит
Это пример с сайта. Совсем сырой и не под нашу задачу. Перепишу его под нашу задачу.
Для проверки работоспособности и ответа:
Ответ:
Чудесно, продолжим. Напишем первый эксплоит:
Как видно, используем библиотеку string и перебираем буквы и цифры:
Пароль найден, но он не подходит, т.к. заглавные буквы тут не определились.
Поэтому перепишем код, основываясь на уже имеющихся данных:
Запустим и получим долгожданный пароль:
(с) Denis Matveev
cryptoworld
.php?id= это как найти слиток золота в центре столицы, да и то не факт, что это будет не муляж, а запрос не будет правильно обрабатываться. Сегодня хочу рассмотреть довольно интересный случай, и он не ограничится
admin’ or 1=1. Так что запаситесь вкусняшками и налейте себе какао, будет на что посмотреть.
Обычное поле ввода логина пароля. Чтобы найти уязвимость требуется повозится. В данном случае я воспользовалась burp
Поставила
[] после username и password, чтобы ввести php в заблуждение, предоставив ему массив. Таким образом иногда могут вылезти предупреждения. Вот что вышло в данном случае:
Действительно мы видим предупреждение
stripos()…. если поискать информацию об этой функции, то это своего рода фильтр, такой своеобразный WAF(нет) )) И вправду, спустя какое-то время я увидела эту функцию в действии, она реагировала на некоторые ключевые слова, например
union:
Но до этого момента мы еще дойдем, а пока попробуем ввести в поля спецсимволы:
Отлично! Мы на верном пути. Не забываем фиксировать ошибки, которые находим:
Следует вывод, что какой-то символ ломает синтаксис SQLite, поэтому сейчас надо его найти.
Методом проб и ошибок, оказалось что это обычная одинарная ковычка. Но только в одном поле, либо логина, либо пароля, а я вводила в оба, поэтому ошибка не появлялась.
Дальше интереснее — раннее при вводе неверного логина, пароля мы видели «no such user/password». Ну чтож, это наталкивает на мысль, что мы можем попробовать найти валидных юзеров. Сформируем запрос, например такой admin’ — а пароль введем рандомный:
Чудненько, логин admin валидный, можно таким образом найти и другие, и кстати, регистр имеет значение. Так например Admin уже не является валидным юзером.
Поэксперементируем с запросами и выявим других пользователей:
Создать карусель
Ну а дальше я наткнулась на вышеупомянутый фильтр, когда хотела использовать запрос
‘ limit 0 union select 1,2,3 —.uni/**/on также не сработало. Так что придется выкручиваться =) На помощь я позвала Python с библиотекой httplib
Я взяла исходники оттуда и буду допиливать. Нам нужны пост запросы, т.к. мы нашли уязвимость в них. Будем писать эксплоит
Это пример с сайта. Совсем сырой и не под нашу задачу. Перепишу его под нашу задачу.
Для проверки работоспособности и ответа:
Ответ:
Чудесно, продолжим. Напишем первый эксплоит:
Как видно, используем библиотеку string и перебираем буквы и цифры:
Пароль найден, но он не подходит, т.к. заглавные буквы тут не определились.
Поэтому перепишем код, основываясь на уже имеющихся данных:
Запустим и получим долгожданный пароль:
(с) Denis Matveev
cryptoworld