Nous allons faire ce niveau 13 donc sans plus tarder voyons ce qu'on nous donne ici :
There is a security check that prevents the program from continuing execution if the user invoking it does not match a specific user id.
To do this level, log in as the level13 account with the password level13. Files for this level can be found in /home/flag13.
Donc nous avons
aussi un fichier source relativement simple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <string.h> #define FAKEUID 1000 int main(int argc, char **argv, char **envp) { int c; char token[256]; if(getuid() != FAKEUID) { printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID); printf("The system administrators will be notified of this violation\n"); exit(EXIT_FAILURE); } // snip, sorry :) printf("your token is %s\n", token); } |
Donc avec ce code
source on voit assez rapidement que si on execute le programme il va
avoir du mal à passer le premier test. Notre uid sera différent du
uid demandé et donc nous sommes stop par cette simple condition :
#define FAKEUID 1000 if(getuid() != FAKEUID)
Comme l'indique ma démonstration notre id de base est à 1014 :
La technique que
l'on va utiliser ici est toute simple on va simplement changer la
fonction getuid() du système par notre propre fonction et pour ça
on va devoir modifier une variable qui va permettre de simplement
pouvoir forcer la librairie utiliser lors de l'exécution de notre programme. Donc on
va déjà créer notre fonction qui va remplacer getuid :
#include <sys/types.h> uid_t getuid(void) { return (1000); }
Nous allons ensuite
compiler cette lib avec gcc et différent flag qui vont permettre de
rendre cette libraire utilisable. On va enfin adapté notre
LD_PRELOAD pour forcer l'utilisation de la librairie et on va enfin
lancer notre exécutable. Si tout fonctionne on va avoir alors un
password que l'on va devoir utiliser pour se log et enfin récupérer
notre flag :
Je vous conseil de bien comprendre ce procéder puisqu'il est fort utile dans ce genre de cas. On peut trouver pas mal d'exemple et d'explication sur le net.
Je vous conseil de bien comprendre ce procéder puisqu'il est fort utile dans ce genre de cas. On peut trouver pas mal d'exemple et d'explication sur le net.
Aucun commentaire:
Enregistrer un commentaire