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