Anatomy of a Shell
🖥️ Qu'est-ce qu'un shell ?
Chaque système d'exploitation moderne possède un shell, qui est une interface permettant à l'utilisateur d'interagir avec le système via des instructions en ligne de commande. Pour accéder à ce shell, on utilise généralement un émulateur de terminal.
Voici quelques exemples d'émulateurs de terminaux populaires :
Windows
Windows
Windows
Windows, Linux, macOS
Windows, Linux, macOS
Linux
Linux
Linux
Linux
macOS
macOS
Cette liste n'est pas exhaustive. De nombreux émulateurs sont open-source et peuvent être installés sur des systèmes différents de ceux pour lesquels ils ont été initialement conçus. Le choix d’un émulateur dépend avant tout des préférences personnelles et des habitudes de travail. Lors d’un test d’intrusion, l’émulateur auquel nous aurons accès sur la machine cible dépendra de ce qui est disponible nativement sur celle-ci.
🧠 Interpréteurs de commandes (Command Language Interpreters)
Un interpréteur de commande est un programme qui lit et exécute les instructions de l’utilisateur. Lorsqu'on parle d’un CLI (Command Line Interface), il s’agit en fait d’une combinaison de :
l'émulateur de terminal,
l’interpréteur de commandes,
et le système d’exploitation sous-jacent.
Les interpréteurs de commandes sont parfois appelés langages de script shell ou encore Command and Scripting Interpreters, un terme utilisé notamment dans le framework MITRE ATT&CK.
Comprendre quel interpréteur est utilisé sur un système donné nous permet d’adapter les commandes et les scripts que nous utilisons. Par exemple :
Bash, Ksh, Zsh sur Linux/Unix
cmd, PowerShell sur Windows
🔎 Exploration pratique avec Pwnbox
Sur la plateforme Parrot OS Pwnbox, on peut explorer visuellement et pratiquement la structure d’un shell.
🟩 Ouverture d’un terminal MATE
Cliquez sur l’icône verte pour ouvrir MATE Terminal.
Tapez une commande aléatoire comme
wasdf
oumeep
puis appuyez sur Entrée.
Cela génère une erreur de type :
bash: wasdf: command not found
Ce message indique que nous utilisons ici Bash comme interpréteur de commande. Le caractère $
en début de ligne de commande est aussi un indicateur classique de Bash ou d’interpréteurs similaires.
🔍 Identifier le shell actif
Deux méthodes courantes :
✅ Avec la commande ps
ps
Exemple de sortie :
PID TTY TIME CMD
4232 pts/1 00:00:00 bash
11435 pts/1 00:00:00 ps
✅ Avec la commande env
env
Extrait de sortie :
SHELL=/bin/bash
🟦 Passage à PowerShell
Cliquez sur l’icône bleue dans Pwnbox.
Cela ouvre aussi MATE Terminal, mais cette fois avec un interpréteur PowerShell.
Exemple de sortie :
PowerShell 7.1.3
A new stable release is available: v7.2.0
🆚 Comparaison PowerShell vs Bash
Les deux terminaux ouverts utilisent le même émulateur, mais des interpréteurs différents. Voici quelques différences à explorer :
Les commandes reconnues peuvent varier.
Les options de script ne sont pas identiques.
La syntaxe change (par exemple,
$env:PATH
en PowerShell vsecho $PATH
en Bash).
Il est important de noter qu’un émulateur de terminal n’est pas lié à un interpréteur en particulier. Il peut exécuter n’importe quel shell, selon la configuration de l’utilisateur ou de l’administrateur système.
🧠 À retenir
Un shell est l’interface textuelle d’un système, accessible via un terminal.
L’interpréteur de commande détermine les commandes reconnues.
L’environnement CLI = système + terminal + interpréteur.
On peut utiliser plusieurs interpréteurs sur une même machine.
La reconnaissance du shell en cours peut se faire via
ps
ouenv
.
📚 Ressources utiles
Which two shell languages did we experiment with in this section? (Format: shellname&shellname)
Nous avons expérimentés ici les shells bash et powershell
.
In Pwnbox issue the $PSversiontable variable using PowerShell. Submit the edition of PowerShell that is running as the answer.
Sur la Pwnbox mise à disposition par HTB, nous utilisons la commande $PSversiontable
:
PS [10.10.14.171] /home/htb-ac-1811357 > $PSversiontable
Name Value
---- -----
PSVersion 7.5.0
PSEdition Core
GitCommitId 7.5.0
OS Parrot Security 6.3 (lorikeet)
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Nous pouvons alors observer que l'édition de PowerShell est core
.
Mis à jour