Objection Tutorial
Συμβουλή για bug bounty: εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος μας στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
Εισαγωγή
objection - Εξερεύνηση κινητής τηλεφωνίας κατά τη διάρκεια της εκτέλεσης
Το Objection είναι ένα εργαλείο εξερεύνησης κινητής τηλεφωνίας κατά τη διάρκεια της εκτέλεσης, με την υποστήριξη του Frida. Κατασκευάστηκε με σκοπό να βοηθήσει στην αξιολόγηση των κινητών εφαρμογών και της ασφάλειάς τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.
Σημείωση: Δεν πρόκειται για κάποια μορφή παράκαμψης jailbreak / root. Χρησιμοποιώντας το objection
, παραμένετε περιορισμένοι από όλους τους περιορισμούς που επιβάλλονται από το αντίστοιχο sandbox που αντιμετωπίζετε.
Σύνοψη
Ο στόχος του objection είναι να επιτρέψει στον χρήστη να καλεί τις κύριες ενέργειες που προσφέρει ο Frida. Διαφορετικά, ο χρήστης θα χρειαστεί να δημιουργήσει ένα μοναδικό σενάριο για κάθε εφαρμογή που θέλει να δοκιμάσει.
Οδηγός
Για αυτόν τον οδηγό θα χρησιμοποιήσω το APK που μπορείτε να κατεβάσετε εδώ:
Ή από το αρχικό αποθετήριο (κατεβάστε το app-release.apk)
Εγκατάσταση
Σύνδεση
Πραγματοποιήστε μια κανονική σύνδεση ADB και ξεκινήστε τον διακομιστή frida στη συσκευή (και ελέγξτε ότι το frida λειτουργεί και στον πελάτη και στον διακομιστή).
Εάν χρησιμοποιείτε μια ριζωμένη συσκευή, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην επιλογή --gadget. σε αυτήν την περίπτωση:
Βασικές Ενέργειες
Δεν θα αναφερθούν όλες οι δυνατές εντολές του objections σε αυτό το εγχειρίδιο, μόνο αυτές που θεωρώ πιο χρήσιμες.
Περιβάλλον
Ορισμένες ενδιαφέρουσες πληροφορίες (όπως κωδικοί πρόσβασης ή διαδρομές) μπορεί να βρίσκονται μέσα στο περιβάλλον.
Πληροφορίες για το Frida
Μεταφόρτωση/Λήψη
Εισαγωγή σεναρίου frida
Αποκλεισμός SSL
Ο αποκλεισμός SSL είναι μια τεχνική που χρησιμοποιείται για την προστασία των εφαρμογών από επιθέσεις MITM (Man-in-the-Middle). Κατά τον αποκλεισμό SSL, η εφαρμογή επιβεβαιώνει την ταυτότητα του διακομιστή που συνδέεται με τη χρήση πιστοποιητικών SSL. Αυτό εμποδίζει την πιθανότητα επίθεσης από κάποιον που προσποιείται ότι είναι ο διακομιστής.
Ο αποκλεισμός SSL μπορεί να δυσκολέψει την ανάλυση της κίνησης δεδομένων μεταξύ της εφαρμογής και του διακομιστή. Ωστόσο, με τη χρήση εργαλείων όπως το Objection, μπορούμε να παρακάμψουμε τον αποκλεισμό SSL και να αναλύσουμε την κίνηση δεδομένων για αναζήτηση ευπαθειών στην εφαρμογή.
Για να παρακάμψουμε τον αποκλεισμό SSL με το Objection, μπορούμε να χρησιμοποιήσουμε την εντολή android sslpinning disable
. Αυτή η εντολή θα απενεργοποιήσει τον αποκλεισμό SSL για την εφαρμογή, επιτρέποντάς μας να αναλύσουμε την κίνηση δεδομένων.
Ανίχνευση Root
Root detection is a common security measure implemented in Android applications to prevent them from running on rooted devices. Rooting a device gives users administrative privileges, which can be a security risk as it allows them to bypass certain security measures and access sensitive information.
Root detection techniques vary, but they generally involve checking for the presence of certain files or binaries that are commonly associated with rooted devices. Some applications may also use system calls or check for the presence of specific system properties that indicate a device has been rooted.
By detecting root access, applications can take appropriate actions, such as denying access to certain features or terminating the application altogether. This helps protect the integrity of the application and the data it handles.
As a penetration tester, it is important to understand root detection techniques and how to bypass them. This allows you to assess the security of an application running on a rooted device and identify potential vulnerabilities that could be exploited by malicious actors.
Εκτέλεση Εντολής
The exec
command in objection allows you to execute shell commands on the target Android device. This can be useful for various purposes, such as exploring the device's file system, running scripts, or interacting with the device's shell.
To use the exec
command, you need to specify the command you want to execute as an argument. For example, to list the files in the current directory, you can use the following command:
You can also execute commands with arguments by enclosing them in quotes. For example, to install an APK file located on the device, you can use the pm install
command:
Keep in mind that the exec
command runs the specified command on the target device, so be cautious when executing potentially harmful commands.
Στιγμιότυπα οθόνης
Κίνηση ανάλυσης γίνεται Δυναμική
Σε μια πραγματική εφαρμογή θα πρέπει να γνωρίζουμε όλες τις πληροφορίες που ανακαλύφθηκαν σε αυτό το μέρος πριν χρησιμοποιήσουμε το objection χάρη στην στατική ανάλυση. Παρόλα αυτά, με αυτόν τον τρόπο μπορείτε να δείτε κάτι νέο καθώς εδώ θα έχετε μόνο μια πλήρη λίστα κλάσεων, μεθόδων και εξαγόμενων αντικειμένων.
Αυτό είναι επίσης χρήσιμο αν για κάποιο λόγο είστε ανίκανοι να αποκτήσετε κάποιο αναγνώσιμο πηγαίο κώδικα της εφαρμογής.
Λίστα δραστηριοτήτων, δέκτες και υπηρεσίες
Ο Frida θα εμφανίσει ένα σφάλμα αν δεν βρεθεί καμία.
Λήψη της τρέχουσας δραστηριότητας
Αναζήτηση Κλάσεων
Ας ξεκινήσουμε την αναζήτηση κλάσεων μέσα στην εφαρμογή μας
Μέθοδοι αναζήτησης μιας κλάσης
Τώρα ας εξάγουμε τις μεθόδους μέσα στην κλάση MainActivity:
Λίστα με τις δηλωμένες μεθόδους ενός κλάσης με τις παραμέτρους τους
Ας δούμε ποιες παράμετρους χρειάζονται οι μέθοδοι της κλάσης:
Λίστα κλάσεων
Μπορείτε επίσης να καταγράψετε όλες τις κλάσεις που φορτώθηκαν μέσα στην τρέχουσα εφαρμογή:
Αυτό είναι πολύ χρήσιμο αν θέλετε να συνδέσετε τη μέθοδο μιας κλάσης και γνωρίζετε μόνο το όνομα της κλάσης. Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση για να αναζητήσετε ποιο module ανήκει η κλάση και στη συνέχεια να συνδέσετε τη μέθοδό της.
Η σύνδεση είναι εύκολη
Σύνδεση (παρακολούθηση) μιας μεθόδου
Από τον πηγαίο κώδικα της εφαρμογής γνωρίζουμε ότι η συνάρτηση sum() από την MainActivity εκτελείται κάθε δευτερόλεπτο. Ας προσπαθήσουμε να αποθηκεύσουμε όλες τις δυνατές πληροφορίες κάθε φορά που καλείται η συνάρτηση (ορίσματα, τιμή επιστροφής και ανίχνευση ανάκλησης):
Σύνδεση (παρακολούθηση) ολόκληρης μιας κλάσης
Πραγματικά βρίσκω όλες τις μεθόδους της κλάσης MainActivity πολύ ενδιαφέρουσες, ας συνδέσουμε όλες αυτές τις μεθόδους. Να είστε προσεκτικοί, αυτό μπορεί να προκαλέσει ανατροπή μιας εφαρμογής.
Εάν παίξετε με την εφαρμογή ενώ η κλάση είναι συνδεδεμένη, θα δείτε πότε καλείται κάθε συνάρτηση, τα ορίσματά της και την επιστρεφόμενη τιμή.
Αλλαγή της λογικής τιμής επιστροφής μιας συνάρτησης
Από τον πηγαίο κώδικα μπορείτε να δείτε ότι η συνάρτηση checkPin δέχεται ένα String ως όρισμα και επιστρέφει ένα boolean. Ας κάνουμε τη συνάρτηση να επιστρέφει πάντα true:
Τώρα, εάν γράψετε οτιδήποτε στο πλαίσιο κειμένου για τον κωδικό PIN, θα δείτε ότι οτιδήποτε είναι έγκυρο:
Παραδείγματα κλάσεων
Αναζητήστε και εκτυπώστε ενεργά παραδείγματα μιας συγκεκριμένης κλάσης Java, που καθορίζεται από ένα πλήρες όνομα κλάσης. Το αποτέλεσμα είναι μια προσπάθεια να ληφθεί μια συμβολοσειρά για ένα ανακαλυφθέν αντικείμενο που συνήθως περιέχει τιμές ιδιοτήτων για το αντικείμενο.
Αποθήκευση κλειδιού/Προθέσεις
Μπορείτε να πειραματιστείτε με την αποθήκευση κλειδιού και τις προθέσεις χρησιμοποιώντας:
Η εντολή dump
χρησιμοποιείται για την ανάκτηση του περιεχομένου της μνήμης μιας εφαρμογής Android. Αυτό μπορεί να είναι χρήσιμο για την εξαγωγή ευαίσθητων δεδομένων όπως κωδικοί πρόσβασης ή κλειδιά κρυπτογράφησης. Η εντολή dump
μπορεί να εκτελεστεί με τη χρήση του εργαλείου Objection και του Frida.
Για να χρησιμοποιήσετε την εντολή dump
, ακολουθήστε τα παρακάτω βήματα:
Ξεκινήστε το Objection και συνδεθείτε στη συσκευή Android σας.
Εκτελέστε την εντολή
android hooking list
για να εμφανιστεί η λίστα των εφαρμογών που εκτελούνται στη συσκευή.Επιλέξτε την εφαρμογή για την οποία θέλετε να ανακτήσετε τη μνήμη.
Εκτελέστε την εντολή
android hooking watch class_name
για να παρακολουθήσετε τις κλήσεις μιας συγκεκριμένης κλάσης.Εκτελέστε την εντολή
dump class_name
για να ανακτήσετε το περιεχόμενο της μνήμης της εφαρμογής.
Με αυτόν τον τρόπο, μπορείτε να ανακτήσετε το περιεχόμενο της μνήμης μιας εφαρμογής Android και να εξάγετε ευαίσθητα δεδομένα για ανάλυση ή επίθεση.
Λίστα
Στο τέλος της λίστας μπορείτε να δείτε το frida:
Ας ελέγξουμε τι εξάγει το frida:
Αναζήτηση/Εγγραφή
Μπορείτε επίσης να αναζητήσετε και να εγγράψετε μέσα στη μνήμη με το objection:
SQLite
Μπορείτε να χρησιμοποιήσετε την εντολή sqlite
για να αλληλεπιδράσετε με βάσεις δεδομένων sqlite.
Έξοδος
Τι λείπει στο Objection
Οι μέθοδοι hooking μερικές φορές καταρρίπτουν την εφαρμογή (αυτό συμβαίνει επίσης λόγω του Frida).
Δεν μπορείτε να χρησιμοποιήσετε τις περιπτώσεις των κλάσεων για να καλέσετε συναρτήσεις της περίπτωσης. Και δεν μπορείτε να δημιουργήσετε νέες περιπτώσεις κλάσεων και να τις χρησιμοποιήσετε για να καλέσετε συναρτήσεις.
Δεν υπάρχει συντόμευση (όπως αυτή για το sslpinnin) για να κάνετε hook όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται.
Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
Last updated