El siguiente reto de la CyberCamp 2018 que resolveremos es un reto de criptografia de nivel medio. Este reto es el número 11.
Aquí tenéis un enlace para poder descargaros los retos y probarlo vosotros mismos: RetosCyberCamp2018.zip
Enunciado
Se incauta a un sospechoso de terrorismo su equipo, dentro de éste se encuentran ficheros que se podrían considerar de vital importancia para continuar con la investigación, pero muchos de esos ficheros están cifrados y se sabe que mediante PGP simétrico.
Gracias a la investigación del sospechoso tus compañeros te han dado las siguientes pautas que sigue el sospechoso a la hora de crear sus contraseñas:
• Son de longitud de 6 a 7 caracteres.
• Sólo contienen letras minúsculas
• Sólo se utilizan estas letras: eghotu
• No se repite ninguna de las letras de la contraseña
• Algunas de ellas contienen dos números entre estos: 0134
Tu trabajo será intentar descifrar el fichero gracias a la investigación realizada sobre el sospechoso y a los datos proporcionados para determinar si el contenido es de vital importancia para la investigación en curso.
Ficheros: medium_11.gpg
Solución
Tras leer el enunciado tenemos claro que habrá que hacerle fuerza bruta a fichero que se nos aporta. Lo primero será crear un diccionario que se ajuste a lo descrito en el enunciado. Para esto usaremos crunch:
#Son de longitud de 6 a 7 caracteres, se utilizan estas letras: eghotu (en minúscula), números entre estos: 0134 y no se repite ninguna de las letras de la contraseña #Para eliminar las letras repetidas del diccionario: perl -ne 'print unless /([a-z]).*\1/' crunch 6 7 eghotu0134 | perl -ne 'print unless /([a-z]).*\1/' > wordlist.txt
La ejecución de este comando nos crea un diccionario de 3391376 palabras que ocupará 26.7 MB
Ahora tenemos que hacerle fuerza bruta con el diccionario generado. Para esto encontramos el repositorio PGPCrack-NG (Github)
El comando seria:
cat wordlist.txt | ./PGPCrack-NG/PGPCrack-NG medium_11.gpg
La ejecución de este comando nos tardará aproximadamente 441 segundos
STARTTIME=$(date +%s);cat /tmp/wordlist.txt | ./PGPCrack-NG ../medium_11.gpg;echo "Time elapsed: $(($(date +%s)-STARTTIME))"
Es muy lento así que pensé en hacerme un script que fuera más rápida, pero sin complicarme mucho:
#!/bin/bash fun_pgp () { gpg2 --batch -d --passphrase=$1 $pgpfile >outPGP$2 2>/dev/null len=$(wc -l outPGP$2 | cut -f 1 -d " ") if [ $len != 0 ] then kill $pid echo "[+] Password Found: $1" echo "[+] Output File: outPGP$2" exit fi rm outPGP$2 } pgpfile=$1 i=1 pid=$$ while IFS='' read -r line || [[ -n "$line" ]]; do fun_pgp $line $i & i=$((i +1)) sleep 0.05 done < $2
La ejecución de este script nos obtendrá la clave en 99 segundos aprox.
Además el repositorio PGPCrack-NG no muestra tiempo de ejecución ni una barra de progreso o algo similar. Así que adorne un poco el script anterior y el resultado es el siguiente:
https://github.com/ironHackersDev/Cybercamp18/blob/master/11_brutePGP.sh
Como veis la clave obtenida es: eg1u03
Con esta clave obtenemos un fichero que será una imagen:
Parece que hay un cifrado en la imagen: https://www.dcode.fr/templars-cipher
FLAG:
ERESMUYGOLOSO
Podrias volver a subir los CTF al mega por favor.