Publicações

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}