Protocolo HTTP

Posteado: domingo, 18 de julio de 2010 by Franco Di En Secciones: , ,
0

Bueno gente, aca les traigo un tutorial del funcionamiento "basico" del protocolo http, el entender
este protocolo nos puede servir para ataques de tipo HEADER HTTP, Sqli, XSS, bueno basicamente
casi todos o todos los ataques del tipo de vulnerabilidad a nivel web.
comenzemos con lo basico.

0x001 --> Conceptos basicos
0x002 --> Funcionamiento del protocolo HTTP
0X003 --> Envio de datos (Metodos)
0x004 --> Solicitudes
0x005 --> Respuestas

Antes de empezar considero correcto dejar el archivo con el contenido del manual por si a alguno le resulta mas comodo el formato de este es .txt



0x001:

Bueno, creo que para no liarnos con todo esto, primero debere de despejar algunas dudas que surgen
en algunas oportunidades para la mejor comprension del manual.

Url: Una url es una direccion (web) que permite el acceso a paginas, archivos.

ejemplo: www.foro.portalhacker.net/index.php

Diferencia entre url y uri:

Un uri (uniform resource identifier) se diferencia de una url en que este permite incluir en la direccion una subdireccion, esto sera mejor con un ejemplo:

estructura de un uri:

http://www.lalala.com/index.php?pagina=2#inicio

Cabecera o Header:

Una cabecera, se refiere a una informacion suplementaria situada al principio de un bloque de informacion que va a ser almacenada o transimitada y que contiene informacion necesaria para el correcto funcionamiento del bloque de datos.
En transmision de informacion de informacion los datos que siguen a la cabecera se denominan cuerpo.



CGI: Tecnologia de la WWW permite a un cliente (navegador) solicitar datos de un programa ejecutado en el servidor. Cgi especifica un estandar para transferir datos entre el cliente y el programa. Es un mecanisimo de comunicaciones entre el servidor web y una aplicacion externa cuyo resultado final de la ejecucion son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGI's.

Objeto MIME: Especificaciones dirigidas al intercambio de todo tipo de archivos (texto, audio,

video, etc)

Solicitud http: Conjunto de lineas que el navegador envia al servidor. mas adelante veremos que hay dentro de una solicitud http

0x002:

Funcionamiento del protocolo HTTP:

El proposito del protocolo http es la transferencia de archivos, principalmente en formato HTML
entre el cliente (navegador) y el servidor web.

Comunicacion entre el navegador y el servidor:

En cliente envia encabezados o solicituds http el servidor las decodificaUbica el archivos que solicito el cliente dentro del servidor
el servidor envia los datos que se solicitaron al cliente como respuesta al envio de encabezados (respuesta http)



Solicitud HTTP:

Como dijimos mas arriba, una solicitud http es un conjunto de lineas que el navegador envia el servidor

Esta incluye:

Una linea de solicitud: linea que especifica el tipo de documento solicitado, el metodo que se aplicara y la version del protocolo utilizado.
La linea esta formada por tres elementos que deben estar separados por un espacio.

Campos del encabezado de solicitud:  Es un conjunto de lineas opcionales que permiten aportar informacion adicional sobre la solicitud (navegador, so)
cada una de estas lineas esta formada por un nombre que describe el tipo de encabezado y el valor del encabezado.

El cuerpo de la solicitud: Es un conjunto de lineas que deben estar separadas de las lineas

precendetes por una linea en blanco y, por ejemplo permiten que se envien datos
por un comando POST. por lo tanto una solicitud http posee la siguiente sintaxis (, significa reto
rno de carro).

METDO VERSION URL
ENCABEZADO: Valir
... ENCABEZADO: Valor
linea en blanco
cuerpo de la solicitud

EJ:

GET http://es.kioskea.net HTTP/1.0 Accept : Text/html If-Modified-Since :
Saturday, 15-January-2000 14:37:11 GMT User-Agent : Mozilla/4.0
(compatible; MSIE 5.0; Windows 95)
0x003.

Envio de datos (Metodos)

Como todos sabemos hay diferentes formas de enviar los datos en el protocolo http, esto se lo

denomina metodos.
aca dejo alguna lista con algunos metodos

Get: Es el metodo mas usado. Get obtiene cualquier tipo de informacion identificada en el fichero
al que realizemos la peticion. los parametros se pasan por url.
ej: www.miweb.com.ar/index.php?a=archivo1

me explico ?

HEAD: Solicita el encabezado del recurso ubicado en la url especificada. este metodo nos brinda informacion
del servidor, protocolo, y mas informacion que veremos adelante.

POST: Envia datos al programa, pero a diferencia del Get, no pasa los parametros por la url
este es usado para pedir que el servidor acepte informacion enviada desde el cliente. lo que pase de ahi
en adelante es tarea de la aplicacion

OPTIONS: Metodo que nos brinda gran cantidad de informacion, optios nos informa de los metodos de peticion y respuesta que admite el servidor, este metodo condiciona lo que vayamos a hacer si estamos intentando encontrar algun fallo en algun server.

PUT: Es lo contrario a get. si get, lee el codigo del archivo, put, permite modificarlo y

sobreescribir el codigo normal

DELETE: Su propio nombre lo dice permite borrar el archivo que especifiquemos


0x004

Solicitudes:

Ahora vamos a entrar en detalle de lo que puede consultar un navegador a un servidor web cuando se envia una solicitud. veremos un par de solicitudes que aparecen frecuentemente.

Accept: Acepta contenidos aceptable
ej: Accept: text/plain

Accept-Charset: Conjunto de caracteres que son aceptables.
ej:       Accept-Charset: iso-8859-5

Accept-Encoding: Codificaciones o compresiones aceptables
ej: Accept-Encoding: compress , gzip

Connection: tipo de conexion que el usuario agente preferiria
ej: Connection: Close

Contengt Lenght: Longitud del cuerpo de la peticion en octetos.
ej: Content-Length: 348

Fecha- Date: Muestra la hora en que se envio el mensaje
ej: date: tue, 15 nov 1994 8:12:31 GMT

Proxy Autorization: Credenciales de autorizacion para conectarse a un proxy
ej: Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Referer: Muestra la web anterior que ha sido precedida por la web actual.
ej: Referer: http://en.wikipedia.org/wiki/Main_Page.

 0x005

Respuestas:

El servidor cuando se le envia una solicitud http, esta obligado a enviar una respuesta a esta cabecera
las cabeceras que puede enviar el servidor pueden ser las siguientes:

Codigos de respuesta:

1 xx Mensajes

 Nº    Descripcion

100      Conexion rechazada

2xx Operacion exitosa

 Nº       Descripcion
200          Ok
201-03     Info no oficial
204        Sin contenido
205            Contenido para recargar

3xx Redireccion

 Nº   Descripcion

301     Mudado permanentemente
302     encontrado
303     vea otros
304     no modificado
305     utilice un proxy
307     Redireccion temporal

4xx Error por parte del cliente

 Nº    Descripcion
400    Solicitud incorrecta
402    pago requerido
403    prohibido
404    no encontrado
409    conflicto
410    ya no disponible

Ahora veamos mas detalladamente el tipo de respuesta que puede devolver un servidor:

Accept-Ranges: ¿Que tipo de contenido parcial de este rango soporta el servidor
ej: Accept-ranges: Bytes

Content-Encoding: El tipo de codificacion utilizada en los datos
ej: Content-Encoding: gzip

Content-languaje: El lenguaje es el contenido en
ej: content-languaje: da

Content-Lenght: la longitud del cuerpo de la respuesta en octetos
ej: conten-lenght:348

Content-type: El tipo mime de este contenido (formato del archivo)
ej: Content-type: text/html charset=utf-8

Date: La fecha y hora que se envio el mensaje
ej: date: tue, 15 nov 1994 08.12:31 gmt

Last-Modified: Fecha limite para la modificacion del objeto solicitado en formato RFC
ej: Last-modified: tue, 15 nov 1994 12:45:26

Location: Se utiliza en la redireccion, o cuando un nuevo recurso ha sido creado
ej: location: http://www,w2.org/pub/www/people.html

Server: Nombre del servidor
ej: server: Apache/1.3.27 (unix) (Red-hat/linux)

Set cookie: una cookie http
ej: set-cookie: userid=johndoe maxa-age=3600; version=1

Bueno estos conocimientos nos seran de gran ayuda a la hora de realizar a taques que explicare mas adelante tales como header injection, o subir shell mediante put

 Un saludo
Dr [F]

Fuente: Wikipedia (mi gran amigo) & http://es.kioskea.net/contents/internet/http.php3

0 comentarios: