Para onde o link realmente leva: descascando uma URL de phishing rastreada
O desafio
Uma enfermeira da Meridian Health encaminhou um aviso de holerite para o suporte porque o texto soava estranho. O link aponta para um rastreador de cliques que o time de marketing realmente usa, então o gateway de e-mail deixou passar e a checagem de reputação de URL voltou limpa. Esse é o truque inteiro: o rastreador é legítimo, e o destino está estacionado em um dos parâmetros dele. Quem montou a mensagem não queria esse parâmetro legível de imediato, então o embrulhou em três camadas antes de colar. Você tem o valor do parâmetro u e uma bancada. Descasque, leia o endereço em que o clique teria caído, e envie o host.
O que você vai aprender
- Identificar percent-encoding pelos caracteres no início de um valor
- Reconhecer base64 invertida pela posição do padding
- Ordenar as operações de decodificação da camada mais externa para dentro
- Usar a falha de um decodificador como evidência sobre a camada abaixo dele
- Explicar por que um redirecionador confiável lava um destino malicioso
Habilidades testadas
Pré-requisitos
- Como são base64 e percent-encoding
- As partes de uma URL
Como funciona
A ofuscação em camadas só intimida até você parar de ler o meio da string. A informação está nas pontas. Esse valor começa com %3D e traz um %2F mais adiante, e sinais de porcentagem seguidos por dois dígitos hexadecimais significam exatamente uma coisa, então a camada externa é percent-encoding e URL Decode é o primeiro passo.
O resultado é =AXasNXeh.... O conjunto de caracteres é o alfabeto base64 e o comprimento está certo, então o próximo clique óbvio é From Base64, e ele falha. Essa falha é o evento mais útil do exercício. O padding do base64 é definido para ficar no fim da string, então um sinal de igual no início não é um valor quebrado, é um valor corretamente formado que foi invertido.
Reverse produz aHR0cHM6Ly9... terminando em um único =. O prefixo aHR0cHM6Ly9 vale a pena memorizar: é a codificação base64 de https://, e ele aparece no início de toda URL embrulhada em base64 que você vai triar.
O destino decodificado é https://meridian-hr-verify.example/sso/renew?u=t.okonkwo&ref=payslip. O host disfarçado é o payload; o parâmetro u pré-preenchido é o acabamento, deixando a página falsa de login cumprimentar a destinatária pelo nome antes mesmo de ela digitar qualquer coisa.
A parte que vale levar dessa lição é a entrega. O gateway inspecionou um domínio de fornecedor genuíno com reputação genuína, e nenhum serviço de reputação avalia a query string pendurada nele. Qualquer endpoint que redirecione para um destino fornecido pelo usuário é um serviço de lavagem, e é por isso que um redirecionamento aberto vale a pena reportar por si só.
Erros comuns
- Tentar From Base64 primeiro e concluir que o valor está corrompido. Ele está intacto; o percent-encoding ainda está nele e está de trás para frente.
- Inverter antes de decodificar a URL. Isso quebra
%3Dem caracteres que não significam mais nada. - Responder com o domínio do rastreador. O rastreador é um fornecedor real e não é o destino.
- Enviar a URL inteira quando a pergunta pede o host. Leia o rótulo da resposta antes de digitar.
- Recorrer a ROT ou Atbash. Nada aqui é uma cifra de substituição de letras; a paleta inclui iscas.
Como se proteger
O gateway de e-mail não errou em relação ao rastreador. O controle precisa ir além dele.
- Reescreva e detone os links no momento do clique em vez de pontuá-los na entrega, para que o salto final seja o que é avaliado.
- Siga as cadeias de redirecionamento no gateway e avalie a última URL, não a primeira.
- Peça ao fornecedor do rastreador para restringir os destinos a domínios registrados. Um redirecionador que aceita qualquer destino é um redirecionamento aberto com contrato anexado.
- Trate domínios disfarçados recém-registrados como uma detecção:
meridian-hr-verify.exampleé uma correspondência por distância de string com uma marca que você possui e deveria gerar alerta no registro. - Login resistente a phishing vence a decodificação. Uma passkey não vai autenticar em um host que não é o real, não importa onde o usuário clique.