Pular para o conteúdo
Todos os conceitos

Arquivos dentro do HTTP

Sem HTTPS, tudo que o navegador baixa passa inteiro pela rede e pode ser tirado da captura como arquivo.

O HTTP é o protocolo da web. O navegador manda uma requisição e o servidor devolve uma resposta. As duas começam com cabeçalhos em texto e, depois de uma linha em branco, vem o corpo:

GET /foto.jpg HTTP/1.1
Host: fotos.example

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 48213

(os 48213 bytes da foto)

Os cabeçalhos que mais importam para quem investiga:

Cabeçalho O que diz
Host Qual site foi pedido
Content-Type O tipo do corpo: text/html, image/png, application/zip...
Content-Length O tamanho do corpo, em bytes

Um arquivo de dezenas de KB não cabe num pacote só (cada um leva até uns 1460 bytes de dados), então o corpo vai picado em vários segmentos TCP. Procurar o arquivo direto nos bytes da captura não funciona, porque entre um pedaço e outro aparecem os cabeçalhos de cada pacote. É preciso remontar o fluxo primeiro.

a resposta HTTP, inteira HTTP/1.1 200 OK Content-Type: image/jpeg Content-Length: 48213 corpo: os 48213 bytes da foto na captura: segmentos TCP de até uns 1460 bytes de dados pedaço 1 pedaço 2 pedaço 3 … o último os cabeçalhos de cada pacote ficam entre os pedaços Export Objects remonta o fluxo foto.jpg 48213 bytes
Os 48213 bytes da foto atravessam a rede em vários segmentos TCP, com os cabeçalhos de cada pacote entre os pedaços; o Export Objects remonta o fluxo e devolve o arquivo inteiro.

O Wireshark faz isso sozinho: File > Export Objects > HTTP lista cada arquivo que passou e salva o escolhido. No terminal, tshark -r arquivo.pcap --export-objects http,pasta salva todos de uma vez. No navegador, o A-Packets (abre em nova aba) extrai os arquivos dos fluxos HTTP e mostra uma prévia.

Com HTTPS isso não funciona, porque o corpo vai cifrado. É um dos motivos para os sites usarem HTTPS em tudo, até nas imagens.

Aparece nestes desafios