Auto élévation de privilèges en PowerShell

élévation de privilèges en PowerShell

Salut à tous, aujourd’hui on va s’intéresser au RunAs dans PowerShell, et plus particulièrement comment faire une élévation de privilèges en PowerShell. J’ai récemment eu besoin de distribuer un script à quelques utilisateurs, tous administrateur local de leur poste, pour qu’ils l’exécutent en tant qu’admin.

Je vous passe les détails, mais comme il n’y avait pas que des utilisateurs avancés en PowerShell, il me fallait un mode « clic-clic un peu propre » pour qu’ils lancent le script via un batch à la souris.

D’autant plus que le script jardine dans le registre et les fichiers système tout en utilisant des paramètres interactifs, en chemin relatif (puisqu’on ne sait pas où sur le poste nos utilisateurs vont exécuter le livrable). Et le tout sur des configuration de postes sécurisés qui ne me laissaient pas faire ce que je voulais via le traditionnel runas.exe.

Le diable est dans les détails… J’ai galéré un moment pour trouver un enchainement propre de mon .cmd et du .ps1, qui permet de s’affranchir des problématiques de chemin de fichiers, sans utiliser runas.exe.

Au final je m’en suis sortie comme ça.

Reconstruction du chemin dans le script CMD

C’est la partie la plus simple, vous … Lire la suite

Get-Date en "locals" US – PowerShell

Get-Date en "locals" US

Salut à tous, aujourd’hui une brève astuce dont on a eu besoin au boulot : comment sortir un Get-Date en « locals » US (ou une autre timezone, hein). En tout cas un local différent de celui de votre console. Exemple, si je saisi dans ma console :

(Get-Date).tostring("MMM d HH:mm:ss")
déc. 12 15:17:04

Je me retrouve avec un bel accent bien français sur « é » de « décembre ».

Sauf que parfois souvent, on a besoin que le format de sortie soit homogène entre différentes machines sur tout un parc. Par exemple, quand toutes ces machines parlent à un unique SIEM (au hasard… Splunk ?). C’est beaucoup plus simple si le timestamp arrive dans le même pattern quelque soient les sources.

Et donc, comment qu’on fait pour sortir un Get-Date en « locals » US ? Tout simplement, comme ça :

$LocaleUS = New-Object System.Globalization.CultureInfo("en-US")
(Get-Date).tostring("MMM d HH:mm:ss",$LocaleUS)
Dec 12 15:22:22 

Vous la voulez en UTC votre date, en plus ? Histoire que tout le monde parle dans le même référentiel ? Rien de plus simple :

$Timestamp = ((Get-Date).ToUniversalTime()).tostring("MMM d HH:mm:ss",$LocaleUS)
Dec 2 14:24:46

Et voilà, c’est tout bête, mais c’est bien pratique dès que vos scripts … Lire la suite

CVE-2019-12757, on fait le point…

CVE-2019-12757

Salut à tous, aujourd’hui je vous redirige vers une lecture intéressante sur la dernière grosse CVE du client Symantec, poétiquement nommée CVE-2019-12757.

Je vous la fait courte c’est un bon gros « local to root » basé sur une mauvaise affectation des droits sur dans une clé de registre utilisé par SEP pour lancer un programme. Au final un utilisateur peut modifier cette clé et faire exécuter en SYSTEM un programme arbitraire par SEP.

Et du coup, c’est specterops qui à découvert et documenté la vuln et c’est par ici que ça se passe pour le détail :

https://posts.specterops.io/cve-2019-12757-local-privilege-escalation-in-symantec-endpoint-protection-1f7fd5c859c6

Et le code de l’exploit est lui ici :

https://gist.github.com/enigma0x3/5dbb9a72b592992b27dd703edb4c20b1

Pour ceux qui auront été voir, C’est pas bien compliqué a exploiter (mais beaucoup plus à trouver). Du coup, je vous incite vivement à mettre à jour les clients SEP (de vos parcs d’entreprises ?) si nécessaire. Et si vous n’avez pas peur des méchants pirates, craignez au moins vos utilisateurs qui vont y trouver enfin un moyen facile de passer admins local sur leur poste « sécurisé ».

Voilà, j’ai pas grand chose de plus à vous dire sur la CVE-2019-12757. Aller voir les deux liens c’est de la … Lire la suite

API REST en PowerShell – développez avec Polaris !

API REST en PowerShell

Salut à tous, on va se faire un joli morceau aujourd’hui. On va voir comment développer une API REST en PowerShell et du comment coup piloter des scripts via du CURL sur linux, ou avec Invoke-RESTMethod en PowerShell.

Notez que cet article a été rédigé en collaboration avec ArnaudPETITJEAN de PowerShell-Scripting.com. Merci à lui !

C’est quoi une API REST ?

C’est un peu complexe à définir entièrement, d’ailleurs la définition de Wikipédia est floue au possible, mais je pense qu’on peut faire simple en disant que c’est simplement une API (bravo Sherlock… et si vous ne savez pas ce qu’est une API, je pense que c’est pas la peine d’aller plus loin 😉 ). Une API REST s’appelle non pas en important une bibliothèque dans un script (comme en C ou Python par exemple) mais en faisant une simple requête Web HTTP(S). L’action sera exécutée par le serveur qui expose l’API et vous pourrez exploiter le résultat directement dans votre script.

Les API REST sont à la mode depuis quelques années, notamment chez les DevOps. Elles présentent souvent les avantages d’être simples, interopérables, légères et accessibles à distance. Si vous cherchez des alternatives à REST, vous … Lire la suite