Bolt (zawsze) Lite - MITM, Proxy, Insomnia i Vue
atak typu man-in-the-middle umożliwiający zamówienie bolt lite za pomocą aplikacji
Daniel Gustaw
• 5 min read
Cześć!
To jest pierwsza część na temat tego, jak sprawić, by zamawianie Bolt Lite było zawsze możliwe. W tej części omówimy praktyczne zastosowanie ataku Man In The Middle (MITM) oraz proxy przez PC.
Przypinanie certyfikatów
Ponieważ aplikacja Bolt nie używa mechanizmu znanego jako przypinanie certyfikatów, uchwycenie wszystkich danych wysyłanych w pakietach powinno być łatwym zadaniem. Google od dłuższego czasu sugeruje wdrożenie CP wszystkim deweloperom, ale niektórzy z nich wciąż tego nie robią. Z aplikacji, których używam najczęściej, przypinanie certyfikatów stosują tylko banki i portfele kryptowalutowe. Gdyby w aplikacji Bolt było przypinanie certyfikatów, aplikacja wydawałaby się odłączona od internetu podczas sniffingu. Nadal możliwe jest połączenie z API, gdy przypinanie certyfikatów jest wprowadzone, ale wiąże się to z inżynierią wsteczną pliku APK. Jeśli interesuje Cię, jak to zrobić, przeczytaj świetny artykuł @XeEaton, a po zakończeniu patchowania APK wróć do mojego artykułu.
Inżynieria wstępna i usuwanie przypinania certyfikatów Pokémon GO | Eaton Works
Proxy MITM
Aby sniffować pakiety wysyłane przez aplikację Bolt na Androida, użyjemy mitmproxy, który jest projektem o otwartym kodzie źródłowym.
mitmproxy - interaktywne proxy HTTPS
Jeśli twoja wersja Androida jest wyższa niż Nougat (Android 7), co prawdopodobnie jest prawdą, ponieważ jesteś mega geekiem i czytasz ten artykuł, będziesz także potrzebować:
- zrootowanego urządzenia Android
- zainstalowanego Xposed Framework
- włączonego modułu JustTrustMe (https://github.com/Fuzion24/JustTrustMe)
Po zainstalowaniu mitmproxy na swoim komputerze lokalnej sieci, uruchom polecenie:
mitmweb (or mitmproxy if you love CLIs)
Pokaże ci port, na którym nasłuchuje (domyślnie 8080). Przejdź do ustawień sieci na swoim urządzeniu z Androidem i wpisz go w sekcji “Proxy”. Od teraz możesz przechwytywać pakiety, tak jak w narzędziach dewelopera Google Chrome.
Alternatywny sposób: HTTPCanary
GuoShi wykonał wspaniałą pracę i stworzył piękną aplikację na Androida, która pozwala na przechwytywanie pakietów w czasie rzeczywistym. Niestety, nie udało mi się znaleźć sposobu na dostęp do dzienników z twojego komputera w czasie rzeczywistym, ale wciąż można łatwo wprowadzić je do Insomnia do testów.
Insomnia
Po przechwyceniu wszystkich niezbędnych zapytań przeszedłem do Insomnia, aby sprawdzić, które z nich są potrzebne.
Tworzenie przejazdów
API Bolt, choć niepubliczne, ma nadal bardzo opisowe kody błędów, takie jak:
Natkniesz się na takie błędy dość często - najważniejsze jest, aby ich słuchać!
Z tego powodu wiedziałem, że musimy cofnąć się o krok i najpierw poszukać opcji taksówek, aby uzyskać hash blokady ceny i identyfikator kategorii (Bolt, Lite, Pets…), który będzie wysyłany z zapytaniem o stworzenie przejazdu.
Wyszukiwanie opcji taksówek
Wysłanie takiego payloadu zwraca nam listę możliwych taryf i dostępnych kategorii bolt:
Intrygujące jest to, że otrzymujemy również parametr “surge_multiplier”, który nie jest widoczny w aplikacji. Fajnie!
Przepływ zapytań
Stałe zapytania o dane
Po dokładnej analizie wszystkich 4 zapytań (tworzenie przejazdu, anulowanie przejazdu, pobieranie dostępnych samochodów i sprawdzanie bieżącego stanu aplikacji) dość łatwo zauważyć, że istnieją pewne parametry, które dotyczą każdego z zapytań:
gps_lat: current latitude
gps_lng: current longitude
session_id: must not be null - doesn't really matter
user_id: string of numbers identifying user
country: current country
language: user language
deviceType: in my case "android"
version: in my case "CA.7.01"
deviceId: unique deviceId string generated
device_name: string including android device model number - probably for statistical purposes
device_os_version: android version (in my case 10)
Przekształcimy to w obiekt i skonfigurujemy axios, aby te dane były wysyłane z każdym żądaniem jako dodatkowe zapytanie.
Wybór stacku technologicznego
Jak często robimy w naszej firmie oprogramowania, użyjemy Vue z Nuxt na front-end. Na zapleczu użyjemy naszego proxy CORS z Precise Lab.
Problem odrzucenia karty
Czasami, gdy tworzysz nową przejażdżkę, bolt losowo zgłasza błąd autoryzacji karty kredytowej, co wygląda jak błąd w ich API. Po prostu użyjemy try {} catch {}
, poczekamy na błąd, potwierdzimy go i powtórzymy tworzenie nowej przejażdżki. Nigdy nie zdarza się to drugi raz z rzędu, więc jesteśmy zadowoleni z tego rozwiązania.
Uatrakcyjnienie
Na ostatnim etapie zadbam o wyświetlenie aktualnego statusu przejażdżki użytkownikowi oraz dostarczenie mu dokładnej mapy, żeby mógł upewnić się, że wybrał odpowiednie punkty odbioru i dowozu. Nie ma potrzeby śledzenia kierowcy w czasie rzeczywistym, ponieważ można to zrobić w aplikacji jak zwykle, jednak można to łatwo dodać, gdy przejażdżka zostanie potwierdzona przez kierowcę, otrzymujesz koordynaty samochodu, a nawet orientację samochodu (w ten sposób aplikacja bolt pokazuje samochody robiące salta wsteczne i driftujące) w każdym żądaniu statusu przejażdżki.
Słaby punkt
Więc jest wdrożone i możesz z tego korzystać! Hurra! Jedynym problemem jest to, że nadal musisz zdobyć klucz API. Niestety, nie znajdziesz go w ustawieniach aplikacji Bolt. Aby go zdobyć, musisz analizować żądania, które wysyła twoja aplikacja, a do tego potrzebujesz HTTP Canary lub innego sniffera pakietów, o którym pisałem w pierwszej części tej przygody z hackowaniem bolta. Dobrą wiadomością jest to, że twój token API bolta jest ważny na czas nieokreślony (lub przynajmniej przez bardzo długi czas). Może moglibyśmy zdobyć ten token za pomocą aplikacji webowej bolta? Jest aplikacja webowa bolta, ale niestety, nie działa ona wcale:
Smutne powiadomienie, które otrzymasz, gdy przesuniesz wskaźnik odbioru na m.bolt.eu.
A jeśli przyjrzysz się żądaniom HTTP, które są wysyłane tam i z powrotem:
To właściwie wszystko! Dziękujemy za przeczytanie, przyjaciele!
Other articles
You can find interesting also.
Obliczanie różnicy między plikami JSON
Dowiedz się, jak znaleźć brakujące tłumaczenia w plikach JSON przy użyciu słowników.
Daniel Gustaw
• 3 min read
Jak pobrać dane kontaktowe 20k adwokatów w godzinę
Poznaj technikę zrównoleglania scrapingu która może kilkukrotnie przyśpieszyć pobieranie danych.
Daniel Gustaw
• 17 min read
Atak XSS przy użyciu stylu skryptu i obrazu
Dowiedz się, jak zainfekować stronę za pomocą ataku XSS przy użyciu tagów skryptu, stylu lub obrazu. Możesz zobaczyć, jak zastąpić zawartość strony swoją własną, nawet bez javascriptu.
Daniel Gustaw
• 4 min read