Хабрахабр

Система лояльности или как жить бесплатно

Доброго времени суток, хабровчане. В связи с большой паникой прошлой статьи презентую вам вторую версию. Тут все просто, без соплей. Система лояльности — одна большая дыра. Проведя некоторые эксперименты, мы пришли к выводу, что большое количество сайтов, где используется такая система, напрочь лишено логики при попытке ее использовании.

image

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

image

Это лишь в фильмах вам покажут кучу гаджетов будущего, функционал которых не имеет смысла в настоящем. Вообще, многие хакерские атаки происходят почти в таком виде.

Для примера я возьму несколько систем, где может существовать массовый карж. Перейдем к делу.

Начнем с OBI.

Их смутные правила об использовании бонусов ставят меня в разные сомнения. Скажу сразу, для меня он мало изучен. По одной из них можно расплачиваться лишь в трех городах России, по другой – во всех. Во-первых, у них есть несколько бонусных программ. Но и за полцены домик построить – это уже хорошо. При этом, бонусы распространяются не на все, а только до 50% стоимости товара.

В общем, у ОБИ также есть приложение, где можно залогинить нашу карту и расплачиваться, генерируя штрих-код.

Переходим на страницу регистрации легким прикосновением волшебной палочки:

image

Попадаем на форму регистрации не нашей карты:

image

Что ж, заполняем ее. Кстати, тут система исчисления карт такая же, как и в «Перекрестке». Дабы ясно выразиться – Алгоритм Луна. Я заполнил все данные, указал рандомный номер карты. В процессе через снифер отловил запрос регистрации.
Повторил его несколько сотен раз в цикле. Каких-либо ошибок не было. Сайт вполне работоспособно обрабатывал мои запросы и выдавал ответ в json:

\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445."]}}]} "data":,"errors":[{"message":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0444\u043e\u0440\u043c\u044b.","type":"validation","locations":{"path":"\/work\/obiclub.ru\/app\/GraphQL\/Mutation\/Frontend\/RegistrationMutation.php","line":109},"safe":true,"validation":{"cardnum":["\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b.

В переменной cardnum был следующий текст, что в переводе с греческого Unicode означает –

Проверьте корректность введенных данных» «Неправильный номер карты.

Интересно, что на все мои запросы с одного IP не было блокировки. Более того, сессия живет очень долго. Проверил спустя сутки – ответ был. Могли хотя бы куки обнулить, капчу ввести, а то сплошной «фейспалм». Написать софт не составит труда, вот только он попадет под
УК. РФ. ст.273, а это уже опасно!

Надо бы заправить наш автомобиль и покататься по городу. Что ж, дом мы построили. Система у всех одна, но подход к ней разный, поэтому продемонстрирую на самой простой, мало известной АЗС. Я бы мог привести сюда пример с самыми популярными АЗС, но в виду кое-каких соображений не стану этого делать.

RU. AZS-ETALON. Принцип действия аналогичен – есть карта лояльности; есть сайт, где регистрируем карту; есть приложение, через авторизацию в котором можно расплачиваться на кассе. Привлекла мое внимание тем, что находится в моем городе. Ну, тут вообще смешно.

Переходим на форму регистрации карты — lk.azs-etalon.ru/registration.php

image

Заполняем любые данные, жмем «Взломать» «Зарегистрировать». Получаем ответ

«Неверный номер карты»

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

Получаем следующее — Автоматизировать?
— Изи.

Ловим пакет на регистрацию.

HTTP-HEADERS:

Заголовок спойлера

Host: lk.azs-etalon.ru
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: lk.azs-etalon.ru/registration.php
Content-Length: 174
Cookie: _ym_uid=10265171001178589; _ym_d=1214095619; _ym_visorc191282814=w; _ym_isad=2; PHPSESSID=u0vp19oks8iman1hi8m8j1n105
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
If-Modified-Since: *

POST-DATA:

Заголовок спойлера

11. card=1111-114-089-111&fio=%D0%90%D0%9E%D0%92%D0%A0%D0%90%D0%9B%D0%9E%D0%92%D0%90%D0%A0%D0%BB%D0%BE%D1%80&phone=7(912)345-6789&date=11. 1990&sex=1&pass=123321q&pass2=123321q

Приводим в удобный вид, подстраиваем под CURL, забиваем в цикл и ставим в поток. Сайт будет выдавать:

«РќРµРІРµСЂРЅС‹Р№ номер карты»

, что в переводе с немецкого CP1251 –

«Неверный номер карты»

Задаем условие на появление другого ответа и находим «гуд». Простейший брут готов.

А, ладно. Капчи нет, блокировки IP за большое количество запросов — нет, даже первичной проверки на ввод данных нет со стороны клиента. И так сойдет.

Он гораздо крупнее других, но все также уязвим. Пройдемся еще по одному зверю.

Лента… Просто — ЛЕНТА

Переходим по хететепес lk.lenta.com/authentication/login/activate-card:

image

Будем считать, что это была заранее валидная, не активированная карта. Нас просят ввести номер телефона

image

Все, мы в Личном кабинете. Что ж, вводим свою мобилу, далее остальные данные, включая пароль.

Важно лишь отловить нужные запросы, затем повторять их в нужной последовательности. Тут как бы все аналогично предыдущим системам.

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

image

Но опытном путем было проверено следующее! Были захвачены запросы на подтверждение кода, в котором все параметры были как на ладони:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть