[Windows/Persistence] Cheat-sheet
Introduction
Cette page est un mémo des techniques et outils que l'on peut utiliser sur un système compromis à des fins de persistence.
Cheat-sheet
Mettre l'utilisateur dans un groupe privilégié
Il s'agit d'une technique simple qui consiste à utiliser un utilisateur non privilégié pour le mettre dans le groupe administrateur et passer sous les radars :
net localgroup administrators <USER> /add
Si ce groupe vous semble suspect, vous pouvez utiliser le groupe Backup Operators qui ne bénéficie pas des privilèges administrateurs mais profite d'un accès en lecture/écriture à tout le système :
net localgroup "Backup Operators" <USER> /add
Sinon, deux autres groupes non privilégiés mais ayant le droit d'utiliser RDP et WinRM (pour evil-winrm) sont :
- Remote Desktop Users
- Remote Management Users
Par défaut, le groupe Backup Operator est désactivé à cause de l'UAC. Son activation passe par une clé de registre :
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1
Ajouter un privilège à un utilisateur
Exporte la configuration actuelle dans le fichier config.inf :
secedit /export /cfg config.inf
Ensuite on peut éditer ce fichier pour ajouter un utilisateur sur les privilèges souhaités :
Ici, l'utilisateur thmuser2 bénéfiera des privilèves SeBackupPrivilege et SeRestorePrivilege.
Ensuite, on peut importer la nouvelle configuration et actualiser la base de donnée:
secedit /import /cfg config.inf /db config.sdb
secedit /configure /db config.sdb /cfg config.inf
Autoriser WinRM
On peut autoriser l'accès par WinRM à certains utilisateurs en exécutant la commande suivante depuis un environnement graphique afin d'ouvrir la boîte de dialogue adéquate :
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI
On peut ensuite sélectionner l'utilisateur souhaité et cocher la case Full Control :
Ainsi, l'utilisateur thmuser2 pourra utiliser le service WinRM sans être dans le groupe Remote Management Users.
Changer le RID d'un utilisateur
L'objectif de la manoeuvre va être de changer le RID (Relative ID) de l'utilisateur souhaité pour le définir sur 500 (utilisé par l'administrateur).
Pour cela, ouvrez la base de registre avec PsExec pour bénéficier des droits System depuis un shell administrateur :
PsExec64.exe -i -s regedit
On peut ensuite se rendre à l'emplacement HKLM\SAM\SAM\Domains\Account\Users\ dans la base de registre :
Dans notre cas, le RID de l'utilisateur est 1010 en décimal, ce qui donne 0x3F2 en hexadécimal.
On sélectionne la clé F et on édite l'entrée à la ligne 0x30 (voir la capture ci-dessus) où on retrouve le RID de l'utilisateur.
On peut ensuite l'éditer en sélectionnant les deux octets et en faisant clic droit puis Cut.
Ensuite, nous devons entrer la valeur 500 en décimal ce qui donne 0x01F4 en hexadécimal.
Il faut noter que c'est du Little Endian donc la notation est inversée. On doit donc entrer la valeur F401.
De cette manière, l'utilisateur sera considéré comme un administrateur par le système.