HTTP Request Smuggling (HTTP İstek... - Gais Security- Gais Siber Güvenlik Teknolojileri

HTTP Request Smuggling (HTTP İstek Kaçakcılığı) Nedir?

İstek kaçakcılığı , bir web sitesinin bir kaynakdan veya kaynaklardan alınan HTTP isteklerinin sırasına , işlemlerine müdahale etme tekniğidir.Ele alınan İstek kaçakcılığı zafiyeti sayesinde saldırganlar “WAF” gibi firewall hizmetlerini kolayca aşabilir , barındırılan verilere erişim sağlayabilir.

HTTP İstek Kaçakcılığı Nasıl Çalışır?

Karşı uygulamaya gönderilen “POST” data içerisine ikinci bir HTTP isteği eklenir. İstek “POST” data içerisinde bulunduğu için WAF ile benzer yapıda olan firewall’ların gözünde saldırı olarak algılanmaz ve ardından karşı uygulamaya gönderilir. Karşı web uygulaması bu gelen isteği ayrıştırdıktan sonra 2 farklı istekmiş gibi algılayıp işler.

 

İstek Kaçakcılığı saldırısında iyi bir sonuç elde etmek amacıyla “Transfer-Encoding” ve “Content-Length” HTTP başlıkları kullanılır;

  • “Content-Length” tarafında “POST” datasının boyutu belirtilir.
  • “Transfer-Encoding” tarafında chunked belirtilerek gönderilen isteğin parçalı olduğu bilgisi verilir.

Saldırı Türleri

  • CL-TE : “Content-Length” başlığını ve “Transfer-Encoding” başlığını destekler. Front-end sunucu “Content-Length” başlığını işler ve boyut belirler. Belirlenen boyut back-end sunucuya iletilir. Back-end sunucu “Transfer-Encoding” başlığını işleyerek chunked belirtir , parçayı işler ve isteği sonlandırır.

 

  • TE-CL : “Transfer-Encoding" başlığı üzerinden ilerlenerek yapılan istekler sunucuya gönderilir. “Content-Length” den isteğin ikiye ayrılması ve işlenmesi beklenir.

 

  • TE-TE: Front-end ve back-end sunucuda “Transfer-Encoding” başlığını destekler fakat sunuculardan biri başlığı gizleyerek işlenmemesine neden olabilir. “TE-TE” bir zafiyeti ortaya çıkarmak için “Transfer-Encoding” başlığında front-end veya back-end sunucularından yalnızca birinde işlenir ve diğer sunucu tarafından yok sayılır.

Laboratuvar Ortamı ve İstismar Örnekleri

Laboratuvar ortamı olarak “PortSwigger” tercih edilmiştir. İstismar sürecinde PortSwigger’ın kendi hazırladığı lab’ları kullanacağız.

1) HTTP request smuggling, basic CL.TE vulnerability

Laboratuvar Açıklaması:

Bu laboratuvar front-end ve back-end sunucusu içerir ve front-end sunucusu yığın kodlamayı (chunked encoding) desteklemez. Front-end sunucusu, GET veya POST yöntemini kullanmayan istekleri reddeder.

Laboratuvarı çözmek için , back-end sunucuya bir istek kaçakcılığı yapın , böylece back-end sunucu tarafından işlenen bir sonraki istek “GPOST” yöntemini kullanıyor gibi görünecektir.

“Repeater” sekmesine geçtikten sonra , ilk olarak front-end sunucuda “Content-Length” başlığı için boyut belirliyoruz. Back-end sunucuda ise “Transfer-Encoding” başlığımızı chunked olarak belirtiyoruz ve isteği gönderiyoruz.

Yolladığımız istek back-end sunucuya iletildiği zaman belirlediğimiz “Transfer-Encoding” yapısını işler. 0\r\n\r\n olarak okuduğu zaman sonuna gelindiğini ve arabellekteki “G” harfini bırakarak sonraki isteğin gelmesini beklediğini görecektir.

2) HTTP request smuggling, basic TE.CL vulnerability

Laboratuvar Açıklaması:

Bu laboratuvar bir front-end ve back-end sunucusu içerir ve back-end sunucu chunked encoding’i (yığın kodlama) desteklemez. Front-end server , “GET” ve “POST” yöntemini kullanmayan istekleri reddeder.

Laboratuvarı çözmek için , back-end sunucuya bir istek kaçakcılığı yapın , böylece back-end sunucu tarafından işlenen bir sonraki istek “GPOST” yöntemini kullanıyor gibi görünecektir.