quarta-feira, 20 de março de 2024

Headers (Cabeçalhos) HTTP

Vimos exemplos de solicitações HTTP e cabeçalhos de resposta na seção anterior. Esses cabeçalhos HTTP passam informações entre o cliente e o servidor. Alguns cabeçalhos são usados apenas com solicitações ou respostas, enquanto outros cabeçalhos gerais são comuns a ambos.

Os cabeçalhos podem ter um ou vários valores, anexados após o nome do cabeçalho e separados por dois pontos. Podemos dividir os cabeçalhos nas seguintes categorias:

  1. General Headers (Cabeçalhos Gerais)
  2. Entity Headers (Cabeçalhos de Entidade)
  3. Request Headers (Cabeçalhos de Solicitação)
  4. Response Headers (Cabeçalhos de Resposta)
  5. Security Headers (Cabeçalhos de Segurança)

Vamos discutir cada uma dessas categorias.

General Headers
Cabeçalhos gerais são usados em solicitações e respostas HTTP. Eles são contextuais e são usados para descrever a mensagem ao invés do seu conteúdo.

  • Header: Date
  • Exemplo: Date: Wed, 16 Feb 2022 10:38:44 GMT
  • Descrição: Contém a data e a hora em que a mensagem foi originada. É preferível converter a hora para o fuso horário UTC padrão.
  • Header: Connection
  • Exemplo: Connection: close
  • Descrição: Dita se a conexão de rede atual deve permanecer ativa após a conclusão da solicitação. Dois valores comumente usados para este cabeçalho são close e keep-alive. O valor close do cliente ou do servidor significa que eles gostariam de encerrar a conexão, enquanto o cabeçalho keep-alive indica que a conexão deve permanecer aberta para receber mais dados e entradas. 

Entity Headers
Semelhante aos cabeçalhos gerais, os cabeçalhos de entidade podem ser comuns à solicitação e à resposta. Esses cabeçalhos são usados para descrever o conteúdo (entidade) transferido por uma mensagem. Eles geralmente são encontrados em respostas e solicitações POST ou PUT.

  • Header: Content-Type
  • Example: Content-Type: text/html
  • Descrição: Usado para descrever o tipo de recurso que está sendo transferido. O valor é adicionado automaticamente pelos navegadores do lado do cliente e retornado na resposta do servidor. O campo charset indica o padrão de codificação, como UTF-8.
  • Header: Media-Type
  • Example: Media-Type: application/pdf
  • Descrição: O media-type é semelhante ao Content-Type e descreve os dados que estão sendo transferidos. Este cabeçalho pode desempenhar um papel crucial em fazer com que o servidor interprete nossa entrada. O campo charset também pode ser usado com este cabeçalho.
  • Header: Boundary (Limite)
  • Exemplo: boundary="b4e4fbd93540"
  • Descrição: Atua como um marcador para separar o conteúdo, quando há mais de um na mesma mensagem. Por exemplo, nos dados de um formulário, esse limite é usado como --b4e4fbd93540 para separar diferentes partes do formulário.
  • Header: Content-Length (comprimento do conteúdo)
  • Exemplo: Content-Length: 385
  • Descrição: Contém o tamanho da entidade que está sendo passada. Este cabeçalho é necessário porque o servidor o utiliza para ler dados do corpo da mensagem e é gerado automaticamente pelo navegador e por ferramentas como cURL.
  • Header: Content-Encoding
  • Example: Content-Encoding: gzip
  • Descrição: Os dados podem passar por múltiplas transformações antes de serem transmitidos. Por exemplo, grandes quantidades de dados podem ser compactadas para reduzir o tamanho da mensagem. O tipo de codificação usada deve ser especificado usando o cabeçalho Content-Encoding.

Request Headers
O cliente envia cabeçalhos de solicitação em uma transação HTTP. Esses cabeçalhos são usados em uma solicitação HTTP e não estão relacionados ao conteúdo da mensagem. Os cabeçalhos a seguir são comumente vistos em solicitações HTTP.

  • Header: Host
  • Example: Host: www.inlanefreight.com
  • Descrição: Usado para especificar o host que está sendo consultado para o recurso. Pode ser um nome de domínio ou um endereço IP. Os servidores HTTP podem ser configurados para hospedar diferentes sites, que são revelados com base no nome do host. Isso torna o cabeçalho do host um alvo de enumeração importante, pois pode indicar a existência de outros hosts no servidor de destino.
  • Header: User-Agent
  • Example: User-Agent: curl/7.77.0
  • Descrição: O cabeçalho User-Agent é usado para descrever o cliente que solicita recursos. Este cabeçalho pode revelar muito sobre o cliente, como o navegador, sua versão e o sistema operacional.
  • Header: Referer
  • Example: Referer: http://www.inlanefreight.com/   
  • Descrição: Indica de onde vem a solicitação atual. Por exemplo, clicar em um link nos resultados de pesquisa do Google tornaria https://google.com o referenciador. Confiar neste cabeçalho pode ser perigoso, pois pode ser facilmente manipulado, levando a consequências indesejadas.
  • Header: Accept
  • Example: Accept: */*
  • Descrição: O cabeçalho Aceitar descreve quais tipos de mídia o cliente pode entender. Ele pode conter vários tipos de mídia separados por vírgulas. O valor */* significa que todos os tipos de mídia são aceitos.
  • Header: Cookie
  • Example: Cookie: PHPSESSID=b4e4fbd93540
  • Descrição: Contém pares cookie-valor no formato nome=valor. Um cookie é um dado armazenado no lado do cliente e no servidor, que atua como um identificador. Estes são passados ao servidor por solicitação, mantendo assim o acesso do cliente. Os cookies também podem servir para outros fins, como salvar preferências do usuário ou rastrear sessões. Pode haver vários cookies em um único cabeçalho separados por ponto e vírgula.
  • Header: Authorization
  • Example: Authorization: BASIC cGFzc3dvcmQK
  • Descrição: Outro método para o servidor identificar clientes. Após a autenticação bem-sucedida, o servidor retorna um token exclusivo para o cliente. Ao contrário dos cookies, os tokens são armazenados apenas no lado do cliente e recuperados pelo servidor por solicitação. Existem vários tipos de autenticação com base no servidor web e no tipo de aplicativo usado.

Uma lista completa de cabeçalhos de solicitação e seu uso pode ser encontrada aqui.

Response Headers
Os cabeçalhos de resposta podem ser usados em uma resposta HTTP e não estão relacionados ao conteúdo. Certos cabeçalhos de resposta, como Idade, Local e Servidor, são usados para fornecer mais contexto sobre a resposta. Os cabeçalhos a seguir são comumente vistos em respostas HTTP.

  • Header: Server
  • Example: Server: Apache/2.2.14 (Win32)   
  • Descrição: Contém informações sobre o servidor HTTP que processou a solicitação. Ele pode ser usado para obter informações sobre o servidor, como sua versão, e enumerá-las posteriormente.
  • Header: Set-Cookie
  • Example: Set-Cookie: PHPSESSID=b4e4fbd93540   
  • Descrição: Contém os cookies necessários para identificação do cliente. Os navegadores analisam os cookies e os armazenam para solicitações futuras. Este cabeçalho segue o mesmo formato do cabeçalho de solicitação de cookie.
  • Header: WWW-Authenticate
  • Example: WWW-Authenticate: BASIC realm="localhost"   
  • Descrição: Notifica o cliente sobre o tipo de autenticação necessária para acessar o recurso solicitado.

Security Headers
Finalmente, temos os cabeçalhos de segurança. Com o aumento da variedade de navegadores e ataques baseados na web, foi necessário definir determinados cabeçalhos que aumentassem a segurança. Os cabeçalhos de segurança HTTP são uma classe de cabeçalhos de resposta usados para especificar certas regras e políticas a serem seguidas pelo navegador ao acessar o site.

Header: Content-Security-Policy

Example: Content-Security-Policy: script-src 'self'

Descrição: Dita a política do site em relação a recursos injetados externamente. Pode ser código JavaScript, bem como recursos de script. Este cabeçalho instrui o navegador a aceitar recursos apenas de determinados domínios confiáveis, evitando assim ataques como Cross-site scripting (XSS).

Header: Strict-Transport-Security

Example: Strict-Transport-Security: max-age=31536000

Descrição: Impede que o navegador acesse o site através do protocolo HTTP de texto simples e força toda a comunicação a ser transportada através do protocolo HTTPS seguro. Isso evita que invasores detectem o tráfego da Web e acessem informações protegidas, como senhas ou outros dados confidenciais.

Header: Referrer-Policy

Example: Referrer-Policy: origin

Descrição: Dita se o navegador deve incluir o valor especificado através do cabeçalho Referer ou não. Pode ajudar a evitar a divulgação de URLs e informações confidenciais durante a navegação no site.

Nota: Esta seção menciona apenas um pequeno subconjunto de cabeçalhos HTTP comumente vistos. Existem muitos outros cabeçalhos contextuais que podem ser usados em comunicações HTTP. Também é possível que os aplicativos definam cabeçalhos personalizados com base em seus requisitos. Uma lista completa de cabeçalhos HTTP padrão pode ser encontrada aqui.

cURL
Na seção anterior, vimos como usar a flag -v com cURL nos mostra todos os detalhes da solicitação e resposta HTTP. Se estivéssemos interessados apenas em ver os cabeçalhos de resposta, poderíamos usar a flag -I para enviar uma solicitação HEAD e exibir apenas os cabeçalhos de resposta. Além disso, podemos usar a flag -i para exibir os cabeçalhos e o corpo da resposta (por exemplo, código HTML). A diferença entre os dois é que -I envia uma solicitação HEAD (como veremos na próxima seção), enquanto -i envia qualquer solicitação que especificarmos e também imprime os cabeçalhos.

O comando a seguir mostra um exemplo de saída do uso do sinalizador -I: 

Terminal:

venelouis@vene$ curl -I https://www.inlanefreight.com

Host: www.inlanefreight.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
Cookie: cookie1=298zf09hf012fh2; cookie2=u32t4o3tb3gg4
Accept: text/plain
Referer: https://www.inlanefreight.com/
Authorization: BASIC cGFzc3dvcmQK

Date: Sun, 06 Aug 2020 08:49:37 GMT
Connection: keep-alive
Content-Length: 26012
Content-Type: text/html; charset=ISO-8859-4
Content-Encoding: gzip
Server: Apache/2.2.14 (Win32)
Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
WWW-Authenticate: BASIC realm="localhost"
Content-Security-Policy: script-src 'self'
Strict-Transport-Security: max-age=31536000
Referrer-Policy: origin

Exercício: Tente passar por todos os cabeçalhos acima e veja se você consegue se lembrar do uso de cada um deles.

Além de visualizar cabeçalhos, cURL também nos permite definir cabeçalhos de solicitação com o sinalizador -H, como veremos em uma seção posterior. Alguns cabeçalhos, como os cabeçalhos User-Agent ou Cookie, têm seus próprios sinalizadores. Por exemplo, podemos usar -A para definir nosso User-Agent, como segue:

Terminal:

venelouis@hvene$ curl https://www.inlanefreight.com -A 'Mozilla/5.0'

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
...SNIP...

Exercício: Tente usar os sinalizadores -I ou -v com o exemplo acima, para garantir que alteramos nosso User-Agent com o sinalizador -A.

Browser DevTools (Ferramentas de desenvolvimento do navegador)
Finalmente, vamos ver como podemos visualizar os cabeçalhos HTTP usando as ferramentas de desenvolvimento do navegador. Assim como fizemos na seção anterior, podemos ir até a aba Rede para visualizar as diferentes solicitações feitas pela página. Podemos clicar em qualquer uma das solicitações para ver seus detalhes:

devtools_network_requests_details

 

Na primeira guia Cabeçalhos, vemos os cabeçalhos de solicitação HTTP e de resposta HTTP. As devtools organizam automaticamente os cabeçalhos em seções, mas podemos clicar no botão Raw para visualizar seus detalhes em formato bruto. Além disso, podemos verificar a aba Cookies para ver quaisquer cookies usados pela solicitação, conforme discutido em uma próxima seção.

cURL

CommandDescription
 curl -hcURL help menu
 curl inlanefreight.comBasic GET request
 curl -s -O inlanefreight.com/index.htmlDownload file
 curl -k https://inlanefreight.comSkip HTTPS (SSL) certificate validation
 curl inlanefreight.com -vPrint full HTTP request/response details
 curl -I https://www.inlanefreight.comSend HEAD request (only prints response headers)
 curl -i https://www.inlanefreight.comPrint response headers and response body
 curl https://www.inlanefreight.com -A 'Mozilla/5.0'Set User-Agent header
 curl -u admin:admin http://<SERVER_IP>:<PORT>/Set HTTP basic authorization credentials
 curl http://admin:admin@<SERVER_IP>:<PORT>/Pass HTTP basic authorization credentials in the URL
 curl -H 'Authorization: Basic YWRtaW46YWRtaW4=' http://<SERVER_IP>:<PORT>/Set request header
 curl 'http://<SERVER_IP>:<PORT>/search.php?search=le'Pass GET parameters
 curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/Send POST request with POST data
 curl -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/Set request cookies
 curl -X POST -d '{"search":"london"}' -H 'Content-Type: application/json' http://<SERVER_IP>:<PORT>/search.phpSend POST request with JSON data

APIs

CommandDescription
 curl http://<SERVER_IP>:<PORT>/api.php/city/londonRead entry
 curl -s http://<SERVER_IP>:<PORT>/api.php/city/ | jqRead all entries
 curl -X POST http://<SERVER_IP>:<PORT>/api.php/city/ -d '{"city_name":"HTB_City", "country_name":"HTB"}' -H 'Content-Type: application/json'Create (add) entry
 curl -X PUT http://<SERVER_IP>:<PORT>/api.php/city/london -d '{"city_name":"New_HTB_City", "country_name":"HTB"}' -H 'Content-Type: application/json'Update (modify) entry
 curl -X DELETE http://<SERVER_IP>:<PORT>/api.php/city/New_HTB_CityDelete entry

Browser DevTools

ShortcutDescription
 [CTRL+SHIFT+I] or [F12]Show devtools
 [CTRL+SHIFT+E]Show Network tab
 [CTRL+SHIFT+K]Show Console tab

academy.hackthebox.com/module/35/section/223 (em: 20 mar 2024)

Responda a pergunta abaixo:

Alvo: (x)

O servidor acima carrega a flag após o carregamento da página. Use a guia Rede nas ferramentas de desenvolvimento do navegador para ver quais solicitações são feitas pela página e encontrar a solicitação no sinalizador.

Procure uma solicitação para um arquivo chamado 'flag_...'. Caso não encontre, atualize a página e monitore novas solicitações.

HTB{p493_r3qu3$t$_m0n!t0r}


Nenhum comentário:

Postar um comentário

Postagens mais visitadas