WebSocket Attacks
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
WebSocket bağlantıları, başlangıçta bir HTTP el sıkışması ile kurulur ve uzun ömürlü olacak şekilde tasarlanmıştır; bu, herhangi bir zamanda iki yönlü mesajlaşmaya olanak tanır ve bir işlem sistemine ihtiyaç duymaz. Bu, WebSocket'leri, canlı finansal veri akışları gibi düşük gecikme veya sunucu başlatmalı iletişim gerektiren uygulamalar için özellikle avantajlı hale getirir.
WebSocket bağlantılarının kurulumu hakkında ayrıntılı bir açıklama buradan erişilebilir. Özetle, WebSocket bağlantıları genellikle aşağıda gösterildiği gibi istemci tarafı JavaScript aracılığıyla başlatılır:
wss
protokolü, TLS ile güvence altına alınmış bir WebSocket bağlantısını belirtirken, ws
güvensiz bir bağlantıyı ifade eder.
Bağlantı kurulumu sırasında, tarayıcı ve sunucu arasında HTTP üzerinden bir el sıkışma (handshake) gerçekleştirilir. El sıkışma süreci, tarayıcının bir istek göndermesi ve sunucunun yanıt vermesi ile ilgilidir; aşağıdaki örneklerde gösterildiği gibi:
Tarayıcı bir el sıkışma isteği gönderir:
Sunucu el sıkışma yanıtı:
Bağlantı kurulduktan sonra, her iki yönde mesaj alışverişi için açık kalır.
WebSocket El Sıkışmasının Ana Noktaları:
Connection
ve Upgrade
başlıkları, bir WebSocket el sıkışmasının başlatıldığını belirtir.
Sec-WebSocket-Version
başlığı, genellikle 13
olan istenen WebSocket protokol sürümünü gösterir.
Sec-WebSocket-Key
başlığında, her el sıkışmanın benzersiz olmasını sağlamak için Base64 kodlu rastgele bir değer gönderilir; bu, önbellek proxy'leriyle ilgili sorunları önlemeye yardımcı olur. Bu değer kimlik doğrulama için değil, yanıtın yanlış yapılandırılmış bir sunucu veya önbellek tarafından üretilmediğini doğrulamak içindir.
Sunucunun yanıtındaki Sec-WebSocket-Accept
başlığı, Sec-WebSocket-Key
'in bir hash'idir ve sunucunun bir WebSocket bağlantısı açma niyetini doğrular.
Bu özellikler, el sıkışma sürecinin güvenli ve güvenilir olmasını sağlar ve verimli gerçek zamanlı iletişim için zemin hazırlar.
Bir websocket ile ham bir bağlantı kurmak için websocat
kullanabilirsiniz.
Veya bir websocat sunucusu oluşturmak için:
Eğer istemcilerin mevcut yerel ağınızdan bir HTTP websocket'e bağlı olduğunu bulursanız, istemci ile sunucu arasında bir MitM saldırısı gerçekleştirmek için bir ARP Spoofing Attack denemek isteyebilirsiniz. İstemci bağlanmaya çalıştığında, o zaman şunu kullanabilirsiniz:
Websockets'ta bilinen vulnerabilities keşfetmek, parmak izi çıkarmak ve aramak için tool https://github.com/PalindromeLabs/STEWS kullanabilirsiniz.
Burp Suite, MitM websockets iletişimini, normal HTTP iletişimi için yaptığına çok benzer bir şekilde destekler.
socketsleuth Burp Suite eklentisi, history alarak, interception rules ayarlayarak, match and replace kurallarını kullanarak, Intruder ve AutoRepeater kullanarak Burp'ta Websocket iletişimlerini daha iyi yönetmenizi sağlar.
WSSiP: "WebSocket/Socket.io Proxy"nun kısaltması olan bu araç, Node.js ile yazılmıştır ve istemci ile sunucu arasındaki tüm WebSocket ve Socket.IO iletişimlerini capture, intercept, send custom mesajlar gönderme ve görüntüleme için bir kullanıcı arayüzü sağlar.
wsrepl, özellikle penetrasyon testi için tasarlanmış bir interactive websocket REPL'dir. Incoming websocket messages gözlemlemek ve yenilerini göndermek için bir arayüz sağlar ve bu iletişimi automating etmek için kolay bir çerçeve sunar.
https://websocketking.com/ diğer weblerle websockets kullanarak iletişim kurmak için bir web'dir.
https://hoppscotch.io/realtime/websocket diğer iletişim/protokol türleri arasında, diğer weblerle websockets kullanarak iletişim kurmak için bir web sağlar.
Burp-Suite-Extender-Montoya-Course içinde websockets kullanarak bir web başlatmak için bir kod bulabilirsiniz ve bu yazıda bir açıklama bulabilirsiniz.
Cross-site WebSocket hijacking, ayrıca cross-origin WebSocket hijacking olarak da bilinir, WebSocket el sıkışmalarını etkileyen Cross-Site Request Forgery (CSRF)'nin belirli bir durumu olarak tanımlanır. Bu vulnerability, WebSocket el sıkışmalarının yalnızca HTTP cookies aracılığıyla CSRF tokens veya benzeri güvenlik önlemleri olmadan kimlik doğrulaması yaptığı durumlarda ortaya çıkar.
Saldırganlar, savunmasız bir uygulamaya çapraz alan WebSocket bağlantısı başlatan bir malicious web page barındırarak bunu istismar edebilir. Sonuç olarak, bu bağlantı, uygulama ile kurbanın oturumu ile bir parça olarak kabul edilir ve oturum yönetim mekanizmasındaki CSRF korumasının eksikliğinden yararlanır.
Websocket bağlantısı kurulduğunda cookie sunucuya gönderilir. Sunucu, her belirli kullanıcıyı gönderilen cookie'ye dayalı olarak websocket oturumu ile ilişkilendirmek için bunu kullanıyor olabilir.
Daha sonra, örneğin websocket sunucusu, bir msg ile "READY" gönderildiğinde bir kullanıcının konuşma geçmişini geri gönderirse, o zaman bağlantıyı kuran basit bir XSS ( cookie otomatik olarak kurban kullanıcısını yetkilendirmek için gönderilecektir) "READY" göndererek konuşma geçmişini retrieve edebilecektir.
Bu blog yazısında https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ saldırgan, web socket iletişiminin gerçekleştiği alanın alt alanında rastgele Javascript çalıştırmayı başardı. Çünkü bu bir alt alan idi, cookie gönderiliyordu ve çünkü Websocket, Origin'i düzgün kontrol etmediği için, onunla iletişim kurmak ve ondan token'ları çalmak mümkün oldu.
Taklit etmek istediğiniz web uygulamasını kopyalayın (örneğin .html dosyaları) ve websocket iletişiminin gerçekleştiği scriptin içine bu kodu ekleyin:
Şimdi wsHook.js
dosyasını https://github.com/skepticfx/wshook adresinden indirin ve web dosyalarının bulunduğu klasöre kaydedin.
Web uygulamasını açarak bir kullanıcının buna bağlanmasını sağlarsanız, websocket üzerinden gönderilen ve alınan mesajları çalabilirsiniz:
WebSocket'lerde de Yarış Koşulları vardır, daha fazla bilgi için bu bilgiyi kontrol edin.
Web Sockets, verileri sunucu tarafına ve istemci tarafına göndermek için bir mekanizma olduğundan, sunucu ve istemcinin bilgileri nasıl işlediğine bağlı olarak, Web Sockets, bir websocket üzerinden bir kullanıcının girişi ile XSS, SQLi veya diğer yaygın web zafiyetlerini istismar etmek için kullanılabilir.
Bu zafiyet, ters proxy kısıtlamalarını aşmanıza olanak tanıyabilir ve onlara bir websocket iletişiminin kurulduğunu düşündürebilir (gerçek olmasa bile). Bu, bir saldırganın gizli uç noktalara erişmesine olanak tanıyabilir. Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
Upgrade Header SmugglingAWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)