Le Kerberoasting avec PowerShell
Comprendre et mener une attaque Kerberoasting sur un compte avec un ServicePrincipalName
Pour ça j’avais envie de vous partager une commande assez spécifique mais qui peut avoir son utilité : Invoke-Expression
Ma fonction :
function LaFormuleMagique {
param([Int64]$i)
$expression = ([string]$i).ToCharArray() -join '+'
$result = Invoke-Expression -Command $expression
return $result
}
En version courte, le cœur de la fonction peut être résumé à : iex("$i".ToCharArray()-join'+')
On va y aller étape par étape :
([string]$i)
: permet de convertir le nombre entier en une chaine de caractères
PS C:\> $i = [string]2568
.ToCharArray()
: une fois que l’entier est transformé, on peut utiliser la méthode ToCharArray pour convertir la chaine “2568” en un tableau avec les valeurs 2, 5, 6 et 8
PS C:\> $i = $i.ToCharArray()
PS C:\> $i
2
5
6
8
-join '+'
: on réassemble ensuite le tableau en joignant les caractères entre eux avec un “+”
PS C:\> $i = $i -join '+'
PS C:\> $i
2+5+6+8
Une fois notre chaine de caractère prête, il ne reste plus qu’à l’interpréter comme une ligne de commande. Et pour ça on peut utiliser la commande Invoke-Expression
(iex
pour les intimes) :
PS C:\> Invoke-Expression $i
21
Trouvée par @Clément Vigier.
Ici pas le temps de niaiser, on va aller directement à la solution sans chercher à utiliser une commande aussi peu efficace que Invoke-Expression
. On va utiliser une méthode différente pour découper notre nombre (via -split
) et l’incontournable commande Measure-Object
pour compter la somme de nos chiffres. Voilà ce que ça donne en code :
function LaFormuleMagique {
param([Int64]$i)
$result = $i -split '' | Measure-Object -Sum
return $result.Sum
}
On commence par découper notre nombre via un -split ''
qui a un avantage et un inconvénient par rapport à la méthode que j’ai utilisé. D’un côté il n’y a pas besoin de convertir notre nombre en une chaine de caractère, mais de l’autre côté : découper un nombre de quatre chiffres nous donne 6 items en résultat :
PS C:\> 2568 -split ''
2
5
6
8
Si vous ne voyez pas les six items, sachez qu’il y a un item vide avant le 2 et un item vide après le 8. Vous pouvez vous en débarrasser avec la méthode .Trim()
si ça vous dérange, mais dans notre cas ils n’auront aucun impact sur notre calcul puisque 0+2+5+6+8+0 donne le même résultat que 2+5+6+8. Il ne nous reste plus qu’à calculer la somme de tous nos chiffres, et pour ça on utilise la commande Measure-Object
qui permet de faire bien plus que simplement compter le nombre d’items dans une collection.
En effet, Measure-Object
permet de :
On va donc utiliser le paramètre -Sum
pour demander à PowerShell de nous calculer la somme des chiffres présents dans notre liste.
Comprendre et mener une attaque Kerberoasting sur un compte avec un ServicePrincipalName