vendredi 24 juillet 2015

Nebulla - level 13

Bonjour,

Nous allons faire ce niveau 13 donc sans plus tarder voyons ce qu'on nous donne ici :

There is a security check that prevents the program from continuing execution if the user invoking it does not match a specific user id.
To do this level, log in as the level13 account with the password level13. Files for this level can be found in /home/flag13.
 
Donc nous avons aussi un fichier source relativement simple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>

#define FAKEUID 1000

int main(int argc, char **argv, char **envp)
{
  int c;
  char token[256];

  if(getuid() != FAKEUID) {
      printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID);
      printf("The system administrators will be notified of this violation\n");
      exit(EXIT_FAILURE);
  }

  // snip, sorry :)

  printf("your token is %s\n", token);
  
}

Donc avec ce code source on voit assez rapidement que si on execute le programme il va avoir du mal à passer le premier test. Notre uid sera différent du uid demandé et donc nous sommes stop par cette simple condition :

#define FAKEUID 1000
if(getuid() != FAKEUID)

Comme l'indique ma démonstration notre id de base est à 1014 :



La technique que l'on va utiliser ici est toute simple on va simplement changer la fonction getuid() du système par notre propre fonction et pour ça on va devoir modifier une variable qui va permettre de simplement pouvoir forcer la librairie utiliser lors de l'exécution de  notre programme. Donc on va déjà créer notre fonction qui va remplacer getuid :

#include <sys/types.h>

uid_t getuid(void) { return (1000); }

Nous allons ensuite compiler cette lib avec gcc et différent flag qui vont permettre de rendre cette libraire utilisable. On va enfin adapté notre LD_PRELOAD pour forcer l'utilisation de la librairie et on va enfin lancer notre exécutable. Si tout fonctionne on va avoir alors un password que l'on va devoir utiliser pour se log et enfin récupérer notre flag :



Je vous conseil de bien comprendre ce procéder puisqu'il est fort utile dans ce genre de cas. On peut trouver pas mal d'exemple et d'explication sur le net.

Aucun commentaire:

Enregistrer un commentaire