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)
Δεδομένα παρέχονται από μια εφαρμογή σε άλλες κατόπιν αιτήματος από ένα συστατικό που ονομάζεται content provider. Αυτά τα αιτήματα διαχειρίζονται μέσω των μεθόδων της ContentResolver class. Οι content providers μπορούν να αποθηκεύουν τα δεδομένα τους σε διάφορες τοποθεσίες, όπως μια βάση δεδομένων, αρχεία ή μέσω ενός δικτύου.
Στο αρχείο Manifest.xml, η δήλωση του content provider είναι απαραίτητη. Για παράδειγμα:
Για να αποκτήσετε πρόσβαση στο content://com.mwr.example.sieve.DBContentProvider/Keys
, είναι απαραίτητη η άδεια READ_KEYS
. Είναι ενδιαφέρον να σημειωθεί ότι η διαδρομή /Keys/
είναι προσβάσιμη στην παρακάτω ενότητα, η οποία δεν είναι προστατευμένη λόγω ενός λάθους του προγραμματιστή, ο οποίος εξασφάλισε το /Keys
αλλά δήλωσε το /Keys/
.
Ίσως μπορείτε να αποκτήσετε πρόσβαση σε ιδιωτικά δεδομένα ή να εκμεταλλευτείτε κάποια ευπάθεια (SQL Injection ή Path Traversal).
Είναι δυνατόν να συνθέσουμε πώς να φτάσουμε στον DBContentProvider ξεκινώντας τα URIs με “content://”. Αυτή η προσέγγιση βασίζεται σε πληροφορίες που αποκτήθηκαν από τη χρήση του Drozer, όπου οι βασικές πληροφορίες βρίσκονταν στον /Keys κατάλογο.
Ο Drozer μπορεί να μαντέψει και να δοκιμάσει αρκετά URIs:
Πρέπει επίσης να ελέγξετε τον κώδικα ContentProvider για να αναζητήσετε ερωτήματα:
Επίσης, αν δεν μπορείτε να βρείτε πλήρη ερωτήματα, μπορείτε να ελέγξετε ποια ονόματα δηλώνονται από τον ContentProvider στη μέθοδο onCreate
:
Η ερώτηση θα είναι όπως: content://name.of.package.class/declared_name
Πιθανώς οι περισσότεροι από τους Content Providers χρησιμοποιούνται ως διεπαφή για μια βάση δεδομένων. Επομένως, αν μπορείτε να έχετε πρόσβαση σε αυτήν, θα μπορούσατε να εξάγετε, ενημερώσετε, εισάγετε και διαγράψετε πληροφορίες. Ελέγξτε αν μπορείτε να έχετε πρόσβαση σε ευαίσθητες πληροφορίες ή προσπαθήστε να τις αλλάξετε για να παρακάμψετε μηχανισμούς εξουσιοδότησης.
Όταν ελέγχετε τον κώδικα του Content Provider, κοιτάξτε επίσης για συναρτήσεις που ονομάζονται όπως: query, insert, update και delete:
Διότι θα μπορείτε να τις καλέσετε
Ανακτώντας τη βάση δεδομένων θα μάθετε το όνομα των στηλών, τότε, θα μπορείτε να εισάγετε δεδομένα στη DB:
Σημειώστε ότι στην εισαγωγή και την ενημέρωση μπορείτε να χρησιμοποιήσετε --string για να υποδείξετε συμβολοσειρά, --double για να υποδείξετε διπλό, --float, --integer, --long, --short, --boolean
Γνωρίζοντας το όνομα των στηλών μπορείτε επίσης να τροποποιήσετε τις καταχωρίσεις:
Είναι απλό να δοκιμάσετε για SQL injection (SQLite) με το να χειριστείτε τα projection και selection fields που περνούν στον πάροχο περιεχομένου. Όταν ανακτάτε τον Content Provider υπάρχουν 2 ενδιαφέροντα επιχειρήματα για να αναζητήσετε πληροφορίες: --selection και --projection:
Μπορείτε να προσπαθήσετε να καταχραστείτε αυτές τις παραμέτρους για να δοκιμάσετε για SQL injections:
Αυτόματη ανακάλυψη SQLInjection από το Drozer
Οι content providers μπορούν επίσης να χρησιμοποιηθούν για πρόσβαση σε αρχεία:
Μπορείτε να διαβάσετε αρχεία από τον Content Provider
Αν μπορείτε να έχετε πρόσβαση σε αρχεία, μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια Path Traversal (σε αυτή την περίπτωση αυτό δεν είναι απαραίτητο αλλά μπορείτε να προσπαθήσετε να χρησιμοποιήσετε το "../" και παρόμοια κόλπα).
Αυτόματη ανακάλυψη διαδρομών Traversal από το Drozer
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)