quarta-feira, 6 de março de 2024

Fluxo HTTP (Flow)


 O diagrama acima apresenta a anatomia de uma solicitação HTTP em um nível muito alto. A primeira vez que um usuário insere a URL (inlanefreight.com) no navegador, ele envia uma solicitação a um servidor DNS (Resolução de Nome de Domínio) para resolver o domínio e obter seu IP. O servidor DNS procura o endereço IP de inlanefreight.com e o retorna. Todos os nomes de domínio precisam ser resolvidos desta forma, pois um servidor não pode se comunicar sem um endereço IP.

Nota: Nossos navegadores geralmente procuram primeiro os registros no arquivo local '/etc/hosts' e, se o domínio solicitado não existir nele, eles entrarão em contato com outros servidores DNS. Podemos usar '/etc/hosts' para adicionar registros manualmente para resolução de DNS, adicionando o IP seguido do nome de domínio.

Assim que o navegador obtém o endereço IP vinculado ao domínio solicitado, ele envia uma solicitação GET para a porta HTTP padrão (por exemplo, 80), solicitando a raiz/caminho. Em seguida, o servidor web recebe a solicitação e a processa. Por padrão, os servidores são configurados para retornar um arquivo de índice quando uma solicitação de / é recebida.

Neste caso, o conteúdo de index.html é lido e retornado pelo servidor web como uma resposta HTTP. A resposta também contém o código de status (por exemplo, 200 OK), que indica que a solicitação foi processada com sucesso. O navegador da web então renderiza o conteúdo index.html e o apresenta ao usuário.

Duas das ferramentas mais importantes para qualquer testador de penetração na web, um navegador da Web, como Chrome ou Firefox, e a ferramenta de linha de comando cURL.

cURL (URL do cliente) é uma ferramenta e biblioteca de linha de comando que oferece suporte principalmente a HTTP junto com muitos outros protocolos. Isso o torna um bom candidato para scripts e também para automação, tornando-o essencial para o envio de diversos tipos de solicitações da web a partir da linha de comando, o que é necessário para muitos tipos de testes de penetração na web.

Podemos enviar uma solicitação HTTP básica para qualquer URL usando-a como argumento para cURL, como segue:

Terminal:
venelouis@vene$ curl inlanefreight.com

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

Vemos que cURL não renderiza o código HTML/JavaScript/CSS, ao contrário de um navegador da web, mas o imprime em seu formato bruto. No entanto, como testadores de penetração, estamos interessados principalmente no contexto de solicitação e resposta, que geralmente se torna muito mais rápido e conveniente do que um navegador da web.

Também podemos usar cURL para baixar uma página ou arquivo e enviar o conteúdo para um arquivo usando o sinalizador -O. Se quisermos especificar o nome do arquivo de saída, podemos usar o sinalizador -o e especificar o nome. Caso contrário, podemos usar -O e cURL usará o nome do arquivo remoto, como segue:

Terminal:
venelouis@vene$ curl -O inlanefreight.com/index.html
venelouis@vene$ ls
index.html

Como podemos ver, a saída não foi impressa desta vez, mas sim salva em index.html.

Finalmente, podemos usar o sinalizador -h para ver quais outras opções podemos usar com cURL:

Terminal
venelouis@vene$ curl -h
Usage: curl [opções...] <url>
  -d, --data <dados> Dados HTTP POST
  -h, --help <category> Obtenha ajuda para comandos
  -i, --include Inclui cabeçalhos de resposta do protocolo na saída
  -o, --output <arquivo> Grava no arquivo em vez de stdout
  -O, --remote-name Grava a saída em um arquivo nomeado como arquivo remoto
  -s, --silent Modo silencioso
  -u, --user <usuário:senha> Usuário e senha do servidor
  -A, --user-agent <nome> Envia User-Agent <nome> para o servidor
  -v, --verbose Torna a operação mais falante

Esta não é a ajuda completa, este menu está dividido em categorias.
Use "--help categoria" para obter uma visão geral de todas as categorias.
Use o manual do usuário `man curl` ou o sinalizador "--help all" para todas as opções.
Como a mensagem acima menciona, podemos usar --help all para imprimir um menu de ajuda mais detalhado, ou --help categoria (por exemplo, -h http) para imprimir a ajuda detalhada de um sinalizador específico. Se precisarmos ler uma documentação mais detalhada, podemos usar man curl para visualizar a página de manual completa do cURL.


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

Nenhum comentário:

Postar um comentário

Postagens mais visitadas