Privilege Escalation
Dernière mise à jour
Cet article vous a-t-il été utile ?
Dernière mise à jour
Cet article vous a-t-il été utile ?
Voici toutes les procédures que je suis pour identifier des vecteurs de privesc. D'une manière générale, il s'agit de deux choses :
Obtenir des identifiants valides pour un compte privilégié.
Faire en sorte d'exécuter du code par l'intermédiaire d'un compte privilégié.
Pour tout ce qui est exploitation d'SUID
ou sudo
, la liste est très utile.
Essayer d'accéder au contenu tel que id_rsa
, /etc/shadow
, backup
, docker
, fichiers cachés ou bien inhabituels ou encore récemment modifiés.
Tester les mots de passe vides ou bien identiques au nom d'utilisateur (vagrant:vagrant
, root:root
).
Consulter la configuration de sudo
pour l'utilisateur pawned.
Vérifier les binaires configurés en SUID
.
Lister les tâches CRON
si possible.
Lister les capabilities
des différents binaires.
Vérifier les services qui écoutent sur le système.
Vérifier les permissions des disques montés dans le cas d'un container (Docker
par exemple)
Faire des recherches de mot-clés intéressants. Vous pouvez vous référez à ma page sur le .
Cepenant si vous n'arrivez toujours pas à vos fins, certaines techniques d'exploitation peuvent s'avérer plus élaborées. Voici une liste de dossiers/fichiers intéressants :
/etc/shadow
Les mots de passe sont stockés ici, chiffrés ainsi que d'autres informations (shell/nologin)
Critique
/etc/passwd
Permet facilement de connaître la liste des utilisateurs existants sur le système. Si en écriture, on peut être root car changement de mdp arbitraire.
Modérée
/var/lib
C'est là que l'on va généralement stocker les données des serveurs. Les bases de données peuvent contenir des mots de passe utilisés également pour un utilisateur plus privilégié.
Modérée
/tmp
Il est bon de savoir que ce dossier est toujours un lieu où tous les utilisateurs peuvent lire et écrire. Particulièrement utile pour des payloads.
Occasionnelle
/proc /proc/version /proc/partitions /proc/<PID>
Permet d'obtenir beaucoup d'informations sur le système, comme la liste des modules, les processus en cours d’exécutions et plusieurs informations sur eux, des informations sur les partitions, etc..
Occasionnelle
/etc/group
Les groupes existants peuvent renseigner sur les applications installées et potentiellement intéressantes.
Faible
Windows fonctionne d'une manière très différente de Linux et est beaucoup plus complexe à parcourir pour un attaquant, et malheureusement, beaucoup plus complexe à sécuriser pour une victime. Ces deux particularités viennent du fait que Windows est très compliqué, avec un système de permissions lourd et chaotique et une quantité assez impressionnantes d'objets existent. Nous sommes très loin de POSIX
et du "tout est fichier" de Linux. C'est pour cela que cette section va couvrir une liste de sujets très loin d'être exhaustive.
Voici quelques choses que nous pouvons vérifier rapidement sans avoir recours à des scripts d'automatisation :
Lister les valeurs de registre (la lecture est souvent autorisée pour tous les utilisateurs)
Vérifier si des services Windows tournent comme SMB
. La configuration utilisateur et d'authentification peut être intéressant.
Lister les programmes à High Integrity
(l'intégrité est une graduation équivalente au système d'SUID
sous Linux).
Très souvent dans les CTF
, on obtient un privesc
en faisant exécuter des instructions par l'Administrator
en modifiant un fichier utilisé dans une tâche du Task Scheduler
(équivalent Microsoft de CRON
). Pensez à vérifier les fichiers récemment modifiés.
Plus rarement, si vous avez les droits d'écriture sur des répertoires de DLL
(Dynamic-link library
équivalent des Shared libraries
(SO
pour Shared Objects
) sous Linux) alors il vous est possible de modifier un DLL
utilisé par un programme privilégié à des fins malveillantes (injections DLL
). On peut également modifier des chemins vers des DLL
ou bien injecter des DLL
dans un processus en cours d'exécution via faille de type buffer overflow ou en ayant simplement un privilège assez élevé pour utiliser une fonction système (équivalent des syscalls
sous Linux) d'injection dans un processus tier, plusieurs méthodes existent et sont à explorer.
En dernier recours, il est possible d'utiliser , un script bash permettant d'automatiser la détection de vecteurs de privesc en réalisant de nombreux checks différents.
Si c'est un CTF
, pensez à regarder les fichiers cachés avec des .
Vous pouvez également consulter sur les commandes pratiques de . Pour ce qui est d'une analyse plus approfondie, vous pouvez consulter la page de . Elle contient de nombreux scripts et de nombreuses astuces.
Windows étant un bordel monstrueux avec des fonctionnalités contradictoires, des bouts de codes legacy isolés et toujours fonctionnels, des objets construits en mille-feuille par souci de rétro-compatibilité, il existe de très nombreuses manières originales de faire de la privesc
dans le cadre d'un CTF
par exemple. En situation réelle, ça sera surtout des erreurs de configuration d'.