Encro4

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}

n00bz

Home of the n00bz CTF team.


By n00bz, 2022-11-28