Téléchargement de 103_spx.zip
et décompression.
On obtient un fichier USB_a_analyser
que l’on renomme USB_a_analyser.dd
Installation de OSForensics (PassMark Software) https://www.osforensics.com
Création d’une nouvelle affaire et ajout d’un dispositif à l’affaire (ici notre fichier USB_a_analyser.dd
)
On peut naviguer dans l’image disque
On trouve message.txt
Si un jour je relis ce message, le mot de passe utilisé pour chiffrer mon plus grand secret était "vgrohhfyek0wkfi5fv13anexapy3sso6" et j'avais utilisé openssl.
En revanche, j'ai effacé par erreur le fichier contenant mon plus grand secret (voir s'il existe des techniques de la mort pour le retrouver mon fichier secret.xz sha256(0fb08681c2f8db4d3c127c4c721018416cc9f9b369d5f5f9cf420b89ee5dfe4e) de 136 octets) et de toute façon, impossible de me rappeler de l'algo utilisé -_- (donc si je le retrouve... il faudra aussi retrouver l'algo pour utiliser ce mot de passe).
Dans USB_a_analyser:\.Trash-1000\files
il y a un fichier secret.xz
On l’exporte, on le décompresse (on obtient un fichier secret
) et on utilise le script Python pour récupérer le flag.
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import subprocess
def get_openssl_ciphers():
try:
output = subprocess.check_output(['openssl', 'list-cipher-commands'],
stderr=subprocess.DEVNULL).decode()
return output.strip().split('\n')
except:
# Liste de secours si la commande ne fonctionne pas
return [
'aes-128-cbc', 'aes-128-cfb', 'aes-128-cfb1', 'aes-128-cfb8',
'aes-128-ctr', 'aes-128-ecb', 'aes-128-ofb',
'aes-192-cbc', 'aes-192-cfb', 'aes-192-cfb1', 'aes-192-cfb8',
'aes-192-ctr', 'aes-192-ecb', 'aes-192-ofb',
'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb1', 'aes-256-cfb8',
'aes-256-ctr', 'aes-256-ecb', 'aes-256-ofb',
'bf', 'bf-cbc', 'bf-cfb', 'bf-ecb', 'bf-ofb',
'cast', 'cast-cbc', 'cast5-cbc', 'cast5-cfb', 'cast5-ecb', 'cast5-ofb',
'des', 'des-cbc', 'des-cfb', 'des-cfb1', 'des-cfb8',
'des-ecb', 'des-ede', 'des-ede-cbc', 'des-ede-cfb',
'des-ede-ofb', 'des-ede3', 'des-ede3-cbc', 'des-ede3-cfb',
'des-ede3-ofb', 'des-ofb', 'des3',
'desx', 'desx-cbc',
'rc2', 'rc2-40-cbc', 'rc2-64-cbc', 'rc2-cbc', 'rc2-cfb', 'rc2-ecb', 'rc2-ofb',
'rc4', 'rc4-40',
'seed', 'seed-cbc', 'seed-cfb', 'seed-ecb', 'seed-ofb'
]
def try_decrypt(algo, input_file, key):
try:
cmd = f"openssl {algo} -d -in {input_file} -k {key}"
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.DEVNULL)
if b'lh_' in output:
return output
return None
except:
return None
def main():
input_file = "secret"
key = "vgrohhfyek0wkfi5fv13anexapy3sso6"
print("Récupération de la liste des algorithmes...")
algos = get_openssl_ciphers()
print(f"Test de {len(algos)} algorithmes...")
for algo in algos:
print(f"Test de {algo}...")
result = try_decrypt(algo, input_file, key)
if result:
print(f"\nSUCCÈS avec {algo}!")
print("Résultat:", result.decode(errors='ignore'))
break
if __name__ == "__main__":
main()
On exécute le script:
python decipher.py
Récupération de la liste des algorithmes...
Test de 64 algorithmes...
Test de aes-128-cbc...
Test de aes-128-cfb...
Test de aes-128-cfb1...
Test de aes-128-cfb8...
Test de aes-128-ctr...
Test de aes-128-ecb...
Test de aes-128-ofb...
Test de aes-192-cbc...
Test de aes-192-cfb...
Test de aes-192-cfb1...
Test de aes-192-cfb8...
Test de aes-192-ctr...
Test de aes-192-ecb...
SUCCÈS avec aes-192-ecb!
Résultat: flag : lh_6c31ba64e522b5f9326b7bee0abef6547f60d214