Requisições HTTP e HTTPS
O que é HTTP?
O HTTP (HyperText Transfer Protocol) é o protocolo de comunicação utilizado para transferir dados na web. Toda vez que você acessa um site, seu navegador envia uma requisição HTTP ao servidor, que responde com o conteúdo solicitado (HTML, imagens, JSON, etc.).
O HTTP funciona no modelo cliente-servidor:
- O cliente (navegador,
curl, script Python) envia uma requisição - O servidor processa e retorna uma resposta
Estrutura de uma Requisição HTTP
Uma requisição HTTP é composta por:
MÉTODO /caminho HTTP/1.1
Host: exemplo.com
User-Agent: Mozilla/5.0
Accept: text/html
Content-Type: application/json
{ "dados": "do corpo da requisição" }
Componentes
| Componente | Descrição |
|---|---|
| Método | Ação desejada (GET, POST, PUT, DELETE, etc.) |
| Caminho | Recurso no servidor (/api/users, /login, /index.html) |
| Headers | Metadados da requisição (tipo de conteúdo, autenticação, etc.) |
| Body | Corpo da requisição (presente em POST, PUT — dados enviados) |
Métodos HTTP (Verbos)
Os principais métodos HTTP e seus usos:
| Método | Descrição | Exemplo de Uso |
|---|---|---|
GET |
Buscar/ler dados | Acessar uma página, listar itens |
POST |
Enviar/criar dados | Formulário de login, criar conta |
PUT |
Atualizar dados (substitui o recurso) | Atualizar perfil do usuário |
DELETE |
Remover dados | Deletar uma postagem |
PATCH |
Atualizar dados parcialmente | Alterar apenas o e-mail do usuário |
HEAD |
Igual ao GET, mas retorna apenas os headers | Verificar se recurso existe |
OPTIONS |
Verifica métodos permitidos pelo servidor | Pré-flight de requisições CORS |
Status Codes (Códigos de Resposta)
O servidor responde com um código numérico indicando o resultado:
| Faixa | Categoria | Exemplos |
|---|---|---|
1xx |
Informacional | 100 Continue |
2xx |
Sucesso | 200 OK, 201 Created, 204 No Content |
3xx |
Redirecionamento | 301 Moved Permanently, 302 Found |
4xx |
Erro do Cliente | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
5xx |
Erro do Servidor | 500 Internal Server Error, 502 Bad Gateway |
Dica de Red Team: Em pentesting, status codes como
401,403e500podem revelar informações valiosas sobre a aplicação e suas proteções.
Estrutura de uma Resposta HTTP
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Set-Cookie: session=abc123; HttpOnly
Content-Length: 1234
<html>
<body>Conteúdo da página</body>
</html>
O que é HTTPS?
O HTTPS (HTTP Secure) é a versão segura do HTTP. Ele utiliza TLS (Transport Layer Security) para criptografar a comunicação entre cliente e servidor.
Por que HTTPS importa?
- Sem HTTPS (HTTP puro): os dados trafegam em texto claro — qualquer pessoa na mesma rede pode interceptar senhas, cookies e dados sensíveis.
- Com HTTPS: os dados são criptografados de ponta a ponta.
Como funciona o TLS Handshake
O processo de estabelecimento de conexão segura:
- Client Hello — Cliente envia versões TLS suportadas e cipher suites
- Server Hello — Servidor escolhe a cipher suite e envia seu certificado digital
- Verificação — Cliente valida o certificado (cadeia de confiança, validade, domínio)
- Troca de chaves — Ambos geram uma chave de sessão simétrica
- Conexão segura — Toda comunicação passa a ser criptografada
Em Red Team, é possível realizar ataques Man-in-the-Middle (MitM) quando o cliente não valida corretamente os certificados ou quando o atacante consegue instalar um certificado falso no dispositivo da vítima.
Utilizando o curl
O curl é uma ferramenta de linha de comando para enviar requisições HTTP diretamente do terminal. É muito utilizado em pentesting, automação e debugging de APIs.
Sintaxe Básica
Opções Mais Utilizadas
| Opção | Descrição |
|---|---|
-v |
Modo verbose — mostra headers de requisição e resposta |
-X <MÉTODO> |
Define o método HTTP (POST, PUT, DELETE, etc.) |
-H |
Adiciona um header customizado |
-d |
Envia dados no body da requisição |
-I |
Retorna apenas os headers da resposta (HEAD) |
-L |
Segue redirecionamentos (301, 302) |
-b |
Envia cookies junto com a requisição |
-k |
Ignora erros de certificado SSL (útil em labs) |
-o <arquivo> |
Salva a resposta em um arquivo |
-s |
Modo silencioso (sem barra de progresso) |
Exemplos
GET simples (com verbose)
O flag -v mostra o handshake TLS, os headers enviados e os headers de resposta — muito útil para análise.
POST com JSON
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"usuario": "admin", "senha": "123456"}'
POST com dados de formulário
Ver apenas os headers da resposta
Útil para identificar o servidor (Server), tecnologias (X-Powered-By) e configurações de segurança.
Seguir redirecionamentos
Enviar cookies manualmente
Ignorar verificação de certificado SSL
Atenção: o flag
-kignora erros de certificado. Use apenas em ambientes controlados (labs, CTFs).
Simular um User-Agent diferente
Salvar resposta em arquivo
Relação com Segurança Ofensiva
Entender HTTP/HTTPS é fundamental para praticamente todas as técnicas de Red Team:
| Técnica | Como HTTP se aplica |
|---|---|
| SQL Injection | Injeção via parâmetros GET/POST |
| XSS | Payload inserido em parâmetros refletidos na resposta |
| CSRF | Forjar requisições autenticadas usando cookies da vítima |
| Directory Bruteforce | Enviar milhares de requisições GET testando caminhos |
| API Exploitation | Manipular verbos HTTP, headers e body para abusar de APIs |