Co jeszcze można było wynieść z Żappki (oprócz Żappsów)?

Co jeszcze można było wynieść z Żappki (oprócz Żappsów)?

Jak pewnie wiecie (albo i nie), w zeszły tydzień na jaw wyszła luka w API aplikacji Żabki. W skrócie: można było sobie nabić nielimitowaną liczbę punktów - Żappsów, po czym wymienić je na kupony i odebrać ukraść produkty.

Jednakże inne portale ([1], [2]) przytaczają jeden i ten sam fragment skryptu do nabijania sobie punktów. Skrypt, który otrzymałem ja, był troszkę inny...

Przede wszystkim, token generowany był przez użytkownika "na żywo", nie było żadnego "gotowca" już w skrypcie.

def fetch_token(email, passwd):
    uuids = "" # tu wrzuc wlasne losowe uuid
    deviceId = "" # tu tez
    # wywal jak zmienisz

    resp = requests.post("https://zabka-snrs.zabka.pl/sauth/v3/auth/login/client", headers={
        "Accept": "application/json",
        "Api-Version": "4.4",
        "Application-Id": "%C5%BCappka",
        "Mobile-Info": "", # to tez zmien na cos losowego
        "User-Agent": "Synerise Android SDK 4.8.0"
    }, json={
        "identityProvider": "SYNERISE",
        "apiKey": "b646c65e-a43d-4a61-9294-6c7c4385c762",
        "uuid": uuids,
        "email": email,
        "password": passwd,
        "deviceId": deviceId,
    }).json()
    if 'token' in resp:
        return resp['token']
    else:
        print(resp)
        raise ValueError(resp['message'])

Token ten był potem wykorzystywany w każdych późniejszych zapytaniach - w tym od nabijania Żappsów.

Dodatkowo w mojej wersji pojawiło się pobieranie eventów. Są to wszystkie akcje związane z kontem użytkownika.

# pobierasz wszystkie eventy
with open('events.json', 'wb') as file:
    file.write(requests.get("https://zabka-snrs.zabka.pl/v4/events?limit=1000", headers={
        "Authorization": f"Bearer {token}",
        "Api-Version": "4.4",
        "Content-Type": "application/json"
    }).content)

No cóż, w pobranym pliku można odnaleźć kilka ciekawych smaczków!


    1. Na moim koncie od 22:43 zaczęły pojawiać się wpisy "[SW] Nano antifraud - check v2". Pewnie za pomocą swojego gotowego systemu zaczęli szukać oszukanych Żappsów na kontach wszystkich użytkowników.
    2. Widać historię doładowanych Żappsów. W moim przypadku o 23:23 dodałem sobie "points":"99999". Oczywiście poinformowałem wcześniej Żabkę o dostępnym exploicie, a punktów nie miałem zamiaru wykorzystywać. Szanujmy się.
    3. Zbierane są informacje nt. kliknięć w aplikacji ("action":"dashboard.scroll") m.in "card-linkowanie-z-card-with-link" (oof!)  czy też "card-drink".
    4. Kliknąłeś w promocję? Oni też to wiedzą! "promotion.view" i "Black Wild Strawberry Zero Sugar" mówi samo za siebie.
    5. Lokalizację też znają. "client.location" zawiera w sobie dokładne koordynaty GPS.
    6. Wszystkie wysłane powiadomienia również są przechowywane. "title":"Zdobywasz 8 żappsów!"
    7. Czasem występują bliżej nieokreślone... testy Na Produkcji. "promotions":["000600161626","TEST DZIALANIA","000600161984 - wydmuszka","000600162038 - wydmuszka"]}
    8. Dokładna lista zakupów? Prosz bardzo: "$name":"BULKA PSZENNA 65g ODPIEK",
    9. Nie wiem co to jest, ale brzmi zabawnie: "[Żabu] Sum of points". Czasem pojawia się także "[WERSJA 3.3] ZGODA ALKO + SAMPLING + MH1".
    10. Są i opisy przyczyn blokowania kont - potencjalny fraud 22.01.2023. Tak, to ja! ?
    11. Zaraz po tym odbywa się wyłączanie kuponów. Też wygląda zabawnie. URL requestu to "https://api.synerise.com/v4/promotions/promotion/deactivate-all-for-client/clientId/1660142019?excludeTags=nie_wygaszac_kuponu". dobrze_nie_bede_wygaszal_obiecuje
    12. Punkty można dodać, albo odjąć! points.downcharge i gotowe. "description":"Fraud - wykorzystanie API" - ja bym to nazwał testowaniem, ale okej. ?
    13. Później został jeszcze do mojego konta dodany tag "usuniecie_konta" oraz zabrany "blokada_konta". Aż tak mnie nie lubią! Dziwne, że tag od usuwania konta de facto konta nie usuwa. Dalej mogę się logować do aplikacji Żappka i przeglądać promocje oraz wykonywać requesty do API.
    14. Podczas wykonywania akcji "multiaccount.checkCatalog", która ma chyba zabezpieczać przed tworzeniem multikont, w polu body.data[0].bag.author widać imię i nazwisko pana Szymona. Pozdrawiam serdecznie!

    Ogółem, troszkę tych danych jest. Ostatnie 1000 akcji zapisanych w JSONie zajmuje w Wordzie 160 stron. Oczywiście, wiele danych się powiela (nazwy pól itd.), ale to i tak więcej niż się spodziewałem.

    Ale i tak za najgorsze w tym wszystkim uważam to, że ceny produktów trzymają w float. Dramat!

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    rzapka odblkójcie mi konto pls