
Комментарии 64
А сколько % от покупки можно покрыть сертификатом? Если меньше 100, то тут вообще может быть политика "возьмите хоть за -90%, и мы всё равно останемся в плюсе" :)
Например, некоторые мобильные приложения в принципе не валидируют промокоды в пейволах
Я никогда не видел подарочных сертификатов, которыми можно оплатить только часть покупки. Это какое-то чистое зло
В большинстве магазинов до 100%, но при этом, при выдаче сертификата они регистрируют его у себя в ПК, и при обналичке тоже. Выдают рандомно, просто пачка напечатанных лежит, и если ты купишь по совпавшему с номером другого клиента, есть не малый шанс, засветится на камеру. Что бы через сайт покупали, без предъявления не встречал, может и есть у кого.
Обычно подарочные сертификаты это эквивалент денег, можно оплатить 100%. А то о чем вы говорите это уже промокод на скидку.
Судя по API тут был именно сертификат
Это вот написать вот такую экстамегафигню ради того, чтобы "взломать" EAN13 ?
Автор, там не 6 значащих символов, а 5. Последний - контрольный, вычисляется по формуле.
Секретная формула
Алгоритм расчёта контрольной цифры:
Сложить все цифры на нечётных позициях (1-я, 3-я, 5-я и т. д.).
Сложить все цифры на чётных позициях, умножить сумму на 3.
Сложить полученные результаты.
Найти ближайшее большее число, кратное 10.
Контрольная цифра — разность между этим числом и суммой.
Стартовая двойка - служебный не товарный диапазон кодов :)
Учитывая общую лень разработчиков, можно быть абсолютно уверенным в том, что нумерация последовательная.
Ну и да. Разрабы этого "сертификата" конечно ленивые олухи, но .. куртку то Вы в итоге купили ? :))))
Какая разница EAN13 или нет если эндпоинт принимает простой инкрементальный идентификатор? Автору и не нужно было знать про контрольную сумму, он просто перебирал числа, а сервер сам все валидировал. В этом и суть уязвимости
Ну то есть мы брутфорсим просто потому что у нас хватает машинных ресурсов и теряем несколько часов на разработку с помощью ИИ вместо 10 минут времени на простой вопрос в гугле или тому же ИИ о формуле составления штрихкода? а затем говорим что это “взлом"?
Парни, я кажется понял почему у нас сейчас Тетрис весит больше всего установочного пакета первой 1С Бухгалтерии и выжирает батарею телефона за 15 минут.
Автор несколько часов ломал дверь, которая просто открывалась в другую сторону.
И последний вопрос. Сервер "валидировал" что? Существование номера купона? Его бы ровно также "валидировал" простой эксель с формулой.
Отоварить то те купоны получилось? Нет? И в чём был взлом? Автор брутфорсом нашел результат вычисления формулы, которой скоро 50 лет исполнится?
Автор хоть любопытен, что уже хорошо. И изложеное в статье - личный опыт и вид творчества. Уж лучше, чем строчить бесполезный словесный мусор на модные на сегодня темы, чем забито 95% текстов хабра.
Тут я с Вами целиком согласен :))
Автору была продемонстрирована досадная методическая ошибка при подготовке к дерзкой операции, и подсказан метод, которым он мог сэкономить себе уйму времени, погрузись он хоть чуток в предметную область :)))
"Погрузись хоть чуток в предметную область" школьники и романтики, пишущие, к примеру игры, и 99% шедевров не были бы написаны. То же и во любом творчестве: это не гонка, а дорога, по которой можно ходить сколько хочешь раз и без оглядки "в предметную область", если ты не профессиональный artist. :)
Разумеется.
Мне нужно начать занудствовать в ответ на тему "учёбы на ошибках" ? :)
...
У меня ведь естественно не закончена аналитика по данному кейсу.
Есть ещё одна прекрасная и поучительная история. Но она уже не имеет отношения к технике, она по бизнесовой части.
И я в общем сознательно не продолжаю.
Да зачем занудствовать, давай(те) лучше дружить!
Да я только за :)) В отличии от некоторых :)))
вчера в 20:51 -1 Личная неприязнь
Так поступают люди, мягко говоря, не умные. С появлением возможности "Скрыть публикации автора" - карма стала рудиментом. Я просто баню в ленте тех кто должен идти мимо, и подписываюсь лишь на тех, кто мне интересен.
Унылая классика «Хабра» с минусованием кармы ни за что. Кинул в вас плюсом :)
Вообще удивлен с того, как сайт на техническую и прикладную тематику, ВНЕЗАПНО превратился в помойку для рекламы успешного успеха и вайбкодинга)
Не понял предъявы :) Купоны нашёл? Нашёл. Можно их отоварить? Можно (ведь мой личный купон, который был среди найденных , сработал - значит, сработают и остальные). Стал ли я отовариваться? Нет, потому что это преступление. Или это не считается взломом, пока я не стану писать статью из СИЗО?
Если Вас интересует точный термин, то это не взлом, а обнаружение уязвимости в рамках OSINT, так как Вы не обходили никаких защит, а взяли информацию с открытого URL
СИЗО Вам могло бы грозить только в одном случае - если бы Вы или те, кому Вы передали (если бы передали) результат, изготовили дубликат той самой карты с другим номером и предъявили его в магазине. Тогда, да. 159ч2 УК без вариантов.
А так - ещё раз. Это чистый OSINT.
Не самым оптимальным способом :)))))
И последняя подсказка, Александр
Свой OSINT Вы до конца так и не довели, либо не написали об этом.
Если Вы действительно отоварили Вашу карту (будем верить, что это так, ибо любые реальные пруфы потребуют от Вас открыть жертву эксперимента), то бай дефолт нужно было повторно дёрнуть урл по номеру, вытащить инфу и пройти по изменению полей - глянуть где чекнули использование
Потому что если купон не отмечается в этой базе как использованный, то Вы обнаружили совсем уж сказочных дятлов.
Ну и финальным штрихом нужно было свериться с первичной выборкой - какое количество купонов ещё взведены в боевое состояние и могут быть использованы, а какие уже потрачены.
Тогда и только тогда можно было бы выходить с фактажом (сумма найденных финансовых рисков) на представителей компании. Номиналы карт по запросу были видны.
Крч.
Сорян, что я тут нафлудил, но зашёл посмотреть на “взлом" и за время чтения статьи успел удивится дважды.
Сначала когда увидел ean в качестве номера, таких косяков уже давно не доводилось наблюдать
А затем ещё раз - когда увидел, что Вы это не использовали.
Прикольная статья. Удачи. Совершенствуйтесь :)
Вышел :))
Ой, вэй! У меня на одной из прошлых работ было нормой в рознице маркировать товары EAN, начинающимся с двойки, а для абониментов в кинотеатр использовать карты Mifare. Ну и с "картами лояльности" FixPrice, Перекрёсток и прочих сетей факап 10+ летней давности был... в общем, статья (применённая технология "взлома") просто банальная, не более того. В общем и целом, грабли давным-давно известные.
Лайк поставил за очередной микробаг Хабра) Но на фоне предыдущих статей ожидал большего... Саня, ты не я и можешь лучше!
Тут дело в том, что сама возможность оплаты таким "промокодом" на сайте с такой пластиковой карты - это тупизм их системы. Обычно магазины заказывают тупо пару сотен карточек с штрихкодами EAN 13 идущими по порядку. Но вот обналичить такой сертификат можно только предъявив его в магазе, иначе любой школьник взломает "систему", а магаз получит скандал от владельцев уже пользованных карт.
Но за статью спасибо, было интересно.
А где в статье показана возможность оплаты на сайте? Проверка существования номера - есть. А оплата? Можете прямо место в статье процитировать?
подарочный сертификат, который выглядит примерно вот так:
Используется он просто: при оформлении заказа в поле "промокод" вводите номер штрих-кода, и скидка применяется.
И далее:
Дальше можно было бы заказывать шмотки на дропов или продавать эти коды где-нибудь в даркнете со скидкой
Как обычно шикарно :) Не зря я прятал код на кофе на конфе Хабра :)
Спасибо за пищу для размышлений. Хотя, конечно, сделать сертификаты настолько тупо мне не пришло бы в голову даже до статьи, но лишний раз задуматься отнюдь не вредно.
Про дорогие шмотки: обычные по цене футболки у меня живут полгода-год, после чего на них без слёз не взглянешь. Купленные в 2017 за примерно 5× не только до сих пор живые, но и прилично выглядят. Если не знать, куда смотреть, от новых не отличить.
Лет 30 назад, когда связь в магазинах была ещё модемной и CRM-систем в РФ не существовало как класса, такое исполнение было не просто популярным, но почти единственно возможным. Однако и тогда EAN13 для нумерации использовали только самые отважные. Всё-таки старались сделать собственную кодировку.
Мне вот сейчас реально интересно - где ж такие серты то дают до сих пор. Пойти купить, вспомнить детство.
сделать сертификаты настолько тупо мне не пришло бы в голову даже до статьи,
А вот Ebay когда-то додумался. Народ быстро просёк, что буквы и цифры идут в порядке увеличения и начал бесплатно тырить эти купоны. На сколько тысяч баксов нагрели Биглион за ту ночь, пока к утру они не отключили акцию, не знаю, но подозреваю, что прилично.
Т.е. самому Ebay, видимо, было пофиг, они выдали массив купонов, а в каком порядке их будет выдавать Биглион покупателям, это проблема Биглиона.
Так а взломав систему - оправдание мол "случайно ввел не ту цифру в своем сертификате" не прокатит? Интересно что за магазин и как они быстро это исправят. Автор пиши как узнаешь)
Попиарюсь в комментах в чужой статье, хорошо?
Вот питонячий модуль для перестановки бит в целых числах, который в частности предназначен для того, чтобы маскировать простые последовательности: https://pypi.org/project/bit-permutation/
Интересно, а при сканировании штрих-кода любого товара какова будет вероятность получить скидку, предъявляя, допустим, пачку сока?
Если код начинается с двойки (что говорит о разливном соке или о собственном производстве магазина), то шансы есть, т.к. дисконтные карты и подобные сертификаты часто кодируют в этом же "частном" диапазоне. В остальных случаях вероятность стремится к нулю.
Есть 2 момента
Первый осветили выше. Коды ТОВАРОВ формата ean13, начинающиеся на "2" можно встретить очень редко. Это или совсем маленький производитель, который не получил полноценного префикса в GS1, или внутренний товар магазина. Взвесьте яблоко на весах, напечатайте этикетку - увидите.
В статье дана фотография носителя. Это пластиковая карта, стандартная девятка, с типографски нанесённым номиналом и баркодом. Вы уверены, что у Вас выгорит предъявить в магазине пачку сока вместо такой карты?
Так что вероятность именно получить скидку по пачке сока ровно такая же, как встретить в магазине динозавра. 50%
Там есть online покупки с вводом кода карты. Ничего предьявлять на кассе не придётся.
Любыпытный ты тип, Саня, но плохой переговорщик. К тому же любишь постоянно ходить ходить по тем же граблям: опыт участия в "конкурсах" - тебя ничему не научил. :)
Сбер. Как некрасиво поступить на конкурсе красоты
https://habr.com/ru/articles/766850/
Ты бесплатно выполнил за Дядю Бизнесмена работу. Теперь подумай: кто дурак - ты или он вдуваший тебе в уши про "награды", "конкурсы" и"этических хакеров".
Ты приходишь как попрошайка, и получаешь как попрошайка. Иного и быть не может. Учись переговорам. :)
"Со мной в комнате 50 подарочных кодов, и я буду активировать по одному каждый час пока вы не дадите мне миллион долларов и вертолёт."
Реакция магазина самая смешная в этой истории - "Спасибо, но нет"
Базоый ответ, объясняющий почему такие дыры вообще существуют. Им просто плевать :)
Стоимость фикса видимо выше, чем потенциальные потери от таких вот скучных взломов
Как правило, угрозы ИБ недооценивают до первого серьёзного инцидента. Распределением ресурсов занимаются менеджеры - и пока они на собственном опыте не почувствуют зачем нужно ИБ, они не видят смысла выделять деньги на это.
И, кстати, когда закрыть уязвимость стоит дороже, чем последствия ее эксплуатации - в этом действительно нет смысла.
А где уязвимость то? Сколько магазин продал кодов, столько и отоварили. Если он конечно активирует их при продаже. Если при изготовлении, то конечно сам буратино.
Тот у кого сертификат не прошел, получит ответ что он сам передал код, и в общем, опровергнуть это нечем. Тот кому пришла футболка, скажет следователю что ему подарили сертификат, он его использовал и выкинул, тут тоже не доказать злого умысла.
Ещё, по уму, код должен быть заштрихован, иначе как мне вообще узнать что его ещё не использовали?
В общем, надо было заказать и узнать что будет. Можно не получать заказ и остаться в белой шляпе.
Ещё, я бы проверил атаку одновременной активации одного купона в разных сессиях, читал, есть и такие уязвимости.
А я так надеялся на какую-нибудь пасхалку в длиннющей строке из 4186 буковок (типа - десяток номеров купонов с максимальным значением:()
Что-то мне подсказывает, что при получении кепки или ветровки все-таки нужно физически отдать сертификат. Есть много сертификатов с номером 0123 или вообще без номера. В данном случае это денежный суррогат.
Если компания не объявляла о наличии BugBounty программы, то хорошо что еще поблагодарили, а не обвинили во взломе.
Насчёт материального поощрения - ваше обращение принял оператор поддержки, у которого нет полномочий и ресурсов выдавать какие-то награды, но которому, скорее всего, обязательно нужно ответить на ваше обращение согласно рабочему процессу. Без налаженного процесса BugBounty нужно чтобы ваши отчёты дошли до кого-то, у кого есть ресурсы, полномочия и желание поблагодарить вас.
мне просто дали нефритовым стебельком по лбу
Тоже самое было и у меня, даже хуже. Отправил в Ленту свои впечатления о первой покупке на её сайте в виде структурированного отчета на 10 (десяти!) страницах. В ответ получил... просьбу предоставить видео/скриншоты обнаруженных ошибок. И это всё.
В Дикси на аналогичную обратную связь вообще никак не ответили, даже после повторной отправки с другого e-mail.
Думаю, что те, кто принимает письма - это низкооплачиваемые сотрудницы поддержки, с невысоким IQ, без опыта работы, которых набрали по объявлению на каком-нибудь Авито. Они вкатились в IT и приходят на работу исключительно за деньгами. Поэтому им и в голову не приходит, что за обнаружение косяков, да ещё и в таком количестве, хорошо бы отблагодарить сообщившего. И уж тем более такие сотрудницы не станут обсуждать данный вопрос с руководством - ведь их зарплата/премия от этого никак не увеличится. (здесь должен быть смайлик с долларовыми купюрами в глазах, ушах и во рту, с подписью "Не вижу. Не слышу. Молчу")
Вообще-то набранные по обьявлению всё делают правильно, их задача - маршрутизация. Далее, это уже должны обработать другие отделы и в итоге прислать благодарственное письмо, вознаграждение или иск. Но маршрутизация может идти и в девнул. Ну дыра в безопасности - странно, у нас что-то да в безопасности!
Непонятно в итоге - работает ли все онлайн или карту физически нужно предъявлять при оформлении/получении.
Если второе - то есть мелкие конторы, которые и вовсе такие сертификаты печатают безо всяких кодов чисто на принтере
Автору спасибо за интересный обзор уязвимости. Причина тряски вполне обоснованна, но мне кажется, ждать какой-то развернутой обратной связи (в т.ч. - выраженной хотя бы в минимальном денежном эквиваленте) изначально не стоило))
У меня был похожий случай. При посещении одного из известных московских фитнесс-клубов, я обнаружил, что QR-код для входа в локальной БД на сервере не имеет TTL и не перезаписывается. Это позволяло посещать клуб по одному и тому же QR, даже при истекшем абонементе. Я изложил свои мысли в красивый PoC. Дырку пофиксили только через пол года :D
Полагаю, что и этот проект писался для малого/среднего бизнеса по принципу "чтоб красиво и понятно, куда тыкать". ТЗ для таких "сайтов" пишутся по шаблону и вручаются Заказчику. Заказчик молча подмахивает, потому что все равно ничего не понимает, рассчитывая на профессионализм Исполнителя. Почему так? Потому что иметь в штате своего DevSecOps'a могут позволить себе только крупные конторы. Мелким/средним это не нужно)
В 2010 году нашел слепую sql-injection на каком то из поддоменов Mail, выудил админские хеши и ящики, написал про это в саппорт, далее самонадеянно написал об этом статью на antichat
И потом больше года отмывался от репутации нуба, который нашел обычную sql-уязвимость, выудил хеши паролей и думает, что это взлом (спасибо, blacksun).
А в 2025 году взломом называется перебор ОТКРЫТЫХ числовых купонов.

Так и не понял где взлом? В EAN13 последняя цифра - контрольная. Так что длина кода 5 цифр, а не 6. Так что автор методом перебора каждый раз получал 6ую вместо того, чтобы по считать по формуле.
А что дальше? Где проверка, что купон действующий?
Самый скучный на свете взлом подарочных сертификатов