15 KiB
Ausnutzen von Content Providern
Ausnutzen von Content Providern
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie die PEASS-Familie, unsere Sammlung exklusiver NFTs
- Treten Sie der Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs zu den HackTricks- und HackTricks Cloud-GitHub-Repositories einreichen
Einführung
Daten werden auf Anfrage von einer Anwendung an andere über einen Komponenten namens Content Provider bereitgestellt. Diese Anfragen werden über die Methoden der Klasse ContentResolver verwaltet. Content Provider können ihre Daten an verschiedenen Orten speichern, wie z.B. in einer Datenbank, Dateien oder über ein Netzwerk.
In der Datei Manifest.xml ist die Deklaration des Content Providers erforderlich. Zum Beispiel:
<provider android:name=".DBContentProvider" android:exported="true" android:multiprocess="true" android:authorities="com.mwr.example.sieve.DBContentProvider">
<path-permission android:readPermission="com.mwr.example.sieve.READ_KEYS" android:writePermission="com.mwr.example.sieve.WRITE_KEYS" android:path="/Keys"/>
</provider>
Um auf content://com.mwr.example.sieve.DBContentProvider/Keys
zuzugreifen, ist die Berechtigung READ_KEYS
erforderlich. Interessanterweise ist der Pfad /Keys/
im folgenden Abschnitt zugänglich, der aufgrund eines Fehlers des Entwicklers nicht geschützt ist, der /Keys
gesichert hat, aber /Keys/
deklariert hat.
Vielleicht können Sie auf private Daten zugreifen oder eine Schwachstelle ausnutzen (SQL-Injection oder Pfadtraversierung).
Informationen von exponierten Content Providern abrufen
dz> run app.provider.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Authority: com.mwr.example.sieve.DBContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.DBContentProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
Path Permissions:
Path: /Keys
Type: PATTERN_LITERAL
Read Permission: com.mwr.example.sieve.READ_KEYS
Write Permission: com.mwr.example.sieve.WRITE_KEYS
Authority: com.mwr.example.sieve.FileBackupProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.FileBackupProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
Es ist möglich, herauszufinden, wie man auf den DBContentProvider zugreifen kann, indem man URIs mit "content://" beginnt. Dieser Ansatz basiert auf Erkenntnissen, die durch die Verwendung von Drozer gewonnen wurden, wo wichtige Informationen im /Keys-Verzeichnis gefunden wurden.
Drozer kann mehrere URIs erraten und ausprobieren:
dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
Sie sollten auch den ContentProvider-Code überprüfen, um nach Abfragen zu suchen:
Wenn Sie keine vollständigen Abfragen finden können, können Sie auch ü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
Datenbankgestützte Content Provider
Vermutlich werden die meisten Content Provider als Schnittstelle für eine Datenbank verwendet. Wenn Sie also darauf zugreifen können, können Sie möglicherweise Informationen extrahieren, aktualisieren, einfügen und löschen.
Überprüfen Sie, ob Sie auf sensible Informationen zugreifen können, oder versuchen Sie, sie zu ändern, um Autorisierungsmechanismen zu umgehen.
Beim Überprüfen des Codes des Content Providers suchen Sie auch nach Funktionen mit Namen wie: query, insert, update und delete:
Denn Sie können sie aufrufen.
Inhalte abfragen
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
_id: 1
service: Email
username: incognitoguy50
password: PSFjqXIMVa5NJFudgDuuLVgJYFD+8w==
-
email: incognitoguy50@gmail.com
Inhalte einfügen
Durch die Abfrage der Datenbank erfahren Sie den Namen der Spalten, dann können Sie Daten in die Datenbank einfügen:
Beachten Sie, dass Sie in Insert und Update --string verwenden können, um einen String anzugeben, --double für eine Gleitkommazahl, --float, --integer, --long, --short, --boolean
Inhalte aktualisieren
Wenn Sie den Namen der Spalten kennen, können Sie auch die Einträge ändern:
Inhalte löschen
SQL Injection
Es ist einfach, SQL-Injection (SQLite) zu testen, indem Sie die Projektion und Auswahlfelder manipulieren, die an den Content Provider übergeben werden.
Bei der Abfrage des Content Providers gibt es 2 interessante Argumente zur Suche nach Informationen: --selection und --projection:
Sie können versuchen, diese Parameter zu missbrauchen, um SQL-Injections zu testen:
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*
FROM SQLITE_MASTER WHERE type='table';--"
| type | name | tbl_name | rootpage | sql |
| table | android_metadata | android_metadata | 3 | CREATE TABLE ... |
| table | Passwords | Passwords | 4 | CREATE TABLE ... |
Automatische Entdeckung von SQLInjection durch Drozer
Drozer is a powerful security testing framework for Android applications. It provides a wide range of tools and functionalities to perform various security assessments, including automatic SQLInjection discovery.
Drozer ist ein leistungsstarkes Sicherheitstest-Framework für Android-Anwendungen. Es bietet eine Vielzahl von Tools und Funktionen für verschiedene Sicherheitsbewertungen, einschließlich der automatischen Entdeckung von SQLInjection.
One of the common vulnerabilities in Android applications is the lack of proper input validation and sanitization, which can lead to SQLInjection attacks. Drozer can help identify such vulnerabilities by automatically testing the content providers used by the application.
Eine der häufigsten Schwachstellen in Android-Anwendungen ist das Fehlen einer ordnungsgemäßen Eingabevalidierung und -bereinigung, was zu SQLInjection-Angriffen führen kann. Drozer kann dabei helfen, solche Schwachstellen zu identifizieren, indem es automatisch die von der Anwendung verwendeten Content Provider testet.
To exploit content providers, Drozer uses a technique called "content provider injection." This technique involves sending specially crafted queries to the content provider, which can then be used to extract sensitive information or modify the application's data.
Um Content Provider auszunutzen, verwendet Drozer eine Technik namens "Content Provider Injection". Diese Technik besteht darin, speziell erstellte Abfragen an den Content Provider zu senden, die dann verwendet werden können, um sensible Informationen abzurufen oder die Daten der Anwendung zu ändern.
Drozer provides a module called content.provider.finduri
that can be used to automatically discover content providers and test them for SQLInjection vulnerabilities. This module takes a package name as input and scans the application for content providers.
Drozer bietet ein Modul namens content.provider.finduri
, das verwendet werden kann, um Content Provider automatisch zu entdecken und auf SQLInjection-Schwachstellen zu testen. Dieses Modul nimmt einen Paketnamen als Eingabe entgegen und durchsucht die Anwendung nach Content Providern.
Once the content providers are discovered, Drozer uses a set of predefined SQLInjection payloads to test them. These payloads are designed to exploit common SQLInjection vulnerabilities, such as UNION-based attacks, error-based attacks, and time-based attacks.
Sobald die Content Provider entdeckt sind, verwendet Drozer eine Reihe vordefinierter SQLInjection-Payloads, um sie zu testen. Diese Payloads sind darauf ausgelegt, gängige SQLInjection-Schwachstellen auszunutzen, wie zum Beispiel UNION-basierte Angriffe, fehlerbasierte Angriffe und zeitbasierte Angriffe.
By running the content.provider.finduri
module, Drozer can automatically discover and test content providers for SQLInjection vulnerabilities, making it easier for security testers to identify and exploit such vulnerabilities in Android applications.
Durch Ausführen des Moduls content.provider.finduri
kann Drozer Content Provider automatisch entdecken und auf SQLInjection-Schwachstellen testen. Dies erleichtert es Sicherheitstestern, solche Schwachstellen in Android-Anwendungen zu identifizieren und auszunutzen.
dz> run scanner.provider.injection -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Injection in Projection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
Injection in Selection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
dz> run scanner.provider.sqltables -a jakhar.aseem.diva
Scanning jakhar.aseem.diva...
Accessible tables for uri content://jakhar.aseem.diva.provider.notesprovider/notes/:
android_metadata
notes
sqlite_sequence
Dateisystem-basierte Content Provider
Content Provider können auch verwendet werden, um auf Dateien zuzugreifen:
Datei lesen
Sie können Dateien aus dem Content Provider lesen.
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Pfadüberquerung
Wenn Sie auf Dateien zugreifen können, können Sie versuchen, eine Pfadüberquerung zu missbrauchen (in diesem Fall ist dies nicht notwendig, aber Sie können versuchen, "../" und ähnliche Tricks zu verwenden).
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Automatische Entdeckung von Pfadtraversals durch Drozer
Drozer is a powerful Android security testing framework that can be used to identify vulnerabilities in Android applications. One of the techniques that Drozer supports is the automatic discovery of Path Traversal vulnerabilities in Android Content Providers.
Drozer uses a technique called "fuzzing" to automatically test the Content Providers for Path Traversal vulnerabilities. Fuzzing involves sending a large number of random or specially crafted inputs to the target application in order to trigger unexpected behavior.
To use Drozer for automatic Path Traversal discovery, you need to follow these steps:
- Install Drozer on your testing machine.
- Connect your Android device to the testing machine using ADB.
- Start the Drozer console by running the command
drozer console connect
. - Use the
run app.provider.finduri
command to list all the Content Providers available on the target device. - Select a Content Provider to test for Path Traversal vulnerabilities using the
run app.provider.query
command. - Drozer will automatically send a series of requests to the selected Content Provider, testing for Path Traversal vulnerabilities.
- If a vulnerability is found, Drozer will display the details of the vulnerability, including the affected Content Provider and the path that was traversed.
It is important to note that automatic discovery of Path Traversal vulnerabilities by Drozer is not foolproof. It may not detect all possible vulnerabilities, and manual testing is still recommended to ensure thorough security testing of Android applications.
By using Drozer's automatic Path Traversal discovery feature, you can quickly identify potential vulnerabilities in Android Content Providers and take appropriate measures to secure your applications.
dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Vulnerable Providers:
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.FileBackupProvider
Referenzen
- https://www.tutorialspoint.com/android/android_content_providers.htm
- https://manifestsecurity.com/android-application-security-part-15/
- https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.