Exploiting Content Providers
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Daten werden auf Anfrage von einer Anwendung an andere bereitgestellt durch eine Komponente, die als Content Provider bekannt ist. Diese Anfragen werden durch die Methoden der ContentResolver-Klasse verwaltet. Content Provider können ihre Daten an verschiedenen Orten speichern, wie z.B. in einer Datenbank, Dateien oder über ein Netzwerk.
Im Manifest.xml-Datei ist die Deklaration des Content Providers erforderlich. Zum Beispiel:
Um auf content://com.mwr.example.sieve.DBContentProvider/Keys
zuzugreifen, ist die Berechtigung READ_KEYS
erforderlich. Es ist interessant zu bemerken, dass der Pfad /Keys/
im folgenden Abschnitt zugänglich ist, der aufgrund eines Fehlers des Entwicklers nicht geschützt ist, der /Keys
gesichert, aber /Keys/
deklariert hat.
Vielleicht kannst du auf private Daten zugreifen oder eine Schwachstelle ausnutzen (SQL Injection oder Path Traversal).
Es ist möglich, zusammenzustellen, wie man den DBContentProvider erreicht, indem man URIs mit “content://” beginnt. Dieser Ansatz basiert auf Erkenntnissen, die durch die Verwendung von Drozer gewonnen wurden, wo sich wichtige Informationen im /Keys Verzeichnis befanden.
Drozer kann verschiedene URIs erraten und ausprobieren:
Du solltest auch den ContentProvider-Code überprüfen, um nach Abfragen zu suchen:
Wenn du außerdem keine vollständigen Abfragen finden kannst, könntest du überprüfen, welche Namen vom ContentProvider in der onCreate
-Methode deklariert sind:
Die Abfrage wird wie folgt aussehen: content://name.of.package.class/declared_name
Wahrscheinlich werden die meisten Content Provider als Schnittstelle für eine Datenbank verwendet. Daher, wenn du darauf zugreifen kannst, könntest du in der Lage sein, Informationen zu extrahieren, zu aktualisieren, einzufügen und zu löschen. Überprüfe, ob du auf sensible Informationen zugreifen kannst oder versuche, sie zu ändern, um Autorisierungsmechanismen zu umgehen.
Wenn du den Code des Content Providers überprüfst, achte auch auf Funktionen, die so benannt sind: query, insert, update und delete:
Weil du in der Lage sein wirst, sie aufzurufen
Durch das Abfragen der Datenbank erfahren Sie die Namen der Spalten, dann könnten Sie in der Lage sein, Daten in die DB einzufügen:
Beachten Sie, dass Sie bei Insert und Update --string verwenden können, um einen String anzugeben, --double, um einen Double anzugeben, --float, --integer, --long, --short, --boolean
Wenn Sie die Namen der Spalten kennen, könnten Sie auch die Einträge ändern:
Es ist einfach, auf SQL-Injection (SQLite) zu testen, indem man die Projection und Selection-Felder manipuliert, die an den Content Provider übergeben werden. Beim Abfragen des Content Providers gibt es 2 interessante Argumente, um nach Informationen zu suchen: --selection und --projection:
Sie können versuchen, diese Parameter zu missbrauchen, um auf SQL-Injection zu testen:
Automatische SQLInjection-Entdeckung durch Drozer
Content Provider können auch verwendet werden, um Dateien zuzugreifen:
Sie können Dateien vom Content Provider lesen.
Wenn Sie auf Dateien zugreifen können, können Sie versuchen, einen Path Traversal auszunutzen (in diesem Fall ist dies nicht notwendig, aber Sie können versuchen, "../" und ähnliche Tricks zu verwenden).
Automatische Pfadüberquerungserkennung durch Drozer
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)