dCTF 2021: This one is really basic
Resolvendo um desafio recursivo de base64 com um pequeno script de decodificação.
Writeup original do desafio: This one is really basic.md
A descrição do desafio era:
The answer to life, the universe, and everything.
Solução
O desafio nos deu um arquivo cipher.txt com milhares e milhares de caracteres.
Ele estava codificado recursivamente em base64. Tentamos o CyberChef e o repositório basecrack no GitHub, mas nenhum dos dois funcionou para esse arquivo.
A dica era que a string codificada começava com Vm0. Pesquisar por b64 Vm0 mostrou que, por algum motivo, se você codificar uma string em base64 vezes suficientes, ela eventualmente começa com o mesmo prefixo.
Isso significava que o desafio provavelmente não estava alternando entre encodings como base32 ou base58. Era apenas base64 repetidas vezes.
Então escrevi este pequeno script:
import base64
# original = open("cipher.txt", r)
with open("cipher.txt", "r") as f:
b64 = base64.b64decode(f.read()).strip()
for i in range(42):
b64 = base64.b64decode(b64)
print(b64)
Eventualmente o script lança uma exceção e quebra, mas isso foi suficiente. Antes de quebrar, ele imprime a flag:
dctf{Th1s_l00ks_4_lot_sm4ll3r_th4n_1t_d1d}