LE BLOG DE RICK Linux Random WU

Par Rick dans WU le 17/04/2021.


NSA Flag Checker & La grande évasion

Cet article est le numéro 2 de la série WU Midnight 2021.

  1. WU Midnight 2021
  2. NSA Flag Checker & La grande évasion
  3. La bombe

NSA Flag Checker

La NSA nous partage gentillement un fichier exécutable pour vérifier les flags. Ouvrons-le dans leur outil : Ghidra.

Dans l’arbre d’appel de la fonction main, je vois directement la fonction decrypt_flag.

arbre d’appel de main

Lors de la lecture du main, une condition impossible est faite pour afficher le flag, qui se trouve dans __s1.

  iVar1 = decrypt_flag(__s1);
  /* ... */
  iVar1 = strncmp(__s1,(char *)param_2[1],0x30);
  if (iVar1 != 0) { /* impossible sans connaitre le flag */
    puts("WRONG! Get out of here! You are not the NSA!");
    exit(1);
  }
  printf("The flag is indeed %s. Consider this proof of our loyalty.\n",__s1);

Il suffit changer le JZ pour un JMP à l’emplacement du if en ASM pour sauter directement à l’affichage du flag. JZ ne saute que si le résultat du test est égale à 0 alors que JMP saute quoi qu’il arrive.

fonction main


La grande évasion

Comme pour chaque chall de reverse, j’ouvre le fichier dans Ghidra. En bidouillant les paramètres pour choisir la langue (j’ai oublié / fait n’importe quoi), j’obtiens un gros fichier hexadécimal. En parcourant tout le fichier, on trouve tout en bas le flag.

mémoire arduino

C’est très sale comme manière, vous pouvez trouver une façon plus « propre » sur le WU de K3RM1T ou encore sur le WU de SoEasy.