Capture the Flag

Capture the Flag

by invalid

Ini adalah writeup soal latihan Cyber Talents untuk kategori cryptography dengan level mudah (easy). Berikut ini adalah petunjuk pada soal tersebut:

We got this letters and numbers and don't understand them. Can you? R[corrupted]BR3tCNDUzXzYxWDdZXzRSfQ==

Bisa terlihat bahwa soal tersebut berupa string yang di-encode menggunakan Base64, namun tidak lengkap (corrupted). Selanjutnya, kita akan mencoba mencari berapa karakter yang tidak ada dari string tersebut. Salah satu caranya adalah menggunakan perintah/aplikasi base64 pada terminal. Atau bisa juga menggunakan cara lain, misalnya menggunakan modul yang terdapat pada scripting seperti php, python dan lain-lain. Jika menggunakan perintah base64 pada terminal, lakukan seperti ini:

$ echo -n 'RBR3tCNDUzXzYxWDdZXzRSfQ==' | base64 -d
Dw#CS5cuE'base64: invalid input

Bisa terlihat, jika bagian [corrupted] dihilangkan, maka hasilnya akan invalid. Lanjutkan dengan mengganti bagian [corrupted] tersebut dengan karakter yang valid untuk encode base64, misalnya huruf A.

$ echo -n 'RABR3tCNDUzXzYxWDdZXzRSfQ==' | base64 -d
Wbase64: invalid input

Hasilnya masih invalid. Tambahkan lagi karakter, sehingga menjadi AA:

$ echo -n 'RAABR3tCNDUzXzYxWDdZXzRSfQ==' | base64 -d
DG{B453_61X7Y_4R}

Nah, sekarang sudah bisa terlihat. Kemungkinan flagnya adalah {B453_61X7Y_4R}. Namun agar lebih jelas, kita akan membuat skrip untuk mencari flag yang benar. Berikut ini adalah scriptnya:

#!/usr/bin/env python
import sys
import base64

str_base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

for a in str_base64:
    for b in str_base64:
        try:
            str_flag = base64.b64decode("R" + a + b + "BR3tCNDUzXzYxWDdZXzRSfQ==")
            if ("flag" in str_flag) or ("FLAG" in str_flag):
                print "Found: {}".format(str_flag)
                sys.exit(0)
        except:
            continue

Simpan potongan kode di atas sebagai cek.py atau beri nama sesuai keinginan. Set sebagai executable dengan perintah chmod +x cek.py lalu jalankan atau bisa juga dijalankan dengan perintah python cek.py seperti ini:

$ chmod +x cek.py
$ ./cek.py
Found: FLAG{B453_61X7Y_4R}

$ python cek.py
Found: FLAG{B453_61X7Y_4R}

Bisa terlihat bahwa flag yang benar adalah FLAG{B453_61X7Y_4R}. Sekian tutorial singkat kali ini, semoga bermanfaat. Terima kasih kepada Tuhan Yang Maha Esa, dan Anda yang telah membaca tutorial ini.