HackIt 2017 – Crypto 100 – 4_messages

Y aquí esta el último writeup de las pruebas que conseguí realizar durante el HackIt2017, esta vez no será forense sino cryptografía, veamos el enunciado:

_messages
crypt100

Description: We’ve captured 4 enemies’ cryptograms. What we know: 1) Enemies used Lord Playfair cryptosystem. 2) All the messages that is hidden behind the cipher texts are similar. 3) Each message has got the similar beginning – it is ‘Good evening hackit two thousand seventeen’ 4) Enemies use pretty usual method of key generation. One of the samples you can find here – https://github.com/AsenOsen/playfair ; Help us to restore the original message.

Attachment: (none)

Webpage: https://mega.nz/#!8CoSVSJT!0gkKT_wmG_h1n_YgCtivJCfC2VHN8Y4TtyNsbOJuU8Y

Hint: Flag lower case (h4ck1t{flaginlowercaseformat}).

Nos descargamos el archivo y nos encontramos un txt con el siguiente contenido:

CAPTURED_CIPHER =  LGMFTYNSKOPTCKIHDVBVGFIGPUKLERTYNSBFNSKOGTKUFHSKDQMIPSBYBYUZMBOAENFGEFRKUCDFIGZAFHPELFBKQGKWBICUDXVSFGSMMFUZDBHFKUBKYKKQKTKIFQEVUZLGDVFGACYTHQKFKDUOQHSTQCMWGBKTFHNDYBDFDVGTDSFKYSMIGOZHOKNSKDOGAQFBRKPFGTNYAHDPNYFGSDGTDNHBUCYCNKUEMUBKKAKHVTDSBFVDGTNSBHENOFSUEPCZNBDVBFSUGTNSIMLDKOFBKTGDGLFBKTQCMEZNQZAOMLFBGTFTQBMV
CAPTURED_CIPHER =  HNQBRESPSMHKBDFEUZUXMWOWSAGUARRESPXISPSMWFSVIYMADVPBZSVXVXNWQLFRPCWMCREAISCVOWTVIYIUWHSCQKBAGYSIDECMWMSQQBNWYWYISVSCIAGAKVKPAWIFNWHNUZWMGBERCNSRKCMHNCXCSDKZFZKVIYPIXVCVUZWFRIRSAUPBPOESMSSPKCOPZHIXEAWUWFRVFVZIRVWMIRWFIPYUISEPICIGQVSCBKYEOKRIXIZUWFSPUYPCMYIVUIETKRUZXIIVWFSPBPOYSMIXKVTINHIXKVSDQABMWXRFFHIXWFIKGDKU
CAPTURED_CIPHER =  EMIEDZDGLDEFNBLKSYQYMUOUPTNGNPDZDGUGDGLDUFLPPMGXCBLHPHAZAZUZINMKOAUMADXLIPHAOUVKPMTUKHDNSIGWBGPIFBVTUMCDIEUZFQMPLPDNTXNQOHBLHQYGUZEMSYUMBEZDDQODHNMHQDUDBDSNMSOHPMOGZAHASYUFDHDOXCLHLEDPDLDGHNELXKGUXLPUUFNUROPFNUUMHDUFGOGQIPWLGZTCIHDNFRRLURDHUGYSUFDGQGOARMCPUTLVONSYUGCPUFDGHLKFLDGUOHTYMEGUOHBDGAZMQZKMMNGUUFGHKNNY
CAPTURED_CIPHER =  FAAEAZBSHQHIORFKPZYZECFBZLBMEQAZBSEKBSHQYKKQPKWBAYFOVCBZBZFCQOQFSKCEEOLTPGDOFBXHPKZEADOBCQBRGOGPRYPTCEYMAEFCEYKPKQOBNTEMKBTFOWCPFCFAPZCEGBZADRKDTOFLRDTDAGQUSCKBPKSAZBDOPZYKATDKLQFOBLXGQHBSTOLBUNKELTZCYKKZIKCYKZCETAYKASERPGZIBTLKACOBYFPFYIATEKZPYKBSRESKGKTMEZQPSOPZEKTMYKBSOFNAHQKEKBSRAFKEKBAGQBCBVXFQMFKEYKOKMOIV

Nos dan una pista sobre que puede ser playfair pero por no fiarme me fui aquí para verificarlo y copie el primer mensaje, este es el resultado:

Efectivamente parece ser playfair, como no es un cifrado al que este muy acostumbrado (suele aparecer vigenere con el que no me llevo muy bien) me toco hacer algo de investigación y me encontré con esta tool que realiza un análisis de frecuencia de las letras en utilizando un archivo distat.log que en este caso contiene información sobre el idioma inglés (tengo que mirar como generarlo para el español).

Compilamos la aplicación haciendo un simple make y ya la tenemos lista. Cree 4 archivos cada uno conteniendo solo la parte cifrada para poder pasarselos a la aplicación.

Después de ver el output de la aplicación hice el siguiente script para ir obteniendo las keys, el tiempo de ejecución es bastante largo a veces ya que no siempre realiza las mismas comprobaciones:

while true; do ./playn m1 | grep -i -A 11 "GO OD EV EN IN GH AC KI TX TW OT HO US AN DS EV"; if [[ $? == 0 ]]; then break; fi ; done

Como veréis el texto no es exactamente igual ya que después de lanzarlo varias veces a mano me fije en que se añadia una X de vez en cuando, este fue el resultado:

Como podemos ver tenemos un texto que se puede leer, pero parece que la clave no sigue el formato que nos han dado en el enunciado, este formato consiste en que la clave se genera en base a una palabra, por ejemplo “COSA”, y el resto del abecedario se incluye en orden así que tendriamos: “COSABDEFGHIJKLMNPQRTUVWXYZ”. Lo lanzamos un par de veces más a ver si conseguimos algo más concreto y parece que la primera clave palabra que debemos encontrar es HACKIT, modificamos el script para que busque tanto por el texto conocido como por esta palabra para ver si efectivamente hay resultados:

while true; do ./playn m1 | grep -i -A 11 "GO OD EV EN IN GH AC KI TX TW OT HO US AN DS EV" | grep -i hackit; if [[ $? == 0 ]]; then break; fi ; done

Y obtenemos los siguiente:

Esto ya sigue el formato que queremos, pero no exactamente así que lo reordenamos:

HACKITBDEFGLMNOPQRSUVWXYZ

El texto cifrado decía lo siguiente:

GOOD EVENING HACKIT TWO THOUSAND SEVENTEEN IN THIS TINY BROCURE WE WOULD LIKE
TO DESCRIBE HOW IT IS TO BE A PLAY FAIR
CRYPTOR NO DOUBT IT IS EASY AS HECK BUT YOU GOT TO HAVE A PIECE OF PAPER ALL THE
TIME WE BET THERE IS NO CONVINIENCE NOW LETS CUT THE SHIT RESTORE THE MATRIX KEYS
FOR EACH CIPHER TEXT THEN TAKE FIRSTS IX LETTERS THEN COMBINE THEM TOGETHER AND YOU WILL GET THE FLAG

Así que nos quedamos con la primera parte y obtenemos la primera palabra, HACKIT.

Ahora que ya sabemos como funciona el proceso editamos un poco el script para que solo nos devuelva la key en los mensajes que coincidan y ver si encontramos la siguiente palabra:

for i in {1..10}; do while true; do ./playn m2 | grep -i -A 11 "GO OD EV EN IN GH AC KI TX TW OT HO US AN DS EV" | grep keysquare; if [[ $? == 0 ]]; then break; fi ; done; done

Esto nos devuelve el siguiente resultado:

En este caso vemos que el segundo grupo parece que pone “VERYIS” y en el primero podemos ver también que termina en “ISVER” y comienza con “Y”,  como la forma correcta sería “ISVERY” vamos a comprobar si es una solución valida:

while true; do ./playn m2 | grep -i -A 11 "GO OD EV EN IN GH AC KI TX TW OT HO US AN DS EV" | grep keysquare | grep "ISVERY"; if [[ $? == 0 ]]; then break; fi ; done

Y efectivamente obtenemos:

Reordenamos nuevamente y obtenemos ISVERYABCDFGHKLMNOPQTUWXZ, así que nuestra segunda palabra es “ISVERY”.

Para las dos últimas palabras realizamos el mismo proceso que para la segunda (no quiero alargar esto demasiado) y obtenemos las palabras “DANGER” y “CRYPTO” con lo cual, y según el hint, la flag final es:

h4ck1t{isverydangercrypto}

Espero os haya gustado a pesar de no haber sido mucho más que bruteforcear las claves e ir descubriendo las distintas keys.

Como siempre, un saludo y gracias por vuestra visita!

Esta entrada fue publicada en cripto, ctf, hackit, writeups. Guarda el enlace permanente.

Deja un comentario