HackTheBox Writeup

Cryptohorrific

Cryptohorrific

  • Catégorie : Mobile / Crypto
  • Difficulté : Intermédiaire

Résumé

Fichier challenge.plist contenant une chaîne incluant une portion Base64. La donnée décodée semble être un ciphertext AES ; des paramètres (clé/IV) sont présents dans le dépôt et facilitent les essais de déchiffrement.

Données extraites

Extrait du challenge.plist :

bplist00��TflagRidUtitle_XTq+CWzQS0wYzs2rJ+GNrPLP6qekDbwze6fIeRRwBK2WXHOhba7WR2OGNUFKoAvyW7njTCMlQzlwIRdJvaP2iYQ==S123_HackTheBoxIsCool

La portion Tq+CWzQS... est du Base64 et contient le ciphertext.

Paramètres trouvés

Key = !A%DG-KaPdSgVkY
IV  = QfTjWnZq4t7w!z%C

Approche de résolution

  1. Décoder la portion Base64 : base64.b64decode(...).
  2. Tester un déchiffrement AES avec la clé fournie : essayer ECB (sans IV) puis CBC (avec IV) selon les résultats.
  3. Gérer le padding (PKCS#7) si nécessaire et analyser le plaintext pour repérer le flag (ex. HTB{...} ou S123_...).

Exemple (PyCryptodome)

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

key = b'!A%DG-KaPdSgVkY'
code_b64 = "Tq+CWzQS0wYzs2rJ+GNrPLP6qekDbwze6fIeRRwBK2WXHOhba7WR2OGNUFKoAvyW7njTCMlQzlwIRdJvaP2iYQ=="
ct = base64.b64decode(code_b64)

# Exemple ECB
cipher = AES.new(key=key, mode=AES.MODE_ECB)
pt = cipher.decrypt(ct)
print(pt)

# Exemple CBC (si IV applicable)
# iv = b'QfTjWnZq4t7w!z%C'
# cipher = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
# pt = unpad(cipher.decrypt(ct), AES.block_size)
# print(pt)

Indices

  • Tester différents modes AES et retraiter le padding si le plaintext contient des caractères non imprimables.
  • Le fichier contient une chaîne S123_HackTheBoxIsCool qui peut servir d'indice de format.

Références

  • PyCryptodome — AES, modes et gestion du padding.