Berikut adalah deskrip soal :

Coba connect ke server dengan netcat, dan berikut outputnya. Encrypted flag diencode dengan hex :

Kita tahu bahwa format flag adalah flag\{[0-9a-f]{32}\}
. Kalau kita input flag{, maka 5 bytes pertama dari ciphertext sama dengan 5 bytes pertama dari encrypted flag.

Langkah selanjutnya cukup trivial, kita tinggal brute force setiap karakter dari ciphertext, apakah sama dengan flag. Berikut adalah solver scriptnya :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
from pwn import * import string con = remote('challenge.ctf.games', 31921) con.recvline() f = con.recvline().decode().strip() flag = "" done = False count = 0 charset = "flag{}0123456789abcde" while True: for s in charset : con.sendlineafter('> ', s.encode()) con.recvline() c = con.recvline().decode().strip() if c[count : count+2] == f[count : count+2]: flag = flag + s count += 2 if len(flag) == 38 : done = True break if done : break print(flag) |
Jalankan script diatas dan saya berhasil mendapatkan flagnya :

Flag : flag{9276cdb76a3dd6b1f523209cd9c0a11b}