Archives mensuelles : juillet 2015

Les permissions d’un share

Dans cet article, nous avions exploré les fonctions de Netapi32.dll pour récupérer des informations relatives aux shares SMB.

Nous allons maintenant voir comment récupérer les permissions de ces shares.

Il existe des fonctions qui gèrent les SIDs, ACLs, et ACEs dans advapi32.dll, et nous allons capitaliser sur l’article concernant le Netapi pour en faire un tout, et lire les permissions sans passer par WMI.

Tout d’abord voici une nouvelle version du script netapi.ps1:

Il faudra avec cette version dot-sourcer le script pour que les cmdlets soient définies:

 

Une fois les cmdlets définies nous allons avoir besoin de celle qui récupère le level 502 des shares:

et avec cet array, nous allons pour chaque élément vérifier si le SecurityDescriptor est présent. Pour ensuite récupérer l’ACL dans un buffer en mémoire.

A partir de l’ACL nous pouvons récupérer l’ACE qui contient le SID et la permission.

Avec un peu de gymnastique de pointeurs et buffers de structures, nous allons pouvoir traduire tout cela en objets Powershell qui peuvent être utilisés.

Voici le script complet:

L’output est simple mais peut être adapté:

Sans les mains WMI.

Voici l’article de référence en C# qui traite de ce sujet http://blogs.msdn.com/b/dsadsi/archive/2012/03/30/to-read-shared-permissions-of-a-server-resource-in-c-using-netsharegetinfo.aspx

Voici un mise à jour du script d’exemple, cette nouvelle version traite le problème de l’exception « Some or all identity references could not be translated. ».

Pour régler ce problème nous allons récupérer la liste des utilisateurs locaux d’une machine donnée et comparer les SIDs sans passer par Translate.

 

Voici le script en entier (renseigner $server en début du script):