dimanche 19 juillet 2015

Nebulla - level02

Bonjour,

Nous allons voir maintenant pour ce troisième niveau qui ressemble vraiment à ce que l'on a pu voir auparavant donc voici ce que l'on nous donne :
There is a vulnerability in the below program that allows arbitrary programs to be executed, can you find it?
To do this level, log in as the level02 account with the password level02. Files for this level can be found in /home/flag02.
On nous donne donc aussi cette source qui est pas forcément plus compliqué mais qui pourrait faire peu :

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

int main(int argc, char **argv, char **envp)
{
  char *buffer;

  gid_t gid;
  uid_t uid;

  gid = getegid();
  uid = geteuid();

  setresgid(gid, gid, gid);
  setresuid(uid, uid, uid);

  buffer = NULL;

  asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
  printf("about to call system(\"%s\")\n", buffer);
  
  system(buffer);
}

Donc ici ce qui nous intéresse sera `asprintf` (ne pas hésiter à lire ce link vraiment) qui est très important à comprendre. Pour faire simple pour allouer de la mémoire automatiquement sans se soucier de la taille (à la différence de malloc qui lui va demander une taille). On va en gros alloué une certaine taille auto par asprintf dans le buffer ici et on va lui donner la valeur de la string qui suit.
On peut voir qu'une autre fonction est utilisé `getenv` qui va en gros simplement prendre le contenu de la variable d’environnement USER et donc si on lance le programme on aura logiquement.. :



Si on modifie la variable d’environnement USER on va donc modifier logiquement la sortie du fichier comme par exemple :


On voit en fait que le programme va simplement exécuter via la fonction `system` ce qui sera contenu dans la variable buffer comme l'indique la sortie du programme. Il va donc ici simplement devoir modifier la variable d’environnement USER pour pouvoir lancer la commande de notre choix. Je vais pas reflex tenter d'avoir un shell pour pouvoir exécuter la fameuse commande ''getflag''.


J'ai utilisé le caractère '&' deux fois ce qui veut simplement dire 'et' .Par exemple je peux faire :
cd / && ls

Ce qui donnera comme résultat (aller vers / ET lister via ls):


On a pu voir par ce second exemple que les variables d’environnement peuvent être bien utile ! Ne pas hésiter à demander pour le moindre soucis. Les choses que l'on voit sont vu rapidement mais il ne faut pas hésiter à chercher à comprendre un peu plus que ce que l'on peut voir puisque plus on va avance plus les notions que l'on va voir seront importante pour la suite.

Encore une fois si vous avez des questions sur des notions mal comprise ne pas hésiter à s'exprimer via mail/comment/twitter.

Aucun commentaire:

Enregistrer un commentaire