Exploiting Content Providers
Exploiting Content Providers
Intro
Δεδομένα παρέχονται από μια εφαρμογή σε άλλες κατόπιν αιτήματος από ένα συστατικό που ονομάζεται 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 Providers χρησιμοποιούνται ως διεπαφή για μια βάση δεδομένων. Επομένως, αν μπορείτε να έχετε πρόσβαση σε αυτήν, θα μπορούσατε να εξάγετε, ενημερώσετε, εισάγετε και διαγράψετε πληροφορίες. Ελέγξτε αν μπορείτε να έχετε πρόσβαση σε ευαίσθητες πληροφορίες ή προσπαθήστε να τις αλλάξετε για να παρακάμψετε μηχανισμούς εξουσιοδότησης.
Όταν ελέγχετε τον κώδικα του Content Provider, κοιτάξτε επίσης για συναρτήσεις που ονομάζονται όπως: query, insert, update και delete:
Διότι θα μπορείτε να τις καλέσετε
Ερώτημα περιεχομένου
Insert content
Αναζητώντας τη βάση δεδομένων θα μάθετε το όνομα των στηλών, τότε, θα μπορείτε να εισάγετε δεδομένα στη DB:
Σημειώστε ότι στην εισαγωγή και την ενημέρωση μπορείτε να χρησιμοποιήσετε --string για να υποδείξετε συμβολοσειρά, --double για να υποδείξετε διπλό, --float, --integer, --long, --short, --boolean
Update content
Γνωρίζοντας το όνομα των στηλών μπορείτε επίσης να τροποποιήσετε τις καταχωρίσεις:
Delete content
SQL Injection
Είναι απλό να δοκιμάσετε για SQL injection (SQLite) χειρίζοντας τα projection και selection fields που περνούν στον πάροχο περιεχομένου. Όταν αναζητάτε τον Content Provider υπάρχουν 2 ενδιαφέροντα επιχειρήματα για να αναζητήσετε πληροφορίες: --selection και --projection:
Μπορείτε να προσπαθήσετε να καταχραστείτε αυτές τις παραμέτρους για να δοκιμάσετε για SQL injections:
Αυτόματη ανακάλυψη SQLInjection από το Drozer
Content Providers με υποστήριξη συστήματος αρχείων
Οι Content Providers μπορούν επίσης να χρησιμοποιηθούν για πρόσβαση σε αρχεία:
Διαβάστε αρχείο
Μπορείτε να διαβάσετε αρχεία από τον Content Provider
Path Traversal
Αν μπορείτε να έχετε πρόσβαση σε αρχεία, μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια Path Traversal (σε αυτή την περίπτωση αυτό δεν είναι απαραίτητο αλλά μπορείτε να προσπαθήσετε να χρησιμοποιήσετε το "../" και παρόμοια κόλπα).
Αυτόματη ανακάλυψη διαδρομών από τον Drozer
Αναφορές
Last updated