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.


Nebulla - level00

Bonjour,

Je vais vous faire pour commencer une suite de tutorial pour tenter de comprendre des choses plus ou moins basique dans le monde de l'exploitation. Pour cela je vais vous présenter un site qui est vraiment sympa dans ce but spécifique .

Il s'agit ici de https://exploit-exercises.com qui est donc un site qui a pour but de donner des images cd que l'on peut télécharger dans le but d'exploiter des choses en tout légalité ! Si vous avez envie de tenter l’expérience il suffit simplement de télécharger votre image ici . Vous avez ensuite besoin d'utiliser votre logiciel de virtualisation préférer de votre choix (Virtual box/vmware..) pour boot sur votre image cd télécharger.

Nous allons dans un premier temps commencer par Nebulla qui va nous permettre de découvrir des choses qui seront sûrement basique pour pas mal de lecteur mais qui va nous permettre de comprendre en s'amusant pas mal de concept. Je vais tenter d'expliquer le plus possible chaque logiciel utilisé ainsi que chaque concept. Je vais partir du principe que vous avez quelques notions en programmations ainsi qu'en shell.

Le principe de ces challenges sera toujours fait de la même façon. Une description va nous expliquer notre but et par celle-ci on va devoir trouver un flag et l'utiliser. Un message nous indiquera lorsque nous aurons réussis la chose demande. Ce n'est pas bien compliqué pour le moment.
Je ferais les challenge sur ma machine qui sera sous arch-linux. Si je dois utiliser un logiciel spécifique je donnerais toujours la source de celui-ci.

Donc nous allons pouvoir commencer simplement ce premier level. Voila ce que l'on sait pour le moment :
This level requires you to find a Set User ID program that will run as the “flag00” account. You could also find this by carefully looking in top level directories in / for suspicious looking directories.
Alternatively, look at the find man page.
To access this level, log in as level00 with the password of level00.
Dans un premier temps il faut comprendre ce qui nous est demandé. Je vais tenter de traduire de la meilleur manière pour les débutants en anglais :
Ce level vous demande de trouver un programme (=donc fichier) qui peut être utilisé par l'utilisateur "flag00". Vous pouvez trouver celui-ci en cherchant à partir de la racine (donc /).
Tips: Penser à lire le manuel de la commande find.
Ça ne semble pas très compliquer ici il suffit pour le moment de jeter un oeil dans le manuel de find ou via la commande `man find`.

On apprend ici à utiliser la commande find qui va permettre de chercher un fichier ou dossier avec des paramètres que l'on va pouvoir choisir. Par exemple si je veux chercher un programme ayant pour nom `test` depuis la racine dans notre ordinateur la commande serait:
find / -name 'test'


Note :pour éviter d’afficher les erreurs on pourrait rediriger toute cette sortie via la `2>/dev/null` sachant que 2 est la sortie d'erreur par default.

Donc pour en revenir à notre exercice ici nous cherchons à trouver notre fichier et pour se faire la commande semble assez simple après une bonne lecture du manuel.
find / -user 'flag00' 2>/dev/null

Ensuite un simple ls va nous permettre de voir que le flag se situe dans un dossier du nom de … situé lui même dans le dossier bin une simple exécution nous donne enfin le fameux flag.


Et donc ..:
A partir de ce moment je pars du principe que vous avez compris que lorsque j'utilise le terme man je ferais référence au manuel.

Si vous avez le moindre problème ou une incompréhension a propos de ce level ne pas hésiter à demander via comment/twitter/mail.

First

Bonjour,

Je vous présente ici un simple blog qui aura pour but de vous faire découvrir le monde de la sécurité en informatique .

Nous allons parcourir pas mal de sujet différent je vais vous montrer comment en théorie les choses se font avec des exemples pratique réel (souvent via challenge). J’espère que vous aller apprécier et comprendre les choses que je vais vous faire découvrir par ce blog.

Je n'ai pas la prétention de tout savoir j’apprends sans arrêt et si vous avez une remarque ou des questions par rapport à ce blog ou un sujet en particulier il ne faut pas hésiter a me contacter par mail ou via twitter.

Bonne lecture !