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.

1 commentaire:

  1. Slot Machines - JTM Hub
    Slot Machines. The popular, exciting slots games are now available on 상주 출장안마 the new slot machines market and 남양주 출장마사지 have 화성 출장안마 the potential 강릉 출장안마 to become popular in the  Rating: 경기도 출장마사지 4.6 · ‎947 reviews

    RépondreSupprimer