Bases de l'élévation de privilèges Windows

J'ai décidé pour moi et pour ceux qui le trouveraient utile, de rassembler tout ce que je sais, mais je ne me souviens pas sur le sujet, dans cet article. Partagez des conseils. La principale source de cet article est la suivante .

J'ai librement traduit et ajouté un peu de moi-même, ce que j'ai rassemblé et appris d'autres sources.

En général, voici des moyens de nous aider à atteindre notre objectif d'élévation de privilèges.

Le point de départ de ce court article est un shell (compte) non privilégié. Peut-être que nous avons utilisé un exploit ou effectué une attaque et obtenu cet obus.

Fondamentalement, au départ, nous ne comprenons pas la machine: ce qu'elle fait, à quoi elle est connectée, quel niveau de privilèges nous avons, ou même quel système d'exploitation c'est.

Tout d'abord, nous devons obtenir les informations dont nous avons besoin pour comprendre où nous en sommes et ce que nous avons:

systeminfo | findstr /B /C:" " /C:" " 

Cette commande vous permet de déterminer, comme vous pouvez le voir, le nom et la version du système d'exploitation. Vous pouvez l'exécuter sans paramètres, alors la sortie de la commande sera plus complète, mais cela nous suffit.

Ensuite, il est important de connaître le nom de la machine et le nom d'utilisateur sous lequel nous sommes connectés.

  • hostname est le nom d'utilisateur.
  • echo% username% - nom d'utilisateur.

Ensuite, voyons quels utilisateurs sont toujours sur cet hôte et obtenons des informations plus détaillées sur leur utilisateur.

  • utilisateurs nets - autres utilisateurs
  • net user user1 - informations détaillées sur l'utilisateur, où user1 est le nom de votre utilisateur.

Après avoir reçu des informations sur le compte, nous verrons des informations sur l'interaction réseau de cet hôte.

Jetez d'abord un œil aux interfaces disponibles et à la table de routage.

  • ipconfig / all - informations sur les interfaces disponibles.
  • impression d'itinéraire - table de routage
  • arp -A - table des entrées d'arp

Ensuite, nous verrons les connexions réseau actives et les règles de pare-feu.

  • netstat -ano - connexions réseau actives.

-a - le lancement avec ce paramètre affiche toutes les connexions TCP actives, ainsi que les ports TCP et UDP écoutés par le système;
-n - le paramètre vous permet d'afficher les connexions TCP actives avec des adresses et des numéros de port;
-o - identique à la clé précédente, affiche les connexions TCP actives, mais des codes de processus sont ajoutés aux statistiques, il est déjà possible de déterminer exactement quelle application utilise la connexion.

  • état d'affichage du pare-feu netsh - état du pare-feu
  • netsh firewall show config - configuration du pare-feu

Enfin, nous examinons brièvement ce qui fonctionne sur un hôte compromis: tâches planifiées, processus en cours d'exécution, services en cours d'exécution et pilotes installés.

 schtasks /query /fo LIST /v 


/ query - Affiche des données sur toutes les tâches planifiées,
/ fo LIST - Affiche la sortie.
/ v - Imprimer les détails du travail.

La commande suivante associe les processus en cours d'exécution aux services en cours d'exécution.

 tasklist /SVC 


/ SVC - Services de mappage pour chaque processus.

Consultez également la liste des services Windows en cours d'exécution.

 net start 

Il est également utile de voir des informations sur les pilotes d'un système compromis.

 DRIVERQUERY 

Ensuite, je veux mentionner probablement la commande Windows la plus utile - wmic. La commande WMIC (Windows Management Instrumentation Command) est utilisée pour obtenir des informations sur le matériel et le système, gérer les processus et leurs composants et modifier les paramètres à l'aide des capacités de Windows Management Instrumentation (Windows Management Instrumentation ou WMI). Bonne description .

Malheureusement, certaines configurations Windows n'autorisent pas l'accès à WMIC par défaut si l'utilisateur n'est pas membre du groupe Administrateurs (ce qui est une très bonne idée). Toute version de XP ne permettait pas d'accéder à WMIC à partir d'un compte non privilégié.

En revanche, Windows 7 Professionnel et Windows 8 Entreprise ont permis aux utilisateurs disposant de faibles privilèges d'utiliser WMIC par défaut.

Comme d'habitude - paramètres du programme:

 wmic /? 

Un bon script pour collecter des informations via wmic.

Avant de continuer, il vaut la peine de parcourir les informations collectées. Il convient également de prêter attention aux correctifs installés dans le système, car toute information sur les trous dans le système nous donnera un support supplémentaire pour augmenter nos privilèges. HotFix peut rechercher des vulnérabilités d'élévation de privilèges.

