book-skullEscaping Restricted Shells

Un shell restreint est un type de shell qui limite la capacitĂ© de l’utilisateur Ă  exĂ©cuter des commandes. Dans un shell restreint, l’utilisateur n’est autorisĂ© qu’à exĂ©cuter un ensemble spĂ©cifique de commandes ou seulement dans certains rĂ©pertoires prĂ©cis.

Les shells restreints sont souvent utilisés pour fournir un environnement sûr aux utilisateurs qui pourraient accidentellement (ou intentionnellement) endommager le systÚme, ou pour leur donner accÚs uniquement à certaines fonctionnalités spécifiques.

Quelques exemples de shells restreints courants :

  • rbash (Linux)

  • Restricted-access Shell (Windows)


🐚 RBASH

Le Restricted Bourne shellarrow-up-right (rbash) est une version restreinte du Bourne shell, un interpréteur de commandes standard sous Linux. Il limite les possibilités suivantes :

  • changer de rĂ©pertoire,

  • dĂ©finir ou modifier des variables d’environnement,

  • exĂ©cuter des commandes situĂ©es dans d’autres rĂ©pertoires.

Il est souvent utilisé pour offrir un environnement sûr et contrÎlé aux utilisateurs.


🐚 RKSH

Le Restricted Korn shellarrow-up-right (rksh) est une version restreinte du Korn shell. Il limite par exemple :

  • l’exĂ©cution de commandes situĂ©es dans d’autres rĂ©pertoires,

  • la crĂ©ation ou modification de fonctions shell,

  • la modification de l’environnement du shell.


🐚 RZSH

Le Restricted Z shellarrow-up-right (rzsh) est une version restreinte du Z shell, l’un des interprĂ©teurs les plus puissants et flexibles. Il limite notamment :

  • l’exĂ©cution de scripts shell,

  • la dĂ©finition d’alias,

  • la modification de l’environnement du shell.


🏱 Exemple en entreprise

Les administrateurs utilisent souvent les shells restreints dans les rĂ©seaux d’entreprise pour garantir un environnement sĂ»r et contrĂŽlĂ©. En limitant la possibilitĂ© d’exĂ©cuter certaines commandes ou d’accĂ©der Ă  certains rĂ©pertoires, ils empĂȘchent les utilisateurs de nuire au systĂšme ou de compromettre la sĂ©curitĂ© du rĂ©seau.

👉 Cela permet aussi de donner un accĂšs limitĂ© Ă  certaines fonctionnalitĂ©s seulement, selon les besoins.

Exemple pratique : Une entreprise dispose de serveurs Linux hébergeant des applications critiques. De nombreux utilisateurs y accÚdent : employés, sous-traitants, partenaires externes.

L’équipe IT dĂ©cide d’implĂ©menter des shells restreints :

  • Partenaires externes → assignĂ©s Ă  rbash, accĂšs limitĂ© (ex. mails, partage de fichiers).

  • Sous-traitants → assignĂ©s Ă  rksh, plus de flexibilitĂ© (ex. accĂšs aux serveurs web et BDD).

  • EmployĂ©s → assignĂ©s Ă  rzsh, plus d’options, mais toujours sous contrĂŽle.


đŸ› ïž MĂ©thodes pour Ă©chapper Ă  un shell restreint

Il existe plusieurs techniques pour Ă©chapper Ă  un shell restreint. Certaines exploitent directement des vulnĂ©rabilitĂ©s, d’autres utilisent des astuces pour contourner les restrictions.


🔓 Injection de commandes

Il peut ĂȘtre possible d’échapper au shell restreint en injectant des commandes dans la ligne de commande ou d’autres entrĂ©es autorisĂ©es.

Exemple : Si seul ls est autorisé (avec ls -l ou ls -a), on peut essayer :

Ici, pwd est exécuté via substitution de commande. Bien que pwd soit interdit directement, son exécution indirecte permet de connaßtre le répertoire courant.


🔄 Substitution de commande

La substitution de commande permet d’exĂ©cuter des commandes en les plaçant dans des backticks (`). Exemple :

Si la substitution n’est pas filtrĂ©e, on obtient la sortie de id, mĂȘme si son exĂ©cution directe est interdite.


⛓ ChaĂźnage de commandes

On peut parfois contourner un shell restreint en enchaĂźnant plusieurs commandes sur une seule ligne. Exemple avec le point-virgule ; ou le pipe | :


🌍 Variables d’environnement

Certains shells restreints s’appuient sur des variables d’environnement pour dĂ©finir :

  • le chemin des commandes,

  • le rĂ©pertoire d’exĂ©cution, etc.

En modifiant ces variables (comme $PATH), on peut parfois rediriger l’exĂ©cution vers des commandes non restreintes.


⚡ Fonctions shell

Si le shell autorise la dĂ©finition de fonctions, il est parfois possible d’en crĂ©er pour exĂ©cuter des commandes interdites.

Exemple :

Cela ouvre un shell classique non restreint.


circle-info

SSH to 10.129.205.109 (ACADEMY-LLPE-RSH) with user "htb-user" and password "HTB_@cademy_us3r!"

Use different approaches to escape the restricted shell and read the flag.txt file. Submit the contents as the answer.

Dans un premier temps, nous nous connectons en ssh Ă  notre cible :

Une fois connectés, nous essayons diverses commandes qui nous permettent de voir que nous sommes dans un shell restreint (RBASHarrow-up-right) :

Nous devons donc tester diverses commandes afin de voir quelles commandes sont disponibles d'exécution :

Parmis les différents tests effectués, nous pouvons observer la possibilité d'utiliser la commande echo.

Nous essayons donc de lister dans un premier temps les répertoires présents à notre emplacement :

Nous avons réussi à contourner le shell. En effet, la commande ls n'est pas possible d'utilisation, mais à l'aide de la commande echo nous parvenons à afficher le résultat attendu.

Nous listons donc le contenu du répertoire de notre utilisateur actuel afin de trouver le fichier flag.txt :

Nous devons maintenant trouver un moyen de lire le contenu du fichier /home/htb-user/flag.txt.

Pour se faire, nous pouvons utiliser le site suivant, trouvé lors de recherches concernant un bypass de rbash :

Nous pouvons alors trouver une commande qui permet de lire le contenu d'un fichier et d'en afficher son contenu. NOus l'exploitons donc :

Nous avons donc contourné la restriction du shell. Le flag est donc disponible :


Last updated