Wszystko polega na omijaniu nieświadomych aplikacji przypinania i przechwytywania protokołu SSL w systemie Android.
Hola H3ckers,
Wszyscy wiemy, że dostępnych jest wiele artykułów na temat „Jak przechwycić ruch HTTPS aplikacji na Androida”, więc tutaj nie będziemy ich omawiać. Jeśli nie znalazłeś żadnego, zapoznaj się z poniższymi informacjami:
Konfigurowanie urządzenia z Androidem do pracy z Burp — PortSwigger
Wymagania wstępne:
Znajomość proxy BurpSuite, podstawowego testowania systemu Android i narzędzi, takich jak adb, frida, sprzeciw, aplikacja Magisk, dekompilacja/rekompilacja APK i podpisywanie APK.
Spis treści
- Czy moja aplikacja docelowa ma przypinanie SSL?
- Czekaj, jak możemy potwierdzić przypinanie?
- Czas na obejście
- Dlaczego nie mogę przechwycić ruchu aplikacji, nawet jeśli aplikacja działa z HTTP
Rozumiem, to brzmi jak żart, ponieważ wiecie, że jeśli przypinanie jest na miejscu, nie będziemy w stanie przechwycić ruchu HTTPS naszej docelowej aplikacji na Androida.
2. Czekaj, jak możemy potwierdzić przypinanie?
Po skonfigurowaniu proxy zarówno w urządzeniu, jak i na serwerze proxy (Burp), uruchom aplikację docelową, a następnie wykonaj kilka czynności, które nawiązują komunikację między aplikacją docelową a ich serwerem.
Czas na monitorowanie pulpitu nawigacyjnego Burpa, a konkretnie sekcji Log. Jeśli przypinanie jest na miejscu, będziemy mogli zobaczyć błąd certyfikatu w następujący sposób:

2. Czas na obejście
2.1 Przenieś certyfikat — moduł Magisk:
Jeśli twoje urządzenie jest zrootowane za pomocą aplikacji Magisk, moduł Move Certificate jest jedną z dobrych opcji.

Ten moduł przeniesie zaufane certyfikaty użytkownika do magazynu systemowego, sprawiając, że system (root) zaufa Certyfikatowi, który instaluje użytkownik (Certyfikat naszego proxy CA)
2.2 Narzędzie sprzeciwu
Repo: sensepost/objection: sprzeciw — eksploracja mobilna w czasie wykonywania (github.com)
Krok 1 : Upewnij się, że serwer frida działa na urządzeniu z Androidem

Krok 2: Dołącz aplikację docelową z zastrzeżeniami za pomocą następującego polecenia:
Sprzeciw -g <nazwa pakietu/ PID> eksploruj
Następnie wykonaj polecenie „ wyłącz sslpinning androida ” .

To wszystko, skrypt znajdzie klasy przypinania SSL i zaczepi je w czasie wykonywania, aby ominąć przypinanie.
2.3 Ramy Fridy
Repozytorium : Frida (github.com)
Oto najpopularniejsza i najczęściej stosowana metoda.
Krok 1 : Upewnij się, że serwer frida działa na urządzeniu z Androidem
Krok 2: Dołącz aplikację docelową do frida i uruchom swój ulubiony skrypt omijający SSL.

Oto moje ulubione skrypty:
https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
2.4 Korzystanie z Xposed Framework
Jeśli Twoje urządzenie jest zrootowane za pomocą Xposed Framework , możesz wypróbować następujące moduły, aby ominąć przypinanie
- ac-pm/SSLUnpinning_Xposed: moduł Android Xposed do obejścia weryfikacji certyfikatu SSL (Certificate Pinning). (github.com)
- ViRb3/TrustMeAlready: Wyłącz weryfikację SSL i przypinanie na Androidzie, w całym systemie (github.com)

apk-mitm to aplikacja CLI, która automatycznie przygotowuje pliki APK systemu Android do kontroli HTTPS, modyfikując pliki APK i przepakowując je.
Repo:
shroudedcode/apk-mitm: Aplikacja CLI, która automatycznie przygotowuje pliki APK Androida do kontroli HTTPS (github.com)
apk-mitm można wyciągnąć za pomocą npm.

Krok 1: Uruchom apk-mitm, jak pokazano poniżej.

To wszystko, apk-mitm zrobiło swoje. Teraz możemy zainstalować załataną apkę i przechwycić ruch aplikacji.
2.6 Modyfikowanie pliku network_security_config.xml
Konfiguracja zabezpieczeń sieci umożliwia aplikacjom dostosowywanie ustawień zabezpieczeń sieci za pomocą deklaratywnego pliku konfiguracyjnego . Cała konfiguracja jest zawarta w tym pliku XML i nie są wymagane żadne zmiany w kodzie.
Źródło : Konfiguracja zabezpieczeń sieci | Programiści Androida
Konfiguracja zabezpieczeń sieci działa w systemie Android 7.0 lub nowszym.
Krok 1 : Dekompiluj aplikację na Androida za pomocą apktool lub alternatyw. I znajdź plik network_security_config.xml w katalogu /res/xml.
Krok 2 : Plik może wyglądać tak, jeśli aplikacja ma przypięte własne certyfikaty CA.

Krok 3 : Usuń sekcję tagu <pin-set>… </pin-set> i dodaj:

Krok 4: Teraz zapisz plik i ponownie spakuj aplikację za pomocą apktool i uber-apk-signer (do podpisania zmodyfikowanego apk).
To wszystko, zainstaluj naszą nową aplikację i gotowe.
3. Co jeśli aplikacja nie jest przechwytywana, a także nie pokazuje żadnych błędów !!
Tutaj pierwszą wyskakującą rzeczą, która przychodzi mi na myśl, jest „ Trzepotanie ”. Aplikacje oparte na trzepotaniu są w zasadzie „ nieświadome proxy ”.
Oto nadchodzi nasz bohater „ Reflutter ”:
„ Ta platforma pomaga w inżynierii wstecznej aplikacji Flutter przy użyciu poprawionej wersji biblioteki Flutter, która jest już skompilowana i gotowa do przepakowania aplikacji. “
Repo:https://github.com/Impact-I/reFlutter
Krok 1: zainstaluj reflutter za pomocą pip
Krok 2: Postępuj zgodnie z poleceniami przedstawionymi na poniższym zrzucie ekranu.

Krok 3: Podpisz aplikację za pomocą uber-apk-signer lub dowolnej alternatywy i zainstaluj ją.
Krok 4: Teraz w Burp proxy, zacznij nasłuchiwać portu 8083 , a także włącz „ Obsługa niewidocznego proxy ”.

To wszystko, peeps, wszyscy jesteście gotowi…!
4. Moja aplikacja używa tylko protokołu HTTP, ale nadal nie mogę przechwycić!!
Hmm... To trochę dziwne, ale czasami się zdarza.
Aplikacje z takim zachowaniem są zasadniczo nazywane aplikacjami „ nieświadomymi serwera proxy ”. Takie aplikacje kierują ruch bezpośrednio do Internetu bez współpracy z systemowymi ustawieniami proxy.
Czas na obejście:
Za tę metodę dziękuję bratu Farisowi ❤.
(60) Faris Mohammed | Linkedin
Krok 1: Znajdź adres domeny, z którą aplikacja komunikuje się za pomocą Wireshark. Pokazane poniżej.

Krok 2: Zdekompiluj aplikację za pomocą apktool
Krok 3: Wejdź do zdekompilowanego folderu i użyj narzędzia ack/grep, aby znaleźć plik, w którym wymieniona jest nazwa domeny.

Krok 4: Zastąp nazwę domeny adresem IP i portem BurpSuite.

Krok 5: Ponownie spakuj aplikację, podpisz ją i zainstaluj na urządzeniu z systemem Android.
Krok 7: W serwerze proxy BurpSuite, w zakładce Obsługa żądań podaj hosta przekierowania i port jako oryginalny adres domeny, który był używany przez aplikację w pierwszej kolejności.

Krok 8: Skonfiguruj dopasowanie i zamianę w opcjach proxy, aby zastąpić wartość nagłówka hosta z adresu IP odbiornika burp na oryginalny adres domeny aplikacji

Otóż to. Teraz ruch HTTP aplikacji będzie przechwytywany przez nasze proxy Burp.
Uwaga: — Tutaj, ponieważ zastąpiliśmy zakodowaną na stałe domenę aplikacji, nie musimy konfigurować serwera proxy urządzenia, ponieważ aplikacja komunikuje się bezpośrednio z domeną zakodowaną na stałe (zastąpiliśmy ją naszym adresem IP serwera proxy).
Więc myślę, że na razie skończyłem. W rzeczywistości istnieje kilka innych metod, których możemy użyć do ominięcia przypinania SSL Androida. Spróbuję zrobić część 2 z tym na podstawie twoich odpowiedzi.
Dzięki peeps, udanego hackowania :)