samedi 18 juillet 2015

Nebulla - level01

Bonjour,

Nous allons voir maintenant pour ce second level voyons déjà ce qu'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 level01 account with the password level01. Files for this level can be found in /home/flag01.

On peut aussi voir que l'on nous donne une source d'un fichier déjà compilé sur le serveur je vais tenter d'isoler la partie intéressante une compréhension minimal du C est demandé à partir d'ici je vais de toute façon expliquer le code (la partie intéressante au minimum) que l'on va utiliser pour terminer notre niveau.

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

int main(int argc, char **argv, char **envp)
{
  gid_t gid;
  uid_t uid;
  gid = getegid();
  uid = geteuid();

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

  system("/usr/bin/env echo and now what?");
}

Ici rien de spécial la ligne qui va nous intéresser sera celle-ci :

system("/usr/bin/env echo and now what?");

Avec un simple man sur system on peut se rendre compte qu'il s’agit ici d'une fonction qui va exécuter ce qui lui sera donné en paramètre. Je vais donc lancer le programme pour voir ce qu'il nous donne :


Le programme donc lance la commande suivant via la fonction system :

"/usr/bin/env echo and now what?"

Notre but ici serait donc de changer la fonction ''echo'' par une fonction de notre choix pour pouvoir récupérer notre flag. Puisque comme vous vous le doutez c'est bien cette fonction qui permet l'affichage du message :


Sous Linux lorsque nous écrivons une commande dans notre terminal favori il se passe plus de chose que ce que l'on peut imaginer par exemple une simple commande `ls` est en réalité un raccourci vers la commande `/bin/ls`:



Sachant ça on peut donc créer un petit script shell qui va lancer simplement un shell (qui va donc remplacer le fonctionnement de la fonction echo appeler dans notre programme). Pour se faire je vais créer un simple script shell ici dans le dossier /tmp :

 

Je vais maintenant expliquer comment se forme le raccourci lors de l'appel d'un programme dans notre terminal. Rien n'est fait par magie en réalité il y a des variables dans notre environnement qui permet à notre shell (ce qui est à l’intérieur du terminal) à avoir des indications sur pas mal de chose on peut avoir accès à la liste de ces variables via la commande `env` on va même pouvoir modifier les variables que l'on souhaite via une autre commande `export`. Je vous laisse chercher un peu (link) si vous ne comprenez pas forcement cette notion qui est importante.

Une fois que vous avez bien compris la notion des variables d’environnement c'est très simple de continuer. On va simplement modifier une variable spécifique (celle-qui indique au shell où il doit chercher les programmes à appeler) PATH.

Pour se faire une démonstration sera plus rapide je vous explique ensuite :


Donc puisque nous avons notre programme echo dans /tmp je vais simplement modifier la variable PATH pour lui ajouter le chemin de mon programme (/tmp donc) ensuite je lance le programme flag simplement je me permet de lancer la command `whoami` qui me retourne l'user (ici flag01). Je récupère donc simplement le flag via la commande `getflag` qui fonctionne ici.

Cette exercice est un premier pas vers l'exploitation en informatique en général je vous conseil de bien comprendre le fonctionnement puisque l’environnement en général va être important dans notre parcours !

Encore une fois si un soucis ou une incompréhension vous arrive il ne faut vraiment pas hésiter à poser vos questions.


Aucun commentaire:

Enregistrer un commentaire