On se retrouve une nouvelle fois pour un challenge de la série Narnia.
Tout dâabord, bravo pour votre persĂ©vĂ©rance pour ces challenges.
Le challenge Narnia3 nâest pas excessivement complexe, ainsi je ne vous donnerai que quelques pistes pour le rĂ©ussir plus rapidement.
Voici le challenge de Narnia3 :
#include #include #include #include #include #include #include int main(int argc, char **argv){ int ifd, ofd; char ofile[16] = "/dev/null"; char ifile[32]; char buf[32]; if(argc != 2){ printf("usage, %s file, will send contents of file 2 /dev/null\n",argv[0]); exit(-1); } /* open files */ strcpy(ifile, argv[1]); if((ofd = open(ofile,O_RDWR)) < 0 ){ printf("error opening %s\n", ofile); exit(-1); } if((ifd = open(ifile, O_RDONLY)) < 0 ){ printf("error opening %s\n", ifile); exit(-1); } /* copy from file1 to file2 */ read(ifd, buf, sizeof(buf)-1); write(ofd,buf, sizeof(buf)-1); printf("copied contents of %s to a safer place... (%s)\n",ifile,ofile); /* close 'em */ close(ifd); close(ofd); exit(1); }
ifile
ofile
/dev/null
En mettant le contenu dâun fichier auquel je nâai pas dâaccĂšs, cela mâaffiche ce message dâerreur :
VoilĂ pour les diffĂ©rents cas dâusage de ce script.
Vous aurez remarquĂ© que nâimporte quel input est entrĂ©, cela crĂ©e soit une erreur, soit envoie le rĂ©sultat dans /dev/null.
Ce qui serait pratique, ça serait de pouvoir modifier directement ofileâŠ
Heureusement pour nous, le code utilise une fonction trÚs vulnérable : strcpy.
strcpy
Pour rappel, cette fonction permet de copier les caractĂšres dâune string Ă une autre. Cependant celle-ci ne vĂ©rifie pas sâil y a la place dâĂ©crire dans la destination.
Ainsi, Ă cause de ce souci de configuration, nous pouvons facilement effectuer notre buffer-over-flow.
On se demande bien quel fichier il sera intĂ©ressant de lireâŠ
Dans un premier temps, voyons voir quelles conditions doit remplir notre buffer :
On peut se poser la question de comment avoir des noms de fichiers imbriqués valides pour lire un fichier arbitraire.
Câest en fait trĂšs simple : il suffit dâutiliser un lien symbolique !
Un lien symbolique est un raccourci. Il permet tout simplement dâattribuer un autre chemin dâaccĂšs Ă un fichier.
Si le fichier original est modifié, le lien symbolique sera modifié aussi.
Si le fichier original est supprimé, le lien symbolique ne pointera plus nul part.
Voici la commande pour créer un lien symbolique :
ln -s -f
Vous pouvez vérifier que votre lien symbolique a bien été crée en tapant cette commande au niveau de la destination :
ls -lah
Si le lien symbolique a bien été effectué, il sera signalé par une flÚche et sa source :
total 168K drwxrwxr-x 2 narnia3 narnia3 4.0K Feb 3 14:23 . drwxrwx-wt 4117 root root 160K Feb 3 14:23 .. lrwxrwxrwx 1 narnia3 narnia3 24 Feb 3 14:23 a -> /etc/narnia_pass/narnia4
Indice : Rappelez-vous que dans le dossier /tmp, vous avez tous les droits (crĂ©ation de dossier, de fichierâŠ)
/tmp
Il ne sâagit clairement pas du challenge qui requiert le plus de connaissances, mĂȘme sâil requiert une certaine gymnastique dâesprit.
Cela reste toujours intĂ©ressant dâĂ©tudier diffĂ©rentes maniĂšres dâexploiter un mĂȘme souci de configuration.
https://doc.ubuntu-fr.org/lien_physique_et_symbolique
challenge exploit
Recent Comments