Escaping 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 shell (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 shell (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 shell (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.
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 (RBASH) :
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