# Yükseltme Başlığı Kaçakçılığı
AWS hackleme konusunda sıfırdan kahramana kadar öğreninhtARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubumuza**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
**Try Hard Güvenlik Grubu**
{% embed url="https://discord.gg/tryhardsecurity" %}
***
### H2C Kaçakçılığı
#### Açık Metin Üzerinden HTTP2 (H2C)
H2C veya **açık metin üzerinden http2**, standart bir HTTP **bağlantısını sürekli bir bağlantıya yükselterek** geçici HTTP bağlantılarının normundan sapar. Bu yükseltilmiş bağlantı, düz metin HTTP'nin tek istek doğasına karşı devam eden iletişim için http2 ikili protokolünü kullanır.
Kaçakçılık sorununun özü, bir **ters proxy**'nin kullanımıyla ortaya çıkar. Genellikle, ters proxy HTTP isteklerini işler ve arka uca ileterek ardından arka uç yanıtını döndürür. Ancak, bir HTTP isteğinde `Connection: Upgrade` başlığı bulunduğunda (genellikle websocket bağlantılarıyla görülür), ters **proxy istemci ve sunucu arasında sürekli bir bağlantıyı sürdürür**, belirli protokoller tarafından gereken sürekli değişimi kolaylaştırır. H2C bağlantıları için, RFC'ye uyum, üç belirli başlığın varlığını gerektirir:
```
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings
```
### H2C Smuggling
Zafiyet, bir bağlantıyı yükselttikten sonra ters vekilin, yönlendirme işleminin bağlantı kurulduktan sonra tamamlandığını varsayarak bireysel istekleri yönetmeyi durdurması durumunda ortaya çıkar. H2C Smuggling'in sömürülmesi, başarılı bir H2C bağlantısı başlatıldığında, istek işleme sırasında uygulanan ters vekil kurallarını atlamayı sağlar; bu kurallar arasında yol tabanlı yönlendirme, kimlik doğrulama ve WAF işleme bulunmaktadır.
#### Zafiyetli Vekiller
Zafiyet, ters vekilin `Upgrade` ve bazen `Connection` başlıklarını nasıl işlediğine bağlıdır. Aşağıdaki vekiller, bu başlıkları varsayılan olarak iletir ve dolayısıyla H2C smuggling'i varsayılan olarak etkinleştirir:
- HAProxy
- Traefik
- Nuster
Öte yandan, aşağıdaki hizmetler, bu başlıkları varsayılan olarak iletmez. Bununla birlikte, güvensiz bir şekilde yapılandırılmış olabilirler ve `Upgrade` ve `Connection` başlıklarının filtresiz iletilmesine izin verebilirler:
- AWS ALB/CLB
- NGINX
- Apache
- Squid
- Varnish
- Kong
- Envoy
- Apache Traffic Server
#### Sömürü
Uyumlu bir H2C bağlantısı yükseltmek için gereken başlıkları varsayılan olarak ileten tüm sunucuların olmadığını belirtmek önemlidir. Bu nedenle, AWS ALB/CLB, NGINX ve Apache Traffic Server gibi sunucular, H2C bağlantılarını doğal olarak engeller. Bununla birlikte, bazı arka uçların standartlara uymayabileceği için, uyumsuz `Connection: Upgrade` varyantı ile test etmek faydalı olabilir.
{% hint style="danger" %}
`proxy_pass` URL'sinde belirtilen belirli **yol** (örneğin, `http://backend:9999/socket.io`) bağlantıyı varsayılan olarak `http://backend:9999` olarak ayarlar. Bu, bu tekniği kullanarak dahili uç noktadaki herhangi bir yolla etkileşime izin verir. Dolayısıyla, `proxy_pass` URL'sinde bir yol belirtmek erişimi kısıtlamaz.
{% endhint %}
[**BishopFox tarafından h2csmuggler**](https://github.com/BishopFox/h2csmuggler) ve [**assetnote tarafından h2csmuggler**](https://github.com/assetnote/h2csmuggler) araçları, bir H2C bağlantısı kurarak **ters vekil tarafından uygulanan korumaları atlamaya** yönelik girişimleri kolaylaştırır.
Bu zafiyetle ilgili daha fazla bilgi için özellikle NGINX hakkında [**bu detaylı kaynağa**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection) başvurun.
## Websocket Smuggling
Websocket smuggling, bir HTTP2 tüneli oluşturmanın aksine, bir Websocket tüneli oluşturarak potansiyel vekil kısıtlamalarını atlamayı ve uca doğrudan iletişimi kolaylaştırmayı amaçlar.
### Senaryo 1
Bu senaryoda, bir iç REST API'sine erişilemeyen bir arka uç, bir kamu WebSocket API'sı sunar ve kötü niyetli bir istemcinin iç REST API'ye erişim aradığı hedeflenir. Saldırı şu adımlarda gerçekleşir:
1. İstemci, başlıkta yanlış bir `Sec-WebSocket-Version` protokol sürümü ile bir Upgrade isteği göndererek ters vekile başlar. Ters vekil, `Sec-WebSocket-Version` başlığını doğrulayamadığı için Upgrade isteğini geçerli olarak kabul eder ve arka uca iletir.
2. Arka uç, `Sec-WebSocket-Version` başlığındaki yanlış protokol sürümünü belirten `426` durum kodu ile yanıt verir. Ters vekil, arka ucun yanıt durumunu göz ardı ederek WebSocket iletişimi için hazır olduğunu varsayar ve yanıtı istemciye iletir.
3. Sonuç olarak, ters vekil, istemci ile arka uç arasında bir WebSocket bağlantısı kurulmuş gibi yanıltılırken, aslında arka uç, Upgrade isteğini reddetmiştir. Bununla birlikte, vekil, istemci ile arka uç arasında açık bir TCP veya TLS bağlantısını sürdürür ve istemcinin bu bağlantı aracılığıyla özel REST API'ye kısıtlamasız erişim sağlar.
Etkilenen ters vekiller arasında, sorunu ele almaktan kaçınan Varnish ve Envoy proxy sürümü 1.8.0 veya daha eski olanlar, daha sonraki sürümlerin yükseltme mekanizmasını değiştirmiş olmasıyla birlikte diğer vekiller de hassas olabilir.
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png)
### Senaryo 2
Bu senaryo, bir iç REST API'sine erişilemeyen bir arka uçta, hem bir kamu WebSocket API'si hem de sağlık kontrolü için bir kamu REST API'si bulunan bir arka uç hedeflenir. Daha karmaşık olan saldırı, aşağıdaki adımları içerir:
1. İstemci, sağlık kontrol API'sini tetiklemek için bir POST isteği gönderirken, ek bir HTTP başlığı `Upgrade: websocket` içerir. Ters vekil olarak hizmet veren NGINX, yalnızca `Upgrade` başlığına dayanarak bu isteği standart bir Upgrade isteği olarak yorumlar ve arka uca iletir.
2. Arka uç, sağlık kontrol API'sini yürütürken, saldırgan tarafından kontrol edilen bir harici kaynağa ulaşır ve bir HTTP yanıtı ile `101` durum kodunu içeren bir yanıt alır. Bu yanıt, arka uca ulaştığında ve NGINX'e iletilirken, yalnızca durum kodunu doğruladığı için vekili, bir WebSocket bağlantısının kurulduğuna inandırır.
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
> **Uyarı:** Bu tekniğin karmaşıklığı, genellikle düşük önem derecesi olarak kabul edilen bir dış SSRF zafiyetinin varlığını gerektirmesi nedeniyle artar.
Sonuç olarak, NGINX, istemci ile arka uç arasında bir WebSocket bağlantısı olduğuna inanır. Aslında böyle bir bağlantı yoktur; sağlık kontrol REST API'si hedef alınmıştır. Bununla birlikte, ters vekil bağlantıyı açık tutar ve istemcinin bu aracılıkla özel REST API'ye erişmesine olanak tanır.
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png)
Çoğu ters vekil bu senaryoya karşı savunmasız olabilir, ancak sömürü, genellikle düşük önem derecesi olarak kabul edilen bir dış SSRF zafiyetinin varlığına bağlıdır.
#### Lablar
Her iki senaryoyu test etmek için labları kontrol edin: [https://github.com/0ang3el/websocket-smuggle.git](https://github.com/0ang3el/websocket-smuggle.git)
### Referanslar
- [https://blog.assetnote.io/2021/03/18/h2c-smuggling/](https://blog.assetnote.io/2021/03/18/h2c-smuggling/)
- [https://bishopfox.com/blog/h2c-smuggling-request](https://bishopfox.com/blog/h2c-smuggling-request)
- [https://github.com/0ang3el/websocket-smuggle.git](https://github.com/0ang3el/websocket-smuggle.git)