0x4laugh CTF - 2024 Chall

Funny Cipher

Information

Screenshot 2025-01-11 093434.png

Kita dikasih cipher.txt yang isi pesannya sama kayak di deskripsi.

60_ZMZ_GBWKNREM_KRA__LQM}WEPRGQL__Q_{RWW_M_KIAGPMNMRXDLM_FMWLDQ0BOIAMNPG

Kalau kita perhatikan baik-baik dari deskripsi challenge ada kosakata yang agak unik yakni wheelbarrow dari bentukan challenge nya saya curiga ini adalah classic cipher, ya saya searching aja wheelbarrow cipher dan wheelbarrow cipher writeup. ditemukan lah writeup ini yang merujuk ke link ini. Ya kita masukkan aja ke situ. kita dapet gini :

image.png

jelas apa? yoii, jelas yang kita ambil adalah LWPMGMP{NRN_XWL_BDWO_MZA_PRIQM_QLKQMRMLMRWD_GRFZAI_NEMAQ_KEGB_MW_600_KG}. karena bentukannya kayak flag. nah disini saya curiga bahwa depannya uoftctf yang ternyata cocok dengan lwpmgmp, nah jelas ini subtitution cipher uma belum tentu caesar, jadi kita asumsi aja ini mono-alphabetic cipher ya gaes, kita bisa pakai ini

image.png

image.png

jelas yang paling atas readable, tinggal kita tulis ulang aja dan kita sesuaikan sedikit.

Enchanted Oracle

Information

Screenshot 2025-01-11 143359.png

DIberikan aes-cbc.py dan servis netcat yang isinya sebagai berikut :

from base64 import b64encode, b64decode
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

print("Welcome to the AES-CBC oracle!")
key = open("key", "rb").read()
while True:
    print("Do you want to encrypt the flag or decrypt a message?")
    print("1. Encrypt the flag")
    print("2. Decrypt a message")
    choice = input("Your choice: ")

    if choice == "1":
        cipher = AES.new(key=key, mode=AES.MODE_CBC)
        ciphertext = cipher.iv + \\
            cipher.encrypt(pad(b"random", cipher.block_size))

        print(f"{b64encode(ciphertext).decode()}")

    elif choice == "2":
        line = input().strip()
        data = b64decode(line)
        iv, ciphertext = data[:16], data[16:]

        cipher = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
        try:
            plaintext = unpad(cipher.decrypt(ciphertext),
                              cipher.block_size).decode('latin1')
        except Exception as e:
            print("Error!")
            continue

        if plaintext == "I am an authenticated admin, please give me the flag":
            print("Victory! Your flag:")
            print(open("flag.txt").read())
        else:
            print("Unknown command!")