Diberikan akses ke sebuah service 103.185.38.163 13841 .
Terlihat bahwa fitur nomor 1 dan 3 tidak bisa dijalankan, hanya fitur nomor 2. Kemudian kami melakukan enumerasi terhadap service tersebut untuk mengetahui mode AES apa yang digunakan dengan cara mengirimkan “A” > 2 block atau 2*16.
2 blok ciphertext pertama sama, jadinya bisa kita simpulkan bahwa ini ECB. Selanjutnya tinggal brute force per byte saja untuk flagnya dengan cara melakukan validasi di block X , dengan kondisi perbandingan pada block X yaitu junk+leaked_flag+brute_char == junk+leaked_flag . Berikut solver yang kami gunakan
from pwn import *
import string
r = remote("103.185.38.163",13841)
length = 96
flag = b""
while b"}" not in flag:
r.recvuntil(b"> ")
r.sendline(b"2")
r.recvuntil(b"(in hex) = ")
payload = hex(ord('A'))[2:]*(length-1)
r.sendline(payload.encode())
check = r.recvuntil(b"(in hex): ")
block = []
resp = r.recvline().strip()
resp = bytes.fromhex(resp.decode())
for i in range(0,len(resp),16):
block.append(resp[i:i+16])
for i in string.printable[:-6]:
# print(i)
r.recvuntil(b"> ")
r.sendline(b"2")
r.recvuntil(b"(in hex) = ")
tmp_payload = payload + flag.hex() + hex(ord(i))[2:]
r.sendline(tmp_payload.encode())
check = r.recvuntil(b"(in hex): ")
resp = r.recvline().strip()
resp = bytes.fromhex(resp.decode())
block_check = []
for j in range(0,len(resp),16):
block_check.append(resp[j:j+16])
if(block[5]==block_check[5]):
flag += i.encode()
print("Flag : {}".format(flag))
length -= 1
break
Flag : COMPFEST14{iNDeP3ndeNT_bl0CK_3nCRypt1oN_wITH_fl4G_APPend3D_of_c0URse_iTs_ECB_orACLE_7a9556762e}