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.
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 !
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.