HTTP Essentials
| Deixe um comentário e acompanhe a discussão assinando a feed deste ou de todos os posts e comentários. |
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.

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

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.

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:
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.

Comments(8)



rafael motta on February 7th, 2009
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 on February 9th, 2009
Obrigado Rafael.
Walter Cruz on February 10th, 2009
Gostei do texto, direto ao ponto, indo além do básico. Abraço!
Daniel Moro on February 10th, 2009
Parabéns pelo post!
Objetivo e muito bem escrito.
Com certeza, a comunidade agradece!
[]s
Felipe Gasparelo on February 10th, 2009
Muito bom…parabens.. muito didático e esclarecedor!!
Chris Benseler on March 31st, 2009
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 on April 2nd, 2009
Obrigado Chris!
Espero escrever cada vez mais.
Abs.
Introdução ao protocolo HTTP on February 10th, 2009
[...] por Wagner Elias (weliasΘconviso·com·br) – referência [...]