Ensuite, nous considérerons une installation sans assistance. S'il est nécessaire d'installer et de configurer une grande flotte de machines, alors en règle générale, le personnel technique ne se déplacera pas de machine en machine pour configurer chaque machine personnelle. Il existe plusieurs solutions pour une installation sans assistance. Ce n'est pas si important pour nous quelles sont ces méthodes et comment elles fonctionnent, mais ce qui importe, c'est qu'elles laissent les fichiers de configuration utilisés pour le processus d'installation qui contiennent de nombreuses informations confidentielles, telles que la clé de produit du système d'exploitation et le mot de passe administrateur. Ce qui nous intéresse le plus, c'est le mot de passe administrateur, que nous pouvons utiliser pour augmenter nos privilèges.

En règle générale, ce sont les répertoires suivants:

  • c: \ sysprep.inf
  • c: \ sysprep \ sysprep.xml
  • % WINDIR% \ Panther \ Unattend \ Unattended.xml
  • % WINDIR% \ Panther \ Unattended.xml

Mais cela vaut la peine de vérifier l'ensemble du système.

Ces fichiers contiennent des mots de passe en texte clair ou encodés en BASE64.
Exemples:

Sysprep.inf - mot de passe en texte clair.

"

Sysprep.xml - mot de passe encodé en base64.

"

Unattended.xml - mot de passe encodé en base64.



