Privilege Escalation

Linux

Mindmap sur la privesc linux : Mindmap

Pour tout ce qui est exploitation d'SUID ou sudo, la liste GTFOBins 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 Fast Searching.

#Lister les fichiers récemment modifiés (il y a moins de deux heures)
find / -mmin -120 -ls
#Lister la configuration sudo pour l'utilisateur courant
sudo -l
#Lister les binaires configurés en SUID
find / -perm -u=s -type f 2>/dev/null
#Consulter les tâches CRON du root
crontab -u root -l
#Consulter les tâches CRON de l'utilisateur courant
crontab -l
#Consulter les tâches CRON globales
cat /etc/crontab
#Lister les capabilities configurées
getcap -r / 2>/dev/null
#Lister les disques montés et leurs permissions
mount
# Lister les services qui tournent sur le système (si iproute2 est installé)
ss -tulnp

En dernier recours, il est possible d'utiliser linPEAS, un script bash permettant d'automatiser la détection de vecteurs de privesc en réalisant de nombreux checks différents.

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 :

Élément
Description
Importance

/etc/shadow

Les mots de passe sont stockés ici, chiffrés ainsi que d'autres informations (shell/nologin)

Critique

/etc/sudoers

Fichier de configuration des privilèges des utilisateurs concernant l'utilisation de l'utilitaire sudo

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

/etc/environment ~/.bashrc, etc..

Ce sont généralement dans ces fichiers qui sont stockés les variables d'environnement, notamment l'envpath. Modifier de telles valeurs permettrait de manipuler l'execution de programmes et de tâches CRON.

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

Mindmap pour la privesc Windows : Mindmap

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).

  • Si c'est un CTF, pensez à regarder les fichiers cachés avec des Alternate Data Streams.

  • 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.

# Lister les variables d'environnement pour une première prise de vue
Get-ChildItem Env:
# Lister les fichiers avec High Integrity
icacls C:\chemin\vers\dossier /Q /C /T | findstr /C:"NO S-1-16-12288"
# Consulter le registre (https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query)
reg query
# Lister les processus en cours d'éxecution
Get-Process
# Lister les fichiers modifiés dans les deux dernières minutes (Privesc par Task Scheduler)
Get-ChildItem -Path C:\chemin\vers\dossier\ -Recurse | ? {
  $_.LastWriteTime -gt (Get-Date).AddSeconds(-120) 
} | Select-Object -ExpandProperty FullName
# Lister tous les fichiers cachés (sauf Alternate Data Streams)
Get-ChildItem -Path "C:\Chemin\Repertoire" -Force -Hidden *
# Lister les Alternate Data Streams potentiels dans un CSV.
Pushd C:\chemin\vers\dossier
Get-ChildItem -Recurse | ForEach-Object {
  Get-Item $_.FullName -Stream *
} | Where-Object Stream -ne ':$Data' | 
      Select-Object FileName,Stream,
        @{n='CreationTime';e={(Get-Item $_.FileName).CreationTime}},
        @{n='LastWriteTime';e={(Get-Item $_.FileName).LastWriteTime}},
        @{n='Content';e={gc "$($_.FileName):$($_.Stream)"}} |
          Export-Csv Streams.csv -NoTypeInformation

Vous pouvez également consulter ma page sur les commandes pratiques de PowerShell. Pour ce qui est d'une analyse plus approfondie, vous pouvez consulter la page de PayloadsAllTheThings prévue à cet effet. Elle contient de nombreux scripts et de nombreuses astuces.

Dernière mise à jour

Cet article vous a-t-il été utile ?