>
Июнь 2018
Пн Вт Ср Чт Пт Сб Вс
« Апр    
 123
45678910
11121314151617
18192021222324
252627282930  

Пример SQLi Blind эксплоита на Python.

Когда говорят о SQLi у большинства возникает ассоциация примерно такая : ‘ ” ; Поставить апостроф после какого-нибудь дорка, увидеть ошибку SQL и встречай мама своего кулцхакера. Честно говоря, это было актуально лет 10 назад. Сейчас, встретить что-то вроде .php?id=  это как найти слиток золота в центре столицы, да и то не факт, что это будет не муляж, а запрос не будет правильно обрабатываться. И когда я читаю что-то подобное, я сразу вспоминаю своего очень древнего преподавателя в университете, который нам рассказывал про концентраторы, повторители, мосты, token ring и fddi. Я считаю это историей, которую можно встреть только в особо отдаленных или специализированных местах, возможно даже в музеях.

Сегодня хочу рассмотреть довольно интересный случай, и он не ограничится 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 и перебираем буквы и цифры:

Пароль найден, но он не подходит, т.к. заглавные буквы тут не определились.

Поэтому перепишем код, основываясь на уже имеющихся данных:

Запустим и получим долгожданный пароль:

Всем отличного отдыха ))

Share Button
[Всего голосов: 9    Средний: 2.9/5]

Вам может быть интересно также:

Last updated by at .

Leave a Reply

You can use these HTML tags

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">