6 de fevereiro de 2009

HTTP Essentials

Como diz meu amigo Sp0oker: "como falar de payload para pessoas que não sabem o que é um Three Way Handshake?" Pensando nisso eu resolvi divulgar esta parte sobre http do material do treinamento de web hacking techniques. O conteúdo é o básico para conhecer como funciona o protocolo HTTP, essencial para análise de segurança em aplicações WEB.

O que é o protocolo HTTP


O HTTP (Hypertext Transfer Protocol) é um protocolo que atua na camada de aplicação de acordo com o modelo OSI e estabelece um conjunto de regras, padrão para troca de mensagens entre recursos na WEB.

O HTTP possui as seguintes versões:


  • HTTP/0.9 (Criado em 1991)

  • HTTP/1.0 (Criado em 1996)

  • HTTP/1.1 (Criado em 1999)


Não é o propósito deste tutorial explicar os detalhes de cada versão, mais detalhes podem ser obtidos na RFC 2145 (Use and Interpretation of HTTP Version Numbers).

Como trabalha o protocolo HTTP

O protocolo HTTP tem uma característica que é de fundamental entendimento para quem analisa segurança em aplicações WEB, é o fato dele ser stateless, isso significa que ele não mantém uma conexão, ele sempre conecta, envia uma mensagem, recebe uma resposta e desconecta, como ilustra a figura 1.

Figura 1

Por este motivo é utilizado recursos extras como cookie e/ou sessões para garantir a persistência dos dados e informações que são disponibilizados em aplicações.

A figura 2 mostra a visão do protocolo HTTP e seus dados frente a camada TCP/IP, na figura 3 podemos identificar como funciona a comunicação em uma rede de dados e na figura 4 um exemplo de um header (cabeçalho) HTTP.

Figura 2


Figura 3 


Figura 4


Quando estamos falando de aplicações WEB geralmente estamos sempre fazendo referência a URI (Uniform Resource Identifiers) como http://wagnerelias.com, técnicamente a URI serve apenas para fazer referência a um determinado domínio, quando precisamos acessar recursos WEB via browser utilizamos a URL(Uniform Resource Locators). Para conseguir identificar e explorar determinados recursos de uma aplicação é essencial que se entenda exatamente o que cada parte de uma URL representa, na figura 5 temos uma descrição de cada parte de uma URL.


Figura 5


Já sabemos o que é um protocolo HTTP, quais as suas principais características, mas é preciso entender quais são seus principais métodos e códigos de status, na figura 6 temos um representação de uma requisição do browser e uma resposta do servidor.

Figura 6

Métodos HTTP

Os métodos, também conhecidos como verbos HTTP, são os seguintes:

  • GET: é o método mais comum e tem como característica enviar seus parâmetros direto na URI

  • POST: é um método que envia os dados no corpo do header e possui características mais seguras para se enviar requisições ao servidor

  • HEAD: semelhante ao GET mas não obtem o recurso, apenas meta dados

  • PUT: envia um recurso para o servidor

  • DELETE: exclui um recurso do servidor

  • TRACE: através da resposta obtida por uma requisição trace é possível saber o que foi alterado na requisição por um servidor intermediário

  • OPTIONS: consulta os métodos HTTP que o servidor aceita

  • CONNECT: usado em soluções de proxy


Os métodos são informados no momento que é feito uma requisição HTTP ao servidor de aplicação.

Código de Status do HTTP

Os códigos de status estão classificados em cinco tipos.

  • 1xx: Informação

  • 2xx: Sucesso

  • 3xx: Redirecionamento

  • 4xx: Erro no cliente

  • 5xx: Erro no server


Uma lista completa de códigos de status pode ser obtida aqui. Sempre que uma requisição usando um método HTTP é feita ao server é recebido uma resposta com um status code.

O HTTP também possui recursos de autenticação nativos que pretendo falar mais sobre eles em um post futuro, os dois modelos são:

  • Autenticação Básica

  • Autenticação Digest


Eu costumo usar muito os recursos do firefox para analisar as requisições e respostas HTTP, os principais addon são estes:

Live HTTP Headers







Além dos addon do firefox eu estou usando uma ferramenta desenvolvida pelo tiger team 514 que faz várias requisições usando métodos diferentes e dando o status code de cada uma.

HTTP Methods  
Este post foi uma introdução sobre o funcionamento e principais características do http. As referências para este tutorial foram os livros: Whiley - HTTP Essentials Protocols for Secure, Scaleable Web Sites; O'Reilly - HTTP Definitive Guide; Sams - HTTP Developer's Handbook.

8 comentários:

rafael motta disse...

Muito bom o post Wagner. mesmo pra quem já conhece aborda vários detalhes que as vezes até passam despercebidos.
eu que ultimamente não tenho mexido mais com esses detalhes de http/servidores foi bom para relembrar algumas coisas.

abraços

Elias Wagner disse...

Obrigado Rafael.

Introdução ao protocolo HTTP disse...

[...] por Wagner Elias (weliasΘconviso·com·br) - referência [...]

Walter Cruz disse...

Gostei do texto, direto ao ponto, indo além do básico. Abraço!

Daniel Moro disse...

Parabéns pelo post!

Objetivo e muito bem escrito.


Com certeza, a comunidade agradece!

[]s

Felipe Gasparelo disse...

Muito bom...parabens.. muito didático e esclarecedor!!

Chris Benseler disse...

Cara, teu blog é mto bacana! Dificilmente encontramos tanto material de qualidade sobre segurança (e afins) no ambiente web! Já tá add nos meus feeds!
Vejo que tenho muita coisa ainda a aprender nessa área!

Abraços, e valeu pelo comentário lá no meu!

Elias Wagner disse...

Obrigado Chris!

Espero escrever cada vez mais. :)

Abs.