Не удалось прогрузить медиа
Пищевуха 2026 или как меня накормил Swagger
Приветствую всех. Решил начать свою писательскую деятельность с короткого очерка на тему известного направления в хакинге - пищевухи. Для начала небольшой дисклеймер к текущей статье:
- Статья является художественным вымыслом автора, все совпадения с реальностью случайны
- О том, что происходит в статье уже оповещены все заинтересованные люди и это исправлено
- Всё происходило в рамках BugBounty
- В тексте имеется ненормативная лексика, детям и беременным женщинам лучше воздержаться от прочтения
Введение
В одном маленьком городе X полюбилась мне одна точка общественного питания. Фастфуд, но какой! Хоть и дорого, но достаточно вкусно делают свои блюда. Естественно мой кулхацкерский разум не могла не посетить идея полакомиться изумительными блюдами бесплатно, хотя если честно - я к этому не относился серьёзно.
Одним днём, проходя мимо данной точки, краем уха я услышал как один голодный клиент данной точки продиктовал код своей карты лояльности. Не услышал я лишь последнюю цифру из восьми. Ну, думаю, а почему бы не попробовать угадать эту цифру? Решено, угадываем. И я, конечно же, УГАДАЛ эту цифру и получил в своё распоряжение карту лояльности на которую я мог получить бургер бесплатно. Разве я мог остановиться после этого? Вопрос риторический и я принял решение - получить шаурму бесплатно. Любой ценой, но бесплатно!
Исследование APK, статистический анализ
Это не просто проходная жральня от иностранных специалистов, коих очень много в этом городе Х. Эта более современная - имеет своё приложение, свой сайт и собственную программу лояльности. Конечно же они делали это не своими руками, а заказали у одного агрегатора, который вызвался на помощь и организовал всю интернет-инфраструктуру для этого небольшого места. Первая точка входа - Android приложение. Скачав .xapk файл я сначала удивился тому, что основное приложение весило меньше, чем как-той конфиг этого приложения:
Не удалось прогрузить медиа
В современном мире в Google Play все приложения уже давным давно упакованы в XAPK файлы, а не в одиночные APK. Но в плане разбора их приложений ничего не усложнилось - просто внутри XAPK несколько APK файлов. Внутри XAPK нужным является тот APK, который имеет в названии название пакета (com.android.superapp.apk).
Распаковал я, значит, главный XAPK файл и смотрю - а нихуя нет! Единственное что я обнаружил - это косвенное доказательство того, что приложение сваяли на Flutter.
Не удалось прогрузить медиа
Flutter интересен тем, что основная логика у него хранится в libapp.so файле. Всё превращено в всратый файл, который остаётся только реверсить или проводить динамический анализ, так как всё обфусцировано. Но не в случае, если его разрабатывали инвалиды от программирования! Собственно в APK, который весит 57 МБ и лежит тот самый libapp.so файл (.apk/lib/libapp.so). МНЕ ТАК НЕ ХОТЕЛОСЬ ПОДНИМАТЬ ИНФРАСТРУКТУРУ ПОД ДИНАМИЧЕСКОЕ ИССЛЕДОВАНИЕ, ВЫ БЫ ЗНАЛИ! Понимание того, что я работаю с Flutter привело меня к мысли, что сегодня я останусь голодным!
На помощь пришёл православный инструмент strings и не менее православный инструмент grep. Всё что мне нужно было от этого файла - найти эндпоинты, токены от API и прочее интересное.
Не удалось прогрузить медиа
Эндпоинт есть, но почему один? Разве может нормальное API работать по одному эндпоинту? Вряд ли. А вот терь посмотрим что там у нас внутри...
Не удалось прогрузить медиа
Ахаха? А если у вас упадёт один эндпоинт. У вас же, б**дь, микросервисная архитектура, сучары!))) Если отбросить эмоции от уведенного, то можно понять, что у приложения лишь одна точка входа, которая отдаёт все остальные эндпоинты. НО КАК ЖЕ БЕСПЛАТНУЮ ИСКАТЬ ЕДУ?
Исследование API, наход Swagger в касание
Изучая API этого приложения (а в целом не только этого!) я приметил лишь два пути: поменять баланс карты или найти себе карту лояльности. В первом случае мне нужно было найти эндпоинты, которыми я бы смог управлять картами, а во втором случае мне надо было найти способ получить вообще все карты. Эндпоинтов, которые управляют картами, я не обнаружил вообще. Обнаружен был эндпоинт getBonusSystemCustomerProfile. Он находится в группе authorizationSettings. Это в целом группа, которая внутри себя содержит все эндпоинты для управления клиентами. Перейдя по URL я встретил ошибку 415, которая мне явно намекала, что без POST запроса мне не обойтись. Я вообще в интернете давно и знаю такого персонажа под ником Webkill, поэтому с хакерской догадкой у меня всё отлично... И я подставил /swagger к хосту!
Не удалось прогрузить медиа
Ахаха x2? Вот за что я люблю наших разработчиков, так это за то, что при тотальной цифровизации и уровня ИТ, они в 2026 году умудряются до сих пор оставлять открытыми сваггеры-хуяггеры и спать при этом ночью спокойно!
Ну ладно, может быть это тот Swagger, который будет закрыт от миллиона других жаждущих... НУ НАДЕЙТЕСЬ, КАК ГРИЦА!
Не удалось прогрузить медиа
Swagger оказался доступным для всех, в том числе для оголодавших кулхацкеров. НО ГДЕ ЖЕ ВСЁ-ТАКИ ИСКАТЬ ЕДУ?
Исследование пользовательского метода и поиск "жертв"
Главный вопрос всего этого мероприятия - как пожрать бесплатно. Именно этим я и руководствовался когда начинал это мероприятие. В поисках нужного метода, мой оголодавший разум указал на метод GetUserProfile и разум меня не подвёл.
Не удалось прогрузить медиа
Если с companyId всё стало понятно, когда я обнаружил родительской эндпоинт, то с branchId и phone возникли вопросы. Оказалось, что branchId необязательный параметр. Остался телефон. Ну не буду же я сюда свою мобилу вписывать, ёпта)))
Первая попытка - телефон самой точки. ХУЙТАМ! Нет такого профиля с таким телефоном. Хотя может быть это и хорошо, так как жрать с карты владельца или приближённых - очень палевно.
Было принято решение - искать. Где искать? Социоактивные люди любят сидеть в социальных сетях, а значит надо двигаться туда. Был обнаружен паблик на тысячу вечноголодных потенциальных жертв. В 2026 году некоторые люди до сих пор оставляют в контактах свои реальные мобильные телефоны. Не скрою, я перебрал достаточное количество профилей чтобы найти один нужный (где-то 30-50). Где-то страницы закрыты, где-то телефонов нет, где-то телефоны не до конца написаны, какие-то телефоны просто не подошли. Спустя несколько десятков профилей был найден профиль одного доброго человека:
Не удалось прогрузить медиа
Ахаха х3? СКАЙПА НЕТ УЖЕ ТЫСЯЧУ ЛЕТ!
Ну, недолго думая я хуйнул этот телефон в метод и...
Не удалось прогрузить медиа
Помимо личных данных ОДЕПТА БЫСТРОГО ПИТАНИЯ я обнаружил блок с бонусной картой. Это то что мне надо! (PS Баланс 0 потому что я уже похавал).
Небольшое отступление к началу. Тот код, который я угадал, состоял из 8 символов, а тут либо 13 либо 8, что никак не сходится с тем, что я увидел на своём аккаунте. Я знал, что у этой точки есть физические карты, которые славно работали до того, как была реализована полноценная программа лояльности.
Попытавшись зарегистрировать новый аккаунт, указав номер этой карты (в двух разных вариантах), я потерпел неудачу. Вероятно система не даёт привязать карту, которая уже привязана. Ну и что делать-то? КАК ПОЖРАТЬ-ТО?
Покупка карты на дропа, подделка карты
Раз привязать номер карты к новому профилю не получилось, значит надо думать в сторону физической карты. Цена этой карты 80 рублей. Взяв с собой дропа, я задумал купить эту физическую карту. Я вообще думал, что это NFC карта, АВОТХУЙ, это кусочек картонки, на которую напечатали штрих-код. А я уж размечтался, как сбручу ключ этой карты своим Флиппером и перезапишу карту... УВЫ И АХ!
Не долго гугля выяснилось, что на карте напечатан EAN-13 штрих-код с каким-то кастомным шрифтом (я его так и не нашёл). Гугл говорит, что на штрих-кодах обычно печатают с помощью шрифтов OCR A/B, но не в этом случае (а было бы проще!).
Не удалось прогрузить медиа
Полазив по интернету, я не нашёл ни одного вменяемого генератора, который сделал бы мне нечто похожее. С таким же шрифтом. Везде палевно и криво получается. Помощь пришла откуда не ждали! ChatGPT сгенерировал мне штрих-код, который был очень похож на тот, который мне нужен. С единственным НО: этот штрих-код был невалидным.
Не удалось прогрузить медиа
Да, б**дь! Эти нейросети... Вроде всё хорошо, но сам-штрих код не сканируется. Чат даже штрих-код сгенерировать не может!
Ну ладно. Зато цифры вроде как хорошо выглядят и более-менее похожи. Я ведь так и не смог подобрать шрифт. Похоже что-то на стандартное из Windows, но ничего не нашёл. Вооружившись онлайн-генератором, фотошопом, потратив час времени, я получил вот такой вот результат, совместив нейросетевой результат:
Не удалось прогрузить медиа
Да, палевно! Да, криво! Да, не так точно! Да похуй!
Получив более-менее приемлемый результат, я сфотографировал штрих-код с экрана монитора, для получения большего количество шумов. Заодно несколько раз проверил валидность этого штрих-кода, была не попасть в просак на месте. Далее мне предостояло отправиться на точку сбыта еды и с серьёзным лицом заказать себе шаурму за баллы. Купил ещё кое-что за свои, чтобы не быть слишком охуевшим...
Не удалось прогрузить медиа
У ПОСЛЕДОВАТЕЛЯ WEBKILL С ХАКЕРСКОЙ ДОГАДКОЙ ВСЁ ОТЛИЧНО И ПОЭТОМУ Я СЕГОДНЯ ПОЕЛ БЕСПЛАТНО!
Посвяща эту статью Кроб, который уже сто лет как ушёл из жизни.
БЫТЬ КРОБЕРОМ - ЖИТЬ ВЕЧНО!
👍61
❤️16
😁8
💯18
LIMB