Protocolo HTTP
Posteado: domingo, 18 de julio de 2010 by Franco Di En Secciones: Http, Papers, Protocolos
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)
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
