HTTP Protokolü nasıl çalışır?

“Software Identification” tekniginin öncüsü, OSI Modelinin 7.Katmanın da bulununan http protokolü’nün arkasında saniseler içerisinde dönen trafigi capture edip ilgili protokolun çalışma mantığı ve yapısı hakkında derinlemesine bilgi sahibi olmaya çalışacağız. Client tarafından 80. port aracılığıyla yapılan her  request’e karşılık http protokolu bir response field döner.

securityfocus isimli  sunucuya test amaçlı  yapilan bir request ve dönen response içeriğini asağida görebilirsiniz.
Dikkat ederseniz dönen response içeriğinde gereginden fazla bilgi var ki bunlar gereksiz.

=== REQUEST ===

GET / HTTP/1.1
Host: www.securityfocus.com
Accept-Encoding: gzip
Connection: keep-alive
User-Agent: Mozilla/5.0 SF/1.26b
Range: bytes=0-199999
Referer: http://www.securityfocus.com/

=== RESPONSE ===

HTTP/1.1 200 Partial Content
Date: Tue, 13 Apr 2010 20:08:42 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.29 mod_ssl/2.8.31 OpenSSL/0.9.8g
Last-Modified: Tue, 13 Apr 2010 20:00:13 GMT
ETag: “b339d9-4d9b-4bc4cd4d”
Accept-Ranges: bytes
Content-Length: 19867
Content-Range: bytes 0-19866/19867
Keep-Alive: timeout=4, max=500
Connection: Keep-Alive
Content-Type: text/html

HTTP Protokolü Request ve Response istek yapıları.

Http Response Field Yapısı.

Request = Status-Line 	;
	*(( gener<al-header 	;
	| response-header 	;
	| entity-header ) CRLF) ;
	CRLF
	[ message-body ] 	;

Http Response Header Listesi:

“Informational,Succes,Redirection,Client Error, Server Error”

Http Request Field Yapısı.

Request = Request-Line 	;
	*(( general-header 	;
	| request-header 	;
	| entity-header ) CRLF) ;
	CRLF
	[ message-body ] 

Başlıca Http Request Header Listesi:

options,get,head,post,put,delete,trace,connect,host,user-agent,date,referer

TCP Session nasıl açılır ve HTTP isteği nasıl gerçekleşir ?

AÅŸağıda “Source” bölümü karşışında  belirtilmiÅŸ olan IP adresi, sunucumuza istekde bulunan client’in adresidir. Destination ise, sunucumuzun IP adresi olsun.Client makine, hedef sunucuya  doÄŸru her request de farkli bir port aracılığıyla ilgili session’un  açılmasında rol üstleniyor.Dolayısıyla karşı sunucuya yapılan her request  aynı zamanda  client makine tarafında farkli bir source port’un Tcp Sessiona dahil olmasını ve  aradaki baÄŸlantının açılmasını saÄŸlıyor.

Source IP: 10.0.0.2
Source Port: 46949
Destination IP: 205.206.231.12
Destination Port: 80

Åžimdi, client makine’de  205.206.231.12 nolu IP adresine doÄŸru yapılan  requestleri wireshark ile capture edelim amacımız paketleri detaylıca incelemek fakat öncelikle shell de netstat  -ant parametresiyle baÄŸlantı saÄŸlanmış basit bir tcp session çıktısını görelim.

netstat -ant | grep ’46949′ > http_session.txt

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 10.0.0.2:46949          205.206.231.12:80       ESTABLISHED

“Established” statusu bizlere TCP baÄŸlantıların da üçlü el sıkışma olarak adlandırdıgımız aksiyonun gercekleÅŸtiÄŸini ve hedef makine ile iletisim kurulabileceÄŸini gösteriyor.

3′lü el sıkışma nasıl gerçekleÅŸiyor?

Client  “Syn” >   Sunucu  (A)
Sunucu  “Ack+Syn” > Client (A+1)
Client  +Ack  > Sunucu (B+1)

TCP baÄŸlantısı gerçekleÅŸtikten sonra 205.206.231.12 nolu IP adresine  1 bit’lik PSH ve ACK isimli tcp bayrakları gönderiliyor dolayısıyla request ettiÄŸimiz sayfanın içeriÄŸini görüntüleyebiliyoruz.

Client  “Syn” >   Sunucu
Sunucu  “Ack+Syn” > Client
Client  +Ack  > Sunucu
Client  Psh + Ack  > Sunucu

Biraz teknik bir anlatm oldu.
Apache sunucularda güvenlik sebebiyle özellikle Software Identification analizleri’ni engellemek için dönen response içeriklerini minimize edip filtreleyebiliriz fakat bunlar bir baÅŸka entry’nin konusu olsun.

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

1 Comment »

 
 

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>