Installation d’ExeGol sur Windows avec WSL

Installer ExeGol sur Windows en utilisant Windows Terminal et WSL, créant ainsi un environnement de développement performant en quelques étapes.

Installer Exegol Sur Linux dans un WSL2 de Windows 10

Prérequis :

  1. Pour installer Windows Terminal via Winget, assurez-vous d’avoir Windows 10 version 18362.0 ou supérieure, car Winget est disponible à partir de cette version.
  2. Avant d’activer le sous-système Windows pour Linux (WSL), assurez-vous que vous exécutez Windows 10 version 1903 ou ultérieure, car WSL 2 est disponible à partir de cette version.
  3. Pour installer Exegol, Windows 10 KB5020030 ou une version ultérieure est nécessaire ou Windows 11.
  4. Assurez-vous d’exécuter toutes les commandes PowerShell en tant qu’administrateur.

Installation de Windows Terminal

Windows Terminal est une application en ligne de commande moderne qui vous permet d’accéder facilement à différents terminaux, y compris le PowerShell, le CMD, et les distributions Linux. Voici comment l’installer :

  1. Ouvrez PowerShell en tant qu’administrateur. Pour ce faire, recherchez “PowerShell” dans le menu Démarrer, cliquez avec le bouton droit de la souris sur “Windows PowerShell” et choisissez “Exécuter en tant qu’administrateur.”

  2. Vérifiez si Windows Terminal est déjà installé en utilisant la commande suivante :

1
Get-AppxPackage -Name *Microsoft.WindowsTerminal*
  1. Si Windows Terminal n’est pas installé, vous pouvez l’installer en utilisant Winget (l’outil de gestion des paquets de Microsoft) avec la commande :
1
winget install Microsoft.WindowsTerminal
  1. Enfin pour l’ouvrir
1
start wt -verb RunAs

Activation du sous-système Windows pour Linux

Le sous-système Windows pour Linux (WSL) est une fonctionnalité de Windows qui vous permet d’exécuter un noyau Linux sur votre système.

  1. Vérifiez si WSL est déjà activé avec la commande suivante :
1
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  1. Si WSL n’est pas activé, activez-le en utilisant la commande :
1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  1. Vous pouvez également vérifier si la plateforme de machine virtuelle est déjà activé avec la commande suivante :
1
Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
  1. Cette fonctionnalité est nécessaire pour utiliser WSL 2, si elle n’est pas activé, activez-la en utilisant la commande :
1
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
  1. Redémarrez votre ordinateur pour appliquer les modifications :
1
Restart-Computer

Installation d’une distribution Linux

Maintenant que le sous-système Windows pour Linux est activé, vous pouvez installer une distribution Linux de votre choix. Dans cet exemple, nous utiliserons Ubuntu.

  1. Ouvrez Windows Terminal, et installer Ubuntu avec la commande suivante :
1
wsl --install
  1. Mettre à jour Ubuntu et le redémarrer
1
2
sudo apt update && sudo apt upgrade
exit
  1. Redémarrer WSL et relancer Ubuntu
1
2
wsl --shutdown
ubuntu

Vérifier que le service systemd soit activé :

  1. Vérification du contenu de /etc/wsl.conf :
  • Vous pouvez d’abord vérifier si le fichier /etc/wsl.conf existe et s’il contient la configuration nécessaire pour activer systemd.
1
cat /etc/wsl.conf
  • Si le fichier existe et contient la ligne [boot] systemd=true, alors systemd est activé. Cette ligne indique à WSL d’utiliser systemd comme init lors du démarrage de la distribution Linux.
  1. Création de /etc/wsl.conf (si nécessaire) :
  • Si le fichier /etc/wsl.conf n’existe pas ou s’il ne contient pas la ligne [boot] systemd=true, vous pouvez le créer en utilisant un éditeur de texte comme nano. Exécutez les commandes suivantes pour créer le fichier et y ajouter la configuration nécessaire :