De plus, pour les hôtes connectés au domaine, vous pouvez rechercher le fichier Group.xml, qui contient le mot de passe chiffré AES256, mais qui peut être déchiffré, car la clé est publiée sur msdn (https://msdn.microsoft.com/en-us/library/cc422924.aspx) et d'autres sources. Mais c'est le cas si la politique de création d'utilisateurs locaux sur les hôtes ou, par exemple, la définition d'un mot de passe pour un administrateur local est utilisée.

Par exemple, j'ai ici:



Après l'avoir ouvert, nous recherchons le paramètre «cpassword».



Ensuite, vous devez décrypter cette séquence. Nous utilisons, par exemple, CrypTool . Tout d'abord, décodez Base64.
Les fonctionnalités de Base64 sont que sa longueur doit être un multiple de 4. Par conséquent, nous considérons des blocs de 4, et s'il n'y a pas assez de caractères dans le dernier bloc, nous ajoutons les caractères manquants avec «=».
J'ai eu 2 "=".



Ensuite, nous décryptons. En utilisant la clé ci-dessus.



Nous supprimons les points supplémentaires séparant les caractères et obtenons le mot de passe.

En plus de Group.xml, voici quelques autres fichiers de préférence de stratégie qui peuvent avoir un ensemble supplémentaire d'attributs cPassword:

  • Services \ Services.xml
  • ScheduledTasks \ ScheduledTasks.xml
  • Imprimantes \ Printers.xml
  • Drives \ Drives.xml
  • DataSources \ DataSources.xml

Cependant, nous aimons tous les solutions automatisées, afin que nous puissions arriver à la ligne d'arrivée le plus rapidement possible. Il y a deux options principales ici, selon le type de shell / accès que nous avons. Il existe un module métasploit qui peut être exécuté via une session établie (https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp) ou vous pouvez utiliser Get-GPPPassword, qui fait partie de PowerSploit .

D'accord, ensuite. Nous rechercherons l'étrange paramètre de registre «AlwaysInstallElevated». Cette option permet aux utilisateurs non privilégiés d'installer des fichiers .msi à partir de NT AUTHORITY \ SYSTEM.

Afin de pouvoir utiliser cela, nous devons vérifier que les deux clés de registre sont installées, et si c'est le cas, nous pouvons obtenir un shell SYSTEM. Vérifier:

 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

Metasploit comprend un module spécial exploit / windows / local / always_install_elevated, qui crée un fichier MSI avec un fichier exécutable spécial intégré, qui est extrait et exécuté par l'installateur avec des privilèges système. Après son exécution, le fichier msi arrête l'installation afin d'empêcher l'enregistrement des actions dans le système. De plus, si vous démarrez l'installation avec le commutateur / quiet, vous n'obtiendrez même pas d'erreur.

Eh bien, quelques commandes de recherche utiles sur le système:

La commande ci-dessous va rechercher dans le système de fichiers les noms de fichiers contenant des mots clés spécifiques. Vous pouvez spécifier n'importe quel nombre de mots-clés.

 dir /s *pass* == *cred* == *vnc* == *.config* 

En recherchant des types de fichiers spécifiques par mot-clé, cette commande peut générer beaucoup de sortie.

 findstr /si password *.xml *.ini *.txt 

De même, les deux commandes ci-dessous peuvent être utilisées pour grep le registre pour les mots clés, dans ce cas, "mot de passe".

 reg query HKLM /f password /t REG_SZ /s 

 reg query HKCU /f password /t REG_SZ /s 

Pour le moment, nous en avons déjà assez pour faire fonctionner le système. Mais il y a quelques attaques plus ciblées pour obtenir le résultat souhaité: nous examinerons les services Windows et les autorisations pour les fichiers et les dossiers. Notre objectif ici est d'utiliser des autorisations faibles pour améliorer les privilèges de session.

Nous allons vérifier de nombreux droits d'accès, accesschk.exe, qui est un outil de Microsoft Sysinternals Suite, nous y aidera. Microsoft Sysinternals contient de nombreux excellents outils. Le package peut être téléchargé à partir du site Web de Microsoft Technet (https://docs.microsoft.com/ru-ru/sysinternals/downloads/sysinternals-suite).

Nous pouvons vérifier le niveau de privilège requis pour chaque service en utilisant accesschk.

Nous pouvons voir les autorisations dont dispose chaque niveau d'utilisateur.



Accesschk peut vérifier automatiquement si nous avons un accès en écriture à un service Windows avec un niveau d'utilisateur spécifique. En règle générale, en tant qu'utilisateur avec de faibles privilèges, nous voulons vérifier les «Utilisateurs». Assurez-vous de vérifier à quels groupes d'utilisateurs vous appartenez.

-c Le nom est un service Windows, par exemple ssdpsrv (spécifiez «*» pour afficher tous les services)
-d Uniquement traiter les répertoires
-e Afficher uniquement les niveaux d'intégrité explicitement spécifiés (Windows Vista uniquement)
-k Le nom est une clé de registre, par exemple, hklm \ software
-n Afficher uniquement les objets qui n'ont pas de règles d'accès
-p Le nom ou l'identificateur de processus (PID) est spécifié comme nom, par exemple cmd.exe (spécifiez «*» comme nom pour afficher tous les processus)
-q Omettre l'en-tête
-r Imprime uniquement les objets ayant un accès en lecture
-s Traitement récursif
-v Imprimer des informations détaillées
-w Liste uniquement les objets ayant un accès en écriture



Il y a aussi une autre commande intéressante:

 autorunsc.exe -a | findstr /n /R "File\ not\ found" 

Vous permet de trouver une entrée de registre sur un fichier qui a été lancé automatiquement, mais qui est déjà manquant dans le système. L'enregistrement pourrait rester si, par exemple, le service était incorrectement supprimé. À chaque démarrage, le système essaie sans succès d'exécuter ce fichier. Vous pouvez également profiter de cette situation pour étendre votre autorité. Remplacez simplement ce fichier par le nôtre.

Ensuite, nous considérons deux vulnérabilités:

Premièrement: reproduire les résultats d'un article écrit par Parvez de GreyHatHacker; «Élever les privilèges en exploitant des autorisations de dossier faibles» (http://www.greyhathacker.net/?p=738).

Cet exemple est un cas particulier de détournement de DLL. Les programmes ne peuvent généralement pas fonctionner seuls, ils ont de nombreuses ressources dont ils ont besoin pour se connecter (principalement des DLL, mais aussi leurs propres fichiers). Si un programme ou un service télécharge un fichier à partir d'un répertoire dans lequel nous avons un accès en écriture, nous pouvons en abuser pour lancer un shell avec des privilèges sous lesquels le programme s'exécute.

En règle générale, une application Windows utilise des chemins de recherche prédéfinis pour trouver la DLL, et elle vérifie ces chemins dans un ordre spécifique. Le détournement de DLL se produit généralement en plaçant des DLL malveillantes sur l'un de ces chemins. Ce problème peut être résolu en indiquant à l'application des chemins absolus vers la DLL requise.

Ordre de recherche dll:

  1. Le répertoire à partir duquel l'application s'exécute
  2. Répertoire système 32 bits (C: \ Windows \ System32)
  3. Répertoire système 16 bits (C: \ Windows \ System)
  4. Répertoire Windows (C: \ Windows)
  5. Répertoire de travail actuel (CWD)
  6. Répertoires dans la variable d'environnement PATH (système puis utilisateur)

Parfois, les applications essaient de télécharger les fichiers dll manquants sur la machine. Cela peut se produire pour plusieurs raisons, par exemple, si la bibliothèque dll n'est requise que pour certains plug-ins ou composants qui ne sont pas installés. Dans ce cas, Parvez a découvert que certains services Windows tentaient de charger des bibliothèques de DLL qui n'existent pas dans les paramètres par défaut.

Puisque la DLL n'existe pas, nous finissons par parcourir tous les chemins de recherche. En tant qu'utilisateur avec un faible niveau de privilège, nous avons peu de chances de mettre une DLL malveillante dans les éléments 1-4, 5. Mais si nous avons un accès en écriture à l'un des répertoires, alors nos chances de gagner sont grandes.

Voyons comment cela fonctionne dans la pratique, pour notre exemple, nous utiliserons le service IKEEXT (modules de clés IPSec IKE et AuthIP) qui essaie de télécharger wlbsctrl.dll.

Tout répertoire dans "C: \" fournira un accès en écriture aux utilisateurs authentifiés, cela nous donne une chance.

 C:\Users\user1\Desktop> accesschk.exe -dqv "C:\Python27" 

 C:\Python27 Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE SYNCHRONIZE READ_CONTROL RW NT AUTHORITY\Authenticated Users FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL 

 C:\Users\user1\Desktop> icacls "C:\Python27" 

 C:\Python27 BUILTIN\Administrators:(ID)F BUILTIN\Administrators:(OI)(CI)(IO)(ID)F NT AUTHORITY\SYSTEM:(ID)F NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(ID)F BUILTIN\Users:(OI)(CI)(ID)R NT AUTHORITY\Authenticated Users:(ID)C NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(ID)C 

F - accès complet.
(OI) - héritage par les objets.
(CI) - héritage par conteneurs.
(IO) - uniquement l'héritage.
(NP) - une interdiction de la distribution de l'héritage.
(I) - hérite des autorisations du conteneur parent.

Avant de poursuivre l'action, vous devez vérifier l'état du service IKEEXT. Dans ce cas, nous pouvons voir qu'il est réglé sur "AUTO_START"!

 sc qc IKEEXT 

 [SC] QueryServiceConfig SUCCESS SERVICE_NAME: IKEEXT TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : IKE and AuthIP IPsec Keying Modules DEPENDENCIES : BFE SERVICE_START_NAME : LocalSystem 

Maintenant, nous savons que nous avons les conditions nécessaires, et nous pouvons créer une DLL malveillante et intercepter le shell!

Nous utilisons Metasploit -> msfvenom, par exemple.



Après avoir transféré evil.dll sur notre ordinateur cible, tout ce que nous avons à faire est de le renommer en wlbsctrl.dll et de le déplacer vers «C: \ Python27». Une fois cela fait, nous devons attendre patiemment le redémarrage de la machine (ou nous pouvons essayer de forcer le redémarrage), et nous obtiendrons le shell du système.

 copy evil.dll C:\Python27\wlbsctrl.dll 

Après cela, il ne reste plus qu'à attendre le redémarrage du système.

Pour notre dernier exemple, nous considérerons les tâches planifiées. Je décrirai le principe, car tous peuvent avoir des cas différents.

On retrouve le processus, le service, l'application lancée par le planificateur de tâches de SYSTEM.
Nous vérifions les droits d'accès au dossier où se trouve notre cible.

 accesschk.exe -dqv "__" 

Il est clair qu'il s'agit d'un grave problème de configuration, mais pire encore est le fait que tout utilisateur authentifié (utilisateur authentifié) a un accès en écriture à ce dossier. Dans cet exemple, nous pouvons simplement remplacer l'exécutable binaire par le fichier généré par metasploit.

Peut être encodé en option.



Il ne reste plus qu'à télécharger le fichier exécutable malveillant et à l'écraser dans le dossier des fichiers exécutables. Une fois cela fait, nous pouvons aller au lit en toute sécurité et faire une marche systémique tôt le matin.

Ces deux exemples devraient nous donner une idée des vulnérabilités à rechercher lors de l'examen des autorisations pour les fichiers et les dossiers. Il faudra du temps pour apprendre tous les chemins binpath pour les services Windows, les tâches planifiées et les tâches d'exécution automatique.

Enfin, quelques conseils pour utiliser accesschk.exe.

Trouvez toutes les autorisations faibles pour les dossiers sur le disque.

 accesschk.exe -uwdqs Users c:\ accesschk.exe -uwdqs "Authenticated Users" c:\ 

Trouvez toutes les autorisations faibles pour les fichiers sur le disque.

 accesschk.exe -uwqs Users c:\*.* accesschk.exe -uwqs "Authenticated Users" c:\*.* 

Comme tout.

Source: https://habr.com/ru/post/fr418441/


All Articles