Kategori
Krypto
Beskrivning
Hackarna verkar använda en kryptotjänst för att kommunicera med varanda. Vi har lyckats hitta följande på en Zip-drive: ZDE1N2Y2ZDMwMmRlMTBkOGUxNjM0ZmVhOWRiYWZlMDg5MTNkZWE2NzQxNTExZDEwNzI1Y2UxZmNkMTE5ZGJiNDA0MDgwNmM0MGU3YWJhMGMzMGQ2M2NmYjU3MDllMGVkOWZlOAo=
Lösning
Ansluter man till utmanings-servern så ser man att det är en tjänst för att kryptera meddelanden med RC4.
_____ ___ ______ _ _ _____ _ ___ _ _
| ___| / | | ___ \ | | | / __ \ | | / | | | | |
| |__ _ __ ___ _ __ ___ / /| | ______ | |_/ /___ __ _| | |_ _ | / \/ ___ ___ | | / /| | | |_| | __ ___ __
| __| '_ \ / __| '__/ _ \/ /_| | |______| | // _ \/ _` | | | | | | | | / _ \ / _ \| | / /_| | | _ |/ _` \ \/ /
| |__| | | | (__| | | (_) \___ | | |\ \ __/ (_| | | | |_| | | \__/\ (_) | (_) | | \___ | | | | | (_| |> <
\____/_| |_|\___|_| \___/ |_/ \_| \_\___|\__,_|_|_|\__, | \____/\___/ \___/|_| |_/ \_| |_/\__,_/_/\_\
__/ |
|___/
Welcome to the RC4 encryption service
=====================================
Generating nonce...error
Input data to be encrypted:
Notera att det blir fel vid generering av nonce. Detta borde göra att vi kan återskapa key-stream:en som använts för att kryptera meddelandet vi fick i beskrivningen. För att återskapa key-stream:en behöver vi kryptera en sträng med minst samma längd som meddelandet.
Input data to be encrypted: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
d344f6c606dc05dffb714fe691bac007893fe0634c6f09057253dff3df16d9b03a0206cb306dba1f30e83bfb4404e8eb8af4
För att återskapa key-streamen behöver man XOR:a varje tecken från input:en med varje tecken från den krypterade strängen, i detta fall behöver man konvertera varje tecken från hex och sedan XOR:a.
När key-streamen är återskapad kan man använda den för att avkryptera meddelandet i beskrivningen.
Följande script kan användas för att dekryptera meddelandet.
import base64
msg= 'ZDE1N2Y2ZDMwMmRlMTBkOGUxNjM0ZmVhOWRiYWZlMDg5MTNkZWE2NzQxNTExZDEwNzI1Y2UxZmNkMTE5ZGJiNDA0MDgwNmM0MGU3YWJhMGMzMGQ2M2NmYjU3MDllMGVkOWZlOAo='
known_pt = b'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
known_ct = bytes.fromhex('d344f6c606dc05dffb714fe691bac007893fe0634c6f09057253dff3df16d9b03a0206cb306dba1f30e83bfb4404e8eb8af4')
ks = bytearray()
for i in range(len(known_pt)):
ks.append(known_pt[i] ^ known_ct[i])
ct = bytes.fromhex(base64.b64decode(msg).decode())
pt = bytearray()
for i in range(len(ct)):
pt.append(ks[i] ^ ct[i])
print(pt.decode())
När man avkrypterat meddelandet får man flaggan cratectf{samma_nyckel_utan_nonce_kan_vara_farligt}