# SOME - Same Origin Method Execution {{#include ../../banners/hacktricks-training.md}} ## Same Origin Method Execution Θα υπάρξουν περιπτώσεις όπου μπορείτε να εκτελέσετε κάποιο περιορισμένο javascript σε μια σελίδα. Για παράδειγμα, στην περίπτωση όπου μπορείτε να [**ελέγξετε μια τιμή callback που θα εκτελεστεί**](#javascript-function). Σε αυτές τις περιπτώσεις, ένα από τα καλύτερα πράγματα που μπορείτε να κάνετε είναι να **πρόσβαση στο DOM για να καλέσετε όποια** ευαίσθητη ενέργεια μπορείτε να βρείτε εκεί (όπως το να κάνετε κλικ σε ένα κουμπί). Ωστόσο, συνήθως θα βρείτε αυτή την ευπάθεια σε **μικρές τελικές οντότητες χωρίς τίποτα ενδιαφέρον στο DOM**. Σε αυτά τα σενάρια, αυτή η επίθεση θα είναι πολύ χρήσιμη, επειδή ο στόχος της είναι να μπορέσει να **καταχραστεί την περιορισμένη εκτέλεση JS μέσα σε ένα DOM από μια διαφορετική σελίδα από την ίδια τοποθεσία** με πολύ ενδιαφέρουσες ενέργειες. Βασικά, η ροή της επίθεσης είναι η εξής: - Βρείτε ένα **callback που μπορείτε να καταχραστείτε** (πιθανώς περιορισμένο σε \[\w\\.\_]). - Αν δεν είναι περιορισμένο και μπορείτε να εκτελέσετε οποιοδήποτε JS, μπορείτε απλά να το καταχραστείτε ως κανονικό XSS - Κάντε τον **θύμα να ανοίξει μια σελίδα** που ελέγχεται από τον **επιτιθέμενο** - Η **σελίδα θα ανοίξει μόνη της** σε ένα **διαφορετικό παράθυρο** (το νέο παράθυρο θα έχει το αντικείμενο **`opener`** που αναφέρεται στο αρχικό) - Η **αρχική σελίδα** θα φορτώσει τη **σελίδα** όπου βρίσκεται το **ενδιαφέρον DOM**. - Η **δεύτερη σελίδα** θα φορτώσει τη **ευάλωτη σελίδα καταχρώντας το callback** και χρησιμοποιώντας το **`opener`** αντικείμενο για να **πρόσβαση και να εκτελέσει κάποια ενέργεια στην αρχική σελίδα** (η οποία τώρα περιέχει το ενδιαφέρον DOM). > [!CAUTION] > Σημειώστε ότι ακόμη και αν η αρχική σελίδα έχει πρόσβαση σε μια νέα διεύθυνση URL μετά τη δημιουργία της δεύτερης σελίδας, το **`opener` αντικείμενο της δεύτερης σελίδας είναι ακόμα μια έγκυρη αναφορά στην πρώτη σελίδα στο νέο DOM**. > > Επιπλέον, προκειμένου η δεύτερη σελίδα να μπορεί να χρησιμοποιήσει το αντικείμενο opener, **και οι δύο σελίδες πρέπει να είναι στην ίδια τοποθεσία**. Αυτός είναι ο λόγος που, προκειμένου να καταχραστείτε αυτή την ευπάθεια, πρέπει να βρείτε κάποιο είδος **XSS στην ίδια τοποθεσία**. ### Exploitation - Μπορείτε να χρησιμοποιήσετε αυτή τη φόρμα για να **δημιουργήσετε ένα PoC** για να εκμεταλλευτείτε αυτόν τον τύπο ευπάθειας: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator) - Για να βρείτε μια διαδρομή DOM σε ένα HTML στοιχείο με ένα κλικ μπορείτε να χρησιμοποιήσετε αυτή την επέκταση προγράμματος περιήγησης: [https://www.someattack.com/Playground/targeting_tool](https://www.someattack.com/Playground/targeting_tool) ### Example - Μπορείτε να βρείτε ένα ευάλωτο παράδειγμα στο [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/) - Σημειώστε ότι σε αυτό το παράδειγμα ο διακομιστής είναι **δημιουργώντας κώδικα javascript** και **προσθέτοντάς** τον στο HTML με βάση το **περιεχόμενο της παραμέτρου callback:** ``. Γι' αυτό σε αυτό το παράδειγμα δεν χρειάζεται να υποδείξετε τη χρήση του `opener` ρητά. - Επίσης, ελέγξτε αυτή την αναφορά CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068) ## References - [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/) {{#include ../../banners/hacktricks-training.md}}