1
sudo nano /etc/wsl.conf

Ajoutez la ligne suivante au fichier /etc/wsl.conf :

1
[boot] systemd=true

Enregistrez les modifications et quittez l’éditeur de texte avec CTRL+X et y.

  1. Vérification avec systemctl status :
  • Une fois que vous avez vérifié ou ajouté la configuration dans /etc/wsl.conf, vous pouvez également utiliser systemctl pour vérifier l’état de systemd. Exécutez la commande suivante :
1
sudo systemctl status

Cette commande affichera l’état des services systemd actuellement en cours d’exécution dans votre distribution Linux WSL. Si systemd est actif, vous devriez voir une liste de services et leur état.

Image alt


Installer les prérequis à Exegol (si nécessaire)

1
2
3
4
5
6
7
8
9
git --version
sudo apt install git

python3 -V
sudo apt install python3

pip -v
sudo apt install python3-pip
pip3 install --upgrade pip

Ajouter le dossier .local/bin dans le PATH

1
2
export PATH="$PATH:$HOME/.local/bin"
source .bashrc

Installer Docker.io

1
2
3
sudo apt install docker.io
docker -v
sudo systemctl status docker

Image alt


Installer Exegol

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cd /opt
sudo git clone https://github.com/ThePorgs/Exegol.git
cd /opt/Exegol/
sudo python3 -m pip install --requirement "requirements.txt"
# python3 -m pip install --user --requirement "requirements.txt"
sudo ln -s "$(pwd)/exegol.py" "/usr/local/bin/exegol"
sudo exegol install
y
y
<IMAGE TAG>

Image alt


Créer une image

Exemples d’options pour la création d’image:

  • -l => “Activer la journalisation shell”
  • --vpn <DIRECTORY/FILE.ovpn> => “Configurez une connexion OpenVPN”
  • --privileged => “(dangereux) Entre autres, permet d’activer un point de montage avec un CTF”
  • -w <WORKSPACE_PATH> => “Dossier partagé personnalisé” (Activer par défaut dans ~/.exegol/workspace ou /root/.exegol/workspace)
  • -fs => “Modifier les autorisations des dossiers et sous-dossiers partagés”
1
sudo exegol start machine2test full -l -fs -w "$PWD/partage" --vpn "$PWD/VPN/Zitouneanticip.ovpn"

Image alt

La commande start créer une machine si celle-ci n’existe pas. Une fois la machine créée, il vous suffira plus tard de l’ouvrir avec la commande :

1
sudo exegol start machine2test

Fix : Activer le Gui Apps Exegol (dans la distribution Linux si nécessaire)

1
2
3
4
5
fix : 
[-] The xhost command is not available on your host. Exegol was unable to allow your container to
access your graphical environment (or you don't have one).

sudo apt-get install x11-xserver-utils

Information général

1
sudo exegol info -v

Supprimer un container

1
sudo exegol remove <container tag>

Documentation Exegol

Discord Exegol


Bonus vérifier les prérequis Windows

Ce script PowerShell, simplifie la vérification des prérequis pour l’installation d’Exegol sur Windows. Il indique clairement l’état de chaque élément vérifié.

L’exécution de scripts PowerShell est désactivée par défaut sur les systèmes Windows pour des raisons de sécurité. Si vous rencontrez une erreur indiquant que l’exécution de scripts est désactivée sur votre système, vous pouvez contourner cette restriction en lançant votre script avec la politique d’exécution définie sur Bypass. Pour ce faire, tapez la commande suivante :

1
powershell -ExecutionPolicy Bypass -File Check-Requirements-Windows-For-install-Exegol.ps1

Cette commande lance une nouvelle instance de PowerShell pour exécuter votre script avec la politique d’exécution définie sur Bypass. Cela signifie que toutes les restrictions d’exécution de scripts sont ignorées pour cette instance de PowerShell.

Cependant, il est important de noter que l’utilisation de cette commande peut présenter des risques de sécurité, car elle permet l’exécution de n’importe quel script, qu’il soit signé ou non. Assurez-vous de comprendre les implications avant de l’utiliser. Il est toujours recommandé d’examiner attentivement tout script avant de l’exécuter sur votre système.

 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Vérifier si le script est exécuté en tant qu'administrateur
$isAdmin = ([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544"

if ($isAdmin) {
    # les couleurs
    $colorGreen = "Green"
    $colorRed = "Red"

    # Obtenir l'état du service Hyper-V
    $serviceStatus = (Get-Service vmcompute).Status

    Write-Host "vmcompute (Hyper-V) => " -NoNewline
    if ($serviceStatus -eq "Running") {
        Write-Host $serviceStatus -ForegroundColor $colorGreen
    } elseif ($serviceStatus -eq "Stopped") {
        Write-Host $serviceStatus -ForegroundColor $colorRed
    } else {
        Write-Host "Le status du service vmcompute est inconnu : $serviceStatus" -ForegroundColor $colorRed
    }

    # Obtenir le système d'exploitation
    $osInfo = [System.Environment]::OSVersion.Version

    Write-Host "OSVersion => " -NoNewline
    if ($osInfo.Major -eq 10) {
        Write-Host $osInfo.Major -ForegroundColor $colorGreen
    } elseif ($osInfo.Major -eq 11) {
        Write-Host $osInfo.Major -ForegroundColor $colorGreen
    } else {
        Write-Host "OSVersion est : $osInfo.Major" -ForegroundColor $colorRed
    }

    # Obtenir le Build du système d'exploitation
    $osVersion = [System.Environment]::OSVersion.Version.Build

    # Liste des Builds KB5020030
    $buildsAVerifier = 19042, 19043, 19044, 19045 

    Write-Host "KB5020030 => " -NoNewline
    switch ($osVersion) {
        {$_ -in $buildsAVerifier} {
            Write-Host $osVersion -ForegroundColor $colorGreen
            break
        }
        default {
            Write-Host "$osVersion ne figure pas dans KB5020030" -ForegroundColor $colorRed
        }
    }

    # Vérifier si Windows Terminal est installé
    $windowsTerminalStatus = (Get-AppxPackage -Name *Microsoft.WindowsTerminal*).Status

    Write-Host "Windows Terminal => " -NoNewline
    if ($windowsTerminalStatus -eq "Ok") {
        Write-Host $windowsTerminalStatus -ForegroundColor $colorGreen
    } else {
        Write-Host "erreur $windowsTerminalStatus" -ForegroundColor $colorRed
    }

    # Vérifier si WSL est déjà activé
    $wslState = (Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux).State

    Write-Host "Windows-Subsystem-Linux => " -NoNewline
    if ($wslState -eq "Enabled") {
        Write-Host $wslState -ForegroundColor $colorGreen
    } else {
        Write-Host "erreur $wslState" -ForegroundColor $colorRed
    }

    # Vérifier si la plateforme de machine virtuelle est activée
    $virtualMachineState = (Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform).State

    Write-Host "VirtualMachinePlatform => " -NoNewline
    if ($virtualMachineState -eq "Enabled") {
        Write-Host $virtualMachineState -ForegroundColor $colorGreen
    } else {
        Write-Host "erreur $virtualMachineState" -ForegroundColor $colorRed
    }
} else {
    Write-Host "Le script necessite des droits administrateur..."
    
    # Obtenir le chemin complet du script actuel
    $scriptPath = $MyInvocation.MyCommand.Definition
    
    # Relancer le script en tant qu'administrateur
    Start-Process -FilePath "powershell" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" -Verb RunAs
    Exit
}

Write-Host "`nPour execute WSL vous avez besoin que 'Hyper-V' ou 'la Virtual Machine Platform' soit actif"

# Ajouter une pause pour maintenir la fenêtre ouverte
Read-Host "Appuyez sur Entree pour quitter..."
updatedupdated2023-10-102023-10-10