HTTP Analizi

Ozkan Altunbas
5 min readDec 17, 2022

HTTP nedir

HTTP İngilizcesi “Hyper Text Transfer Protokol” Türkçesi ise “Hiper Metin Transfer Protokolü” olarak çevrilen OSI Modelinin 7. yani Application katmanında çalışan bir İnternet Protokolüdür.

HTTP’nin ne olduğunu bilmek en azından temel anlam da ne olduğunu anlamak bilişim sektöründe çalışan herkes için önem arz etmektedir.

Önce genel bir çalışma mantığına bakalım;

HTTP istekleri bir request-response döngüsünde çalışır ,aslında döngü değil biz bir HTTP isteği atarız ve Sunucu bize karşılığında bir HTTP yanıtı döndürür.

Şimdi bu gönderdiğimiz İstek ve Yanıtlara içerisinde ki parametrelerine bakalım.

HTTP İstekleri

HTTP istekleri 3 kısımdan oluşur

1-İstek satırı ( buna metot diyoruz)

2-İstek başlığı

3-İstek mesaj gövdesi

1-İstek Satırı (Metot)

İstek satırlarında gönderdiğimiz HTTP isteklerinin metotları bulunur peki bu metotlar nedir ?

Örnek bir HTTP isteği

1-GET

Verileri almak ve bu verileri de listelemek için kullanılan metottur.

2-POST

Bir kaynağa veri göndermek için kullanılan metottur.

3-PUT

Kaynaktaki verilerin tamamını değiştirilmesi için kullanılan metottur.

{"name" : "Tommy" , "surname" : "Shelby" }

Burada ki HTTP isteğinde metot PUT ve isteğin gövdesinde ki veri JSON formatında gönderilerek kaynağın verilerini değiştirir.

4-PATCH

Kaynaktaki istediğimiz verilerin değiştirilmesi için kullanılan metottur.

{"name" : "Tommy"}

PUT başlığı gibi burada HTTP isteğinde metot PATCH ve isteğin gövdesinde ki veri JSON formatında gönderilerek kaynağın verilerini değiştirir.

5-DELETE

Kaynakta ki verilerin silinmesi için kullandığımız metottur.

6-CONNECT

  • İki yönlü bir iletişim başlatarak tünel açmak için kullanılır.

7-TRACE

8-OPTIONS

9-HEAD

Endpoint (Sorgu adresi)

Endpointler aslında gönderilen istekler ile cevabın buluşma noktaları gibi düşünülebilir.

Yapısına bakacak olursak eğer root/Path yapısındadır.

Örnek verecek olursak eğer Sorgu yapılan bir isteğe bakalım;

→http://www.ozkanaltunbas.com/users?username=ozkan&sort=time

Sorgu parametrelerinde (?) kullanılır, ve birden fazla sorgu için ise (&) kullanılarak istek gönderilir.

2-İstek Başlığı

İstek başlıkları gönderilen HTTP isteğinin bilgilerinin bulunduğu en önemli kısımdır. Bu kısımda gönderilen parametrelerin bazılarına ve amaçların bakalım;

1-Host : Günümüzde tek bir web sunucusunda bulunan birden fazla alana ait web uygulamaları vardır, bu nedenle tarayıcılar, istenen kaynağın hangi alana ait olduğunu açıklamak için “Host” başlığını kullanır.

2-Cookie:Bir web uygulamasında cihazda bilgi depolamak istiyoruz işte bu durumda “Çerez” adını verdiğimiz başlık devreye girer. Çerezler genellikle oturum açma bilgileri için kullanılır işte biz bir siteye login olduktan sonra yarın yine girdiğinde direkt girebilmenin sebebi budur.

Burada güvenlik açısından böyle bir şey yapmayın çerezlerinizi çaldırırsanız eğer kötü niyetli Hackerlar bir önceki yazımda bahsettiğim gibi okumak isterseniz eğer buraya bıraktım sizin hesabınızı herhangi bir şifre gerektirmeden ele geçirebilirler o yüzden işin bittiği zaman direkt çıkışını yap.

Unutma siteden böyle çıkış yap…

3-Upgrade-Insecure-Requests : istemcinin şifreleme (SSL) ile iletişim kurmak istediğini belirtmek için kullanılır.

4-User-Agent : istemcinin tarayıcısı ve işletim sistemi ile ilgili bilgiler bulunur. Web sunucuları bu bilgileri istemciye belirli HTTP Yanıtları göndermek için kullanır. Bu başlıkta güvenlik açıkları araştırması yapabilirsiniz. Olabilecek güvenlik açıkları ise;

→SQLI

→XSS

Bu açık türlerine bakabilirsiniz ne oldukarına dair bir fikriniz yoksa buyurun efendim.

5-Accept : Hangi içerik türlerini anlayabildiğini gösterir.

6-Accept-Language: istemcilerin dil bilgilerini bulabilirsiniz. Web sunucusu, hazırlanan içeriği istemcinin dilinde görüntülemek için bu bilgileri kullanır.

7-Connection : HTTP bağlantısının nasıl yapılacağını gösterir. İki çeşittir;

→Keep-Alive : TCP bağlantısının kalıcı olduğunu ve sonra ki isteklerin yapılmasına olanak sağlar.

→Close : İstemcinin veya sunucunun TCP bağlantısını kapatmak istediğini belirtir.

8-Content-Length : Alıcıya gönderdiğimiz mesaj gövdesinin byte cinsinden değerini belirtir.

9-Transfer-Encoding : Alıca gönderdiğimiz mesaj gövdesinin güvenli bir şekilde aktarmak için kullanılan kodlama biçimini belirtir.

Bu nokta da Content-Length ve Transfer-Encoding arasında uyuşmazlıktan dolayı oluşan önemli bir zafiyet türü var.

HTTP Request Smuggling (HTTP İstek Kaçakçılığı)

Bu açık türünü önümüzde ki yazılarda tüm türleri ile ele alıp anlatacağım ama şimdi çalışma prensibine bakalım;

Uygulamaya gönderilen “POST” data içerisine ikinci bir istek daha eklenir bu istek ise sanki başka bir kullanıcıdan gelmiş gibi algılanır ve ikinci isteğimizi de WAF benzeri sistemleri atlatarak iletiriz. Bu atlatma sonucunda hassas verilere erişim sağlayabiliriz ve kritik güvenlik açığı olarak değerlendirilir.

3-İstek Mesaj Gövdesi (Body)

Öncelikle şunu söyleyeyim başlıklar bittikten sonra gövdeye geçmek için bir boşluk bırakılıp öyle başlanır.

Web uygulamasına gönderilmesi amaçlanan diğer veriler body içinde bulunur ve metot “POST” metodu ise post parametreleri burada bulunabilir.

HTTP isteğini genel anlamda anladık şimdi ise bize dönen isteklerin cevaplarına bakalım.

HTTP YANITLARI

HTTP yanıtları döndüğü zaman bize durum kodları ile dönerler. Bu durum kodları yanıtın durumunu bildirir ,Siber güvenlikle uğraşanlar bilirler ki bir açık üzerinde saatlerce uğraştıktan sonra 200 OK yanıtını almak mükemmel bir histir :)

● 100–199 : Bilgilendirici yanıtlar

● 200–299 : Başarılı yanıtlar

● 300–399 : Yönlendirme mesajları

● 400–499 : İstemci hatası yanıtları

● 500–599 : Sunucu hatası yanıtları

Yanıt Başlıkları

Sıklıkla karşılaşabileceğiniz bazı HTTP Yanıt Başlıkları şunlardır:

1- Date: Sunucunun HTTP Yanıtını istemciye gönderdiği saati gösterir.

2- Connection: Tıpkı HTTP İstek başlığında olduğu gibi bağlantının nasıl işleneceğini belirtir.

3-Server: Sunucunun işletim sistemi ve web sunucusunun sürümü hakkında bilgiler.

Nginx/1.1 bunlara örnektir.

4- Last-Modified : İstenen kaynağın ne zaman değiştirildiğine ilişkin bilgi. Bu başlık, önbellek (cache) mekanizması için kullanılır.

5- Content-Type : Gönderilen verinin türünü belirtir.

6- Content-Length : Gönderilen verinin boyutunu byte cinsinden belirtir.

Yanıt Gövdesi

Gövde de ise istek sonucunda sunucunun bize döndürdüğü içerik örnek olarak google.com yazdınız ve yanıtın body yani gövdesinde sayfanın html içeriği döndürülür.

Örnek Http response body içeriği

Eğer buraya kadar okuduysan çok teşekkür ederim umarım HTTP nin ne olduğunu açık türlerini daha yakından anlamışsındır.

--

--