Система лояльності або як жити безкоштовно
Система лояльності — одна велика дірка. Провівши деякі експерименти, ми прийшли до висновку, що велика кількість сайтів, де використовується така система, геть позбавлена логіки при спробі її використанні.
Звичайно, хтось зміг впровадити хоч просту, але захист, а хто-то представляє себе інтернет у такому вигляді:
Взагалі, багато хакерські атаки відбуваються майже в такому вигляді. Це лише у фільмах вам покажуть купу гаджетів майбутнього, функціонал яких не має сенсу в цьому.
Перейдемо до справи. Для прикладу я візьму кілька систем, де може існувати масовий карж.
Почнемо з OBI.
Скажу відразу, для мене він мало вивчений. Їх смутні правила про використання бонусів ставлять мене в різні сумніви. По-перше, у них є кілька бонусних програм. За однією з них можна розплачуватися лише в трьох містах Росії, з іншого – у всіх. При цьому, бонуси поширюються не на всі, а тільки 50% вартості товару. Але й за півціни будиночок побудувати – це вже добре.
Загалом, у ОБІ також є додаток, де можна залогинить нашу карту і розплачуватися, генеруючи штрих-код.
Переходимо на сторінку реєстрації легким дотиком чарівної палички:
Потрапляємо на форму реєстрації не нашої карти:
Що ж, заповнюємо її. До речі, тут система числення карт така ж, як і в «Перехресті». Щоб ясно висловитися – Алгоритм Місяць. Я заповнив всі дані, вказав рендомний номер карти. У процесі через сніфер відловив запит реєстрації.
Повторив його кілька сотень разів в циклі. Будь-яких помилок не було. Сайт цілком працездатно обробляв мої запити та отримувати відповідь в json:
"data":{"registration":null},"errors":[{"message":"u041eu0448u0438u0431u043au0430 u043fu0440u0438 u0437u0430u043fu043eu043bu043du0435u043du0438u0438 u0444u043eu0440u043cu044b.","type":"validation","locations":{"path":"/work/obiclub.ru/app/GraphQL/Mutation/Frontend/RegistrationMutation.php","line":109},"safe":true,"validation":{"cardnum":["u041du0435u043fu0440u0430u0432u0438u043bu044cu043du044bu0439 u043du043eu043cu0435u0440 u043au0430u0440u0442u044b. u041fu0440u043eu0432u0435u0440u044cu0442u0435 u043au043eu0440u0440u0435u043au0442u043du043eu0441u0442u044c u0432u0432u0435u0434u0435u043du043du044bu0445 u0434u0430u043du043du044bu0445."]}}]}
У змінній cardnum був наступний текст, що в перекладі з грецького Unicode означає –
«Неправильний номер карти. Перевірте коректність введених даних»
Цікаво, що на всі мої запити з однієї IP не було блокування. Більше того, сесія живе дуже довго. Перевірив через добу – відповідь була. Могли хоча б куки обнулити, ввести капчу, а то суцільний «прикро». Написати софт не складе труднощів, ось тільки він потрапить під
КК. РФ. ст. 273, а це вже небезпечно!
Що ж, ми побудували будинок. Треба б заправити наш автомобіль і покататися по місту. Я б міг привести сюди приклад з найпопулярнішими АЗС, але на увазі дещо якихось міркувань не стану цього робити. Система у всіх одна, але підхід до неї різний, тому продемонструю на найпростішою, мало відомої АЗС.
AZS-ETALON.RU. Привернула мою увагу тим, що знаходиться в моєму місті. Принцип дії аналогічний – є карта лояльності; є сайт, де реєструємо карту; є додаток, через авторизацію в якому можна розраховуватися на касі. Ну, тут взагалі смішно.
Переходимо на форму картки реєстрації — lk.azs-etalon.ru/registration.php
Заповнюємо будь-які дані, тиснемо «Зламати» «Зареєструвати». Отримуємо відповідь «Невірний номер картки» а це означає, що ми будемо вводити наступний номер за рахунком і так далі, поки не знайдемо халявне паливо для нашого чотириколісного друга.
— Автоматизувати?
— Ізі.
Ловимо пакет на реєстрацію. Отримуємо наступне
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:
Заголовок спойлера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.11.1990&sex=1&pass=123321q&pass2=123321q
Наводимо в зручний вид, підлаштовуємо під CURL, забиваємо в цикл і ставимо в потік. Сайт буде видавати: “Невернєй номер карђǔ”, що в перекладі з німецької CP1251 – “Невірний номер картки” Задаємо умову на появу іншої відповіді і знаходимо “гуд”. Найпростіший брут готовий.
Капчі немає, блокування IP через велику кількість запитів — ні, навіть первинної перевірки на введення даних немає з боку клієнта. А, гаразд. І так зійде.
Пройдемося ще по одному звірові. Він набагато більший за інших, але все також вразливий.
Стрічка… Просто — СТРІЧКА
Переходимо по хететепес lk.lenta.com/authentication/login/activate-card:
Будемо вважати, що це була заздалегідь валидная, не активована карта. Нас просять ввести номер телефону
Що ж, вводимо свою мобілу, далі інші дані, включаючи пароль. Все, ми в Особистому кабінеті.
Тут як би все аналогічно попереднім системам. Важливо лише відловити потрібні запити, потім повторювати їх у потрібній послідовності.
Але дослідному шляхом було знайдена якась нехороша вразливість. При введенні не вірного коду підтвердження — що було? Та нічого, нас не пускало в ЛК. Це ж логічно, хлопців.
Але дослідному шляхом було перевірено наступне! Були захоплені запити на підтвердження коду, в якому всі параметри були як на долоні:
{«code»:«12345667890»,«card»:«800011999193»,«phone»:«91234567789»}
Я не буду розжовувати, як я експлуатував цю уразливість, але скажу коротко. За допомогою неї можна просто опустити code і ми завжди будемо потрапляти в ЛК без підтвердження номеру. А це означає, що номер ми можемо вказувати будь-який!
До чого все це? Давайте підведемо підсумки.
Сервісів з системою лояльності дуже багато. Можна нескінченно шукати їх і «брут» бали. Якщо я скажу вам, що можна за ці бали ще й літати на літаку?
У «Аерофлоту» і «S7» також є бонусна система. Як балів виступають милі. Заробляти ми можемо їх від, наприклад, партнерів. У Аерофлоту їх, до речі, близько 2 тисяч. У тому числі, майже всі топові супермаркети, включаючи наш сумнозвісний X5 Retail Group. Обмінювати бали на милі можна прямо в ЛК того ж «Перехрестя». Ну, і так майже у всіх інших сервісах. До речі, даний факт крадіжки миль у авіакомпанії офіційно зафіксований. Гучна справа, не обійшлося без жертв.
У підсумку, все не так просто, як здається. Є люди, які живуть за рахунок цих балів. Ну, а якщо ці бали формально належать вам, хтось сидить на вашій шиї. Кулхацкеры можуть безкоштовно харчуватися, одягатися, кататися на авто, літати по містах, ну і багато що інше.