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
- Décoder la portion Base64 :
base64.b64decode(...). - Tester un déchiffrement AES avec la clé fournie : essayer
ECB(sans IV) puisCBC(avec IV) selon les résultats. - Gérer le padding (PKCS#7) si nécessaire et analyser le plaintext pour repérer le flag (ex.
HTB{...}ouS123_...).
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_HackTheBoxIsCoolqui peut servir d'indice de format.
Références
- PyCryptodome — AES, modes et gestion du padding.