RootMe App-Script/Bash-System-1

FIKARA BILALFIKARA BILAL
2 min read

Lien: https://www.root-me.org/fr/Challenges/App-Script/Bash-System-1

Pour ce challenge, il faut lire le fichier .passwd dans le répertoire de l’utilisateur avec lequel on est connecté.

Ce fichier est détenu par app-script-ch11-cracked, qui a le droit de lire, et il appartient aussi au groupe app-script-ch11. Le fichier ch11 est un exécutable en C, qui utilise la fonction system pour lister contenu de .passwd. Et vu que .passwd est un fichier et non un dossier, lorsqu’on l’exécute il affiche juste le nom sans lire le contenu.

Par contre, on voit que le fichier ch11 a le bit SUID défini, indiqué par le s dans les permissions à la place du x pour l’exécution. Cela signifie que lorsqu’il est exécuté, c’est avec les privilèges du propriétaire, soit app-script-ch11-cracked.

La faille ici se trouve au niveau du ls qui est appelé au niveau de la fonction system. Le programme appelle ls sans spécifier où le trouver. En principe, on devait avoir system("/bin/ls /challenge/app-script/ch11/.passwd") pour indiquer le chemin absolu de la commande ls sur le système. Lorsque la commande est exécutée, le shell regarde dans la variable d’environnement appelée PATH, qui contient la liste de répertoires où il cherche ses commandes. Si on arrive à modifier le PATH, pour le pointer vers un autre répertoire, on peut modifier l’exécution du ls qui sera remplacée par une autre commande, vu que la vraie commande ls (/bin/ls) n’est pas spécifiée au niveau de la fonction system. Notre fausse commande ls sera ensuite exécutée avec les privilèges de app-script-ch11-cracked car le fichier ch11 a le bit suid.

Pour créer la fausse commande ls, on créé un répertoire qui va contenir un script nommé ls. On peut créer ce script dans un répertoire /tmp/script.

#!/bin/bash
cat /challenge/app-script/ch11/.passwd

Il s’agit d’un shell (#!/bin/bash) qui va lire et non lister le contenu du fichier avec cat au lieu de ls. Il faut ensuite rendre ce script exécutable avec la commande suivante

chmod +x /tmp/script/ls

Il faut maintenant modifier la variable PATH pour que /tmp/script soit le premier endroit où le shell cherche les commandes.

export PATH=/tmp/script:$PATH

Avant l’exécution de cette commande, le PATH était probablement /usr/local/sbin, mais une fois qu’on l’exécute, le PATH débute par /tmp/script. Quand il voit à partir de là, une commande ls, il exécute donc /tmp/script/ls et non /bin/ls.

0
Subscribe to my newsletter

Read articles from FIKARA BILAL directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

FIKARA BILAL
FIKARA BILAL

As a newcomer to the cybersecurity industry, I'm on an exciting journey of continuous learning and exploration. Join me as I navigate, sharing insights and lessons learned along the way