Duas Camadas, Um Flag: Decodificando Base64 e Depois ROT13
O desafio
Este flag está envolto em duas camadas de codificação, não uma. Decodifique primeiro a camada externa, observe bem o que sai, depois decodifique a camada interna para concluir. Envie o flag assim que ele estiver legível.
O que você vai aprender
- Reconhecer o base64 como a camada externa mesmo sem o padding visível
- Identificar um deslocamento ROT13 na saída do base64 pelo formato intacto e letras erradas
- Remover transformações encadeadas uma camada de cada vez, confirmando o progresso em cada etapa
- Decodificar uma cadeia base64 seguida de ROT13 na ordem correta
- Entender por que empilhar codificações não acrescenta confidencialidade
Habilidades testadas
Pré-requisitos
- Familiaridade em reconhecer base64 pelo seu conjunto de caracteres
- Saber que um deslocamento fixo de letras é chamado de ROT13 ou cifra de César
Como funciona
Ofuscação real costuma empilhar mais de uma transformação, então remover as camadas de um valor significa trabalhar de fora para dentro, uma camada de cada vez. A habilidade está em ler o formato de cada camada para decidir qual botão apertar em seguida, em vez de adivinhar. Este desafio envolve um flag em duas camadas: base64 por fora e ROT13 por dentro.
A camada externa é base64. Strings em base64 usam letras maiúsculas, minúsculas e dígitos, e os comprimentos aqui acabam ficando corretos mesmo sem o padding visível =, o que pode acontecer quando o comprimento dos dados já é um múltiplo que o base64 encaixa perfeitamente. Ao decodificar, você ainda não obtém palavras legíveis. Você obtém uma string cujo formato de flag está intacto - o prefixo, as chaves e os sublinhados estão todos nos lugares normais - mas cujas letras estão claramente erradas, cada uma deslocada por uma quantia fixa. Esse padrão de estrutura intacta com letras deslocadas é a assinatura do ROT13.
Toque em ROT13 nessa string intermediária e o deslocamento se reverte, transformando as letras embaralhadas de volta em palavras normais, de forma que o flag completo fique legível. A ordem importa: base64 primeiro, porque é o invólucro externo, ROT13 depois, porque é o interno. Nenhuma das duas etapas usa uma chave, então as duas camadas juntas ainda não fornecem nenhum sigilo - elas apenas fazem você apertar dois botões em vez de um. Os botões de hex, URL e reverso são distrações cujos formatos não correspondem à string em nenhuma das etapas.
Erros comuns
- Parar depois de uma camada. A saída do base64 ainda está embaralhada, o que pode dar a impressão de que a decodificação foi feita errada. Reconheça o deslocamento de letras e remova a segunda camada.
- Decodificar na ordem errada. O ROT13 só funciona sobre o texto legível interno, então o base64 precisa vir primeiro para expô-lo.
- Reaplicar uma transformação sobre sua própria saída. Decodificar base64 duas vezes ou aplicar ROT13 duas vezes desfaz seu progresso. Aplique cada camada exatamente uma vez.
- Achar que duas camadas significam criptografia. Empilhar codificações sem chave adiciona cliques, não confidencialidade.
Como se proteger
A lição defensiva é que empilhar codificações não é um controle de segurança, não importa quantas camadas existam. Se um valor precisa ser confidencial, ele exige criptografia de verdade com uma chave secreta gerenciada, ou não deveria ser exposto de forma alguma. Trate qualquer cadeia de camadas base64, hex, ROT13 ou URL como uma embalagem cosmética que qualquer revisor consegue remover.
- Nunca dependa de codificações empilhadas para manter em sigilo segredos como tokens, senhas ou dados pessoais.
- Use criptografia autenticada com uma chave gerenciada quando os dados realmente precisarem de confidencialidade.
- Ao revisar artefatos, remova todas as camadas encontradas até chegar ao texto puro e confirme que nada sensível está exposto ali.
- Lembre-se de que o número de camadas de codificação não muda a falta de uma chave - mais camadas não significa mais segurança.