Devoteam était sponsor Platinum de la Nuit du Hack 2018 qui s’est déroulée du 30 Juin au 1 Juillet 2018 à la cité des sciences et de l’industrie à Paris.
Afin d’animer le stand, Devoteam a proposé deux challenges pour les participants: le premier challenge de reverse (crackme: difficulté moyenne) et le deuxième un challenge de cryptographie sur papier (facile).
Cet article présente les solutions pour les deux challenges, que nous avons créés pour l’occasion. Tout retour constructif sur ces épreuves est le bienvenu.
CrackMe
Voici le code source de l’épreuve:
#include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #define NUM_OF_CORES 8 #define MAX_PRIME 100000 /*junk function*/ void do_primes() { unsigned long i, num, primes = 0; for (num = 1; num <= MAX_PRIME; ++num) { for (i = 2; (i <= num) && (num % i != 0); ++i); if (i == num) ++primes; } } int main(int argc, char** argv) { int j=0; //compteur char bad[] = "sorry, it's not the solution"; /*++Junkcode1============================================*/ time_t start, end; time_t run_time; unsigned long i; pid_t pids[NUM_OF_CORES]; start = time(NULL); for (i = 0; i < NUM_OF_CORES; ++i) { if (!(pids[i] = fork())) { do_primes(); exit(0); } if (pids[i] < 0) { perror("Fork"); exit(1); } } for (i = 0; i < NUM_OF_CORES; ++i) { waitpid(pids[i], NULL, 0); } end = time(NULL); run_time = (end - start); /*--Junkcode1==============================================*/ char congrat[] = "Well done!"; /*++Junkcode2============================================*/ char kent[16] = ""; char * s="aaa&method=get&name=ccc&test=aaa"; char *a, *b, *p, *q; a =strchr(s,'&'); b =strchr(s,'='); p= strstr(s,"name="); q= strstr(p,"&"); /*--Junkcode2============================================*/ /*boucle de comparaison*/ for(j=0; i < (strlen(congrat) -1); i++) { if(argv[2][j] != congrat[j] || strlen(argv[2]) != strlen(congrat)) { printf(bad); exit(0); } } printf(congrat); return 0; }
Ce code a été compilé sur Linux 64 bits (Base Debian) avec la commande suivante:
gcc -Wall -m32 -s -fstack-protector chall_junk.c -o CrackMeDevoteamNDH2K18
La difficulté ici était de suivre l’exécution du binaire malgré le code poubelle. Une fois le code retiré, il nous reste le code suivant:
#include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #define NUM_OF_CORES 8 #define MAX_PRIME 100000 int main(int argc, char** argv) { int j=0; //compteur char bad[] = "sorry, it's not the solution"; char congrat[] = "Well done!"; for(j=0; i < (strlen(congrat) -1); i++) { if(argv[2][j] != congrat[j] || strlen(argv[2]) != strlen(congrat)) { printf(bad); exit(0); } } printf(congrat); return 0; }
On peut donc voir qu’il s’agit d’une boucle de comparaison, la solution était donc la string » Well done ».
Challenge Crypto
Un texte chiffré a été donné au participants, le mot de validation du challenge est la concaténation des premières lettres de chaque ligne du message en clair (après déchiffrement).
Voici le message chiffré:
afdfqxip qoxkpclojxhbop bumboqfpb axkp mirpfbrop aljxfkbp : clobkpfzp, zovmqlildfb, flq slrp slribw cxfob mxoqfb ab i’bnrfmb xrafq ? lk mbrq slrp molmlpbo rk bkqobqfbk zebw klrp ix mofkzfmxib xzqfsfqb bpq ix obxifpxqflk a’xrafq ab pbzrofqb xsbz rkb jxglofqb ab qbpqp a’fkqorpflk vlr zxk xipl cfka fk lro qbxj molgbqp ab obzebozeb bq absbilmmbjbkq qoxsxfi bk bnrfmb
Le message était chiffré avec une méthode de chiffrement classique « Cesar ». La difficulté était de retrouver le bon nombre de décalage afin de déchiffrer le texte. Le nombre de Cesar qui représente le décalage de lettres par rapport à l’alphabet était 23 (que l’on appelle « ROT 23 », ROT équivalent à dire Rotation).
Le message en clair après déchiffrement:
Digitals transformakers Expertise dans plusieurs domaines : forensics, cryptologie, iot Vous voulez faire partie de l’equipe audit ? On peut vous proposer un entretien Chez nous la principale activite est la Realisation d’audit de securite avec une majorite de tests d’intrusion You can also find in our team Projets de recherche et developpement Travail en equipe
Le mot de validation est donc: « Devocrypt ».
Retrouvez Devoteam aux prochaines conférences de sécurité pour de nouveaux challenges sur stand,
L’équipe audit de Devoteam