Exploiting a debuggeable application

Ausnutzen einer debuggbaren Anwendung

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Umgehen von Root- und Debugging-Überprüfungen

Dieser Abschnitt des Beitrags ist eine Zusammenfassung des Beitrags https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Schritte zum Aktivieren des Debugging-Modus und Umgehen von Überprüfungen in einer Android-App

Aktivieren des Debugging-Modus in der App

Inhalt basierend auf https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. APK dekompilieren:

  • Verwenden Sie das APK-GUI-Tool zum Dekompilieren der APK.

  • Fügen Sie in der android-manifest-Datei android:debuggable=true ein, um den Debugging-Modus zu aktivieren.

  • Kompilieren Sie die modifizierte Anwendung erneut, signieren Sie sie und führen Sie den Zipalign-Vorgang durch.

  1. Installieren der modifizierten Anwendung:

  • Verwenden Sie den Befehl: adb install <Anwendungsname>.

  1. Abrufen des Paketnamens:

  • Führen Sie adb shell pm list packages –3 aus, um Drittanbieteranwendungen aufzulisten und den Paketnamen zu finden.

  1. Die App auf Verbindung des Debuggers warten lassen:

  • Befehl: adb shell am setup-debug-app –w <Paketname>.

  • Hinweis: Dieser Befehl muss jedes Mal vor dem Starten der Anwendung ausgeführt werden, um sicherzustellen, dass sie auf den Debugger wartet.

  • Verwenden Sie für die Persistenz adb shell am setup-debug-app –w -–persistent <Paketname>.

  • Um alle Flags zu entfernen, verwenden Sie adb shell am clear-debug-app <Paketname>.

  1. Vorbereitung für das Debugging in Android Studio:

  • Navigieren Sie in Android Studio zu Datei -> Profil oder APK öffnen.

  • Öffnen Sie die rekomplilierte APK.

  1. Setzen von Breakpoints in wichtigen Java-Dateien:

  • Setzen Sie Breakpoints in MainActivity.java (insbesondere in der Methode onCreate), b.java und ContextWrapper.java.

Umgehen von Überprüfungen

Die Anwendung überprüft an bestimmten Stellen, ob sie debuggbar ist, und prüft auch auf Binärdateien, die auf ein gerootetes Gerät hinweisen. Der Debugger kann verwendet werden, um App-Informationen zu ändern, das Debuggable-Bit aufzuheben und die Namen der gesuchten Binärdateien zu ändern, um diese Überprüfungen zu umgehen.

Für die Debugging-Überprüfung:

  1. Ändern der Flag-Einstellungen:

  • Navigieren Sie in der Variablen-Sektion der Debugger-Konsole zu: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.

  • Hinweis: Die binäre Darstellung von flags = 814267974 ist 11000011100111011110, was darauf hinweist, dass "Flag_debuggable" aktiv ist.

Diese Schritte stellen sicher, dass die Anwendung debuggt werden kann und dass bestimmte Sicherheitsüberprüfungen mithilfe des Debuggers umgangen werden können, um eine detailliertere Analyse oder Modifikation des Verhaltens der Anwendung zu ermöglichen.

Schritt 2 beinhaltet das Ändern eines Flag-Werts auf 814267972, der binär als 110000101101000000100010100 dargestellt wird.

Ausnutzen einer Schwachstelle

Es wurde eine Demonstration anhand einer verwundbaren Anwendung mit einem Button und einem Textview durchgeführt. Anfangs zeigt die Anwendung "Crack Me" an. Das Ziel besteht darin, die Nachricht zur Laufzeit von "Try Again" in "Hacked" zu ändern, ohne den Quellcode zu ändern.

Überprüfung auf Schwachstellen

  • Die Anwendung wurde mit apktool dekompiliert, um auf die Datei AndroidManifest.xml zuzugreifen.

  • Das Vorhandensein von android_debuggable="true" in der AndroidManifest.xml zeigt an, dass die Anwendung debuggbar ist und anfällig für Ausnutzung ist.

  • Es ist erwähnenswert, dass apktool ausschließlich verwendet wurde, um den Debugging-Status zu überprüfen, ohne Code zu ändern.

Vorbereitung der Einrichtung

  • Der Prozess umfasste das Starten eines Emulators, das Installieren der verwundbaren Anwendung und die Verwendung von adb jdwp, um die lauschenden Dalvik-VM-Ports zu identifizieren.

  • Das JDWP (Java Debug Wire Protocol) ermöglicht das Debuggen einer in einer VM ausgeführten Anwendung, indem es einen eindeutigen Port freigibt.

  • Für das Remote-Debugging war eine Portweiterleitung erforderlich, gefolgt von der Anbindung von JDB an die Zielanwendung.

Code zur Laufzeit einschleusen

  • Die Ausnutzung wurde durch das Setzen von Breakpoints und die Kontrolle des Anwendungsflusses durchgeführt.

  • Befehle wie classes und methods <Klassenname> wurden verwendet, um die Struktur der Anwendung aufzudecken.

  • Ein Breakpoint wurde in der Methode onClick gesetzt und dessen Ausführung wurde kontrolliert.

  • Die Befehle locals, next und set wurden verwendet, um lokale Variablen zu inspizieren und zu ändern, insbesondere die Änderung der Nachricht von "Try Again" zu "Hacked".

  • Der modifizierte Code wurde mit dem Befehl run ausgeführt und hat die Ausgabe der Anwendung in Echtzeit erfolgreich geändert.

Dieses Beispiel zeigt, wie das Verhalten einer debuggbaren Anwendung manipuliert werden kann und verdeutlicht das Potenzial für komplexere Exploits wie den Zugriff auf die Shell auf dem Gerät im Kontext der Anwendung.

Referenzen

Last updated