🔌Connexion / Shell

Différentes façons de connexion

SSH (port 22 par défaut)

Commande classique

ssh [username]@[IPV4]

Spécifier un port différent :

ssh -p [PORT] [username]@[IPV4]

FTP (port 21 par défaut)

Client FTP classique :

ftp [IPV4]

Ensuite, dans le client FTP :

  • saisir le login puis le mot de passe.

Connexion sur un port différent :

ftp [IPV4] [PORT]

TELNET (port 23 par défaut)

Connexion Telnet classique :

SpĂ©cifier un port (trĂšs utile pour tester d’autres services) :

SMB – Partages Windows (ports 445 / 139)

AccÚs aux partages réseau Windows (fichiers, dossiers).

  • Lister / se connecter Ă  un partage :

  • Sans authentification (test d’accĂšs guest) :


Création d'un serveur Python

Ouvrir un serveur :

Récupération du fichier voulu sur serveur :


Shell

Le Shell est une interface en ligne de commande permettant d’interagir avec le systĂšme d’exploitation. Il joue un rĂŽle central dans l’administration, l’automatisation des tĂąches, et l’exploitation de failles. La comprĂ©hension des commandes Shell, des scripts Bash, et des redirections est essentielle pour manipuler efficacement un systĂšme Linux, notamment lors de phases de post-exploitation. La room Linux Shells et Shell Overview de TryHackMe sont une excellente ressource pour explorer les diffĂ©rents types de shells et apprendre Ă  les stabiliser dans un contexte d’attaque.

Qu'est-ce qu'un Shell ?

Un shell est un logiciel permettant à un utilisateur d'interagir avec un systÚme d'exploitation . Il peut s'agir d'une interface graphique, mais il s'agit généralement d'une interface en ligne de commande, selon le systÚme d'exploitation utilisé sur le systÚme cible.

En cybersécurité, ce terme désigne généralement une session shell spécifique utilisée par un attaquant pour accéder à un systÚme compromis, lui permettant d'exécuter des commandes et des logiciels.

La différence des shell :

Reverse Shell

Le reverse shell, parfois appelé « connect back shell », est l'une des techniques les plus répandues pour accéder à un systÚme lors de cyberattaques. Les connexions partent du systÚme cible vers la machine de l'attaquant, ce qui permet d'échapper à la détection des pare-feu réseau et autres dispositifs de sécurité.

Comment les reverse shells fonctionnent :

  • 1. L’attaquant prĂ©pare un listener Sur sa propre machine, l’attaquant ouvre un port en Ă©coute (listener). Il attend qu’une machine distante se connecte dessus.

  • 2. Un payload est exĂ©cutĂ© sur la cible Via une vulnĂ©rabilitĂ© (RCE, injection, macro, etc.), l’attaquant parvient Ă  exĂ©cuter un petit morceau de code sur la cible. Ce code ouvre une connexion sortante (souvent TCP) vers l’IP et le port du listener de l’attaquant.

  • 3. Redirection du shell vers la connexion rĂ©seau Une fois la connexion Ă©tablie, l’entrĂ©e/sortie d’un shell local (ex. /bin/sh, bash, cmd.exe) est redirigĂ©e dans ce canal rĂ©seau. Tout ce que tape l’attaquant est envoyĂ© Ă  ce shell, et tout ce que renvoie le shell revient au listener.

  • 4. Avantage cĂŽtĂ© attaquant Comme la connexion est sortante depuis la cible, elle passe souvent plus facilement les pare-feu (qui filtrent principalement les connexions entrantes). C’est pour ça que le reverse shell est la technique la plus populaire dans les environnements filtrĂ©s.


Bind Shell

Comme son nom l'indique, un Bind Shell lie un port sur le systÚme compromis et écoute une connexion ; lorsque cette connexion se produit, elle expose la session du shell afin que l'attaquant puisse exécuter des commandes à distance.

Cette mĂ©thode peut ĂȘtre utilisĂ©e lorsque la cible compromise n'autorise pas les connexions sortantes, mais elle a tendance Ă  ĂȘtre moins populaire car elle doit rester active et Ă©couter les connexions, ce qui peut conduire Ă  une dĂ©tection.

Comment les bind shells fonctionnent :

  • 1. Ouverture d’un port en Ă©coute sur la cible Le payload exĂ©cutĂ© sur la machine compromise ouvre un port TCP en Ă©coute et y attache un shell (par exemple /bin/sh).

  • 2. L’attaquant se connecte Ă  la cible Depuis sa machine, l’attaquant initie une connexion vers IP_cible:port_bind. Une fois connectĂ©, il prend le contrĂŽle du shell attachĂ© Ă  ce port.

  • 3. Sens du flux rĂ©seau Contrairement au reverse shell, la connexion est entrante vers la cible. Cela signifie que les pare-feu / NAT doivent laisser passer cette connexion pour que ça fonctionne.

  • 4. InconvĂ©nients

    • Plus facile Ă  repĂ©rer cĂŽtĂ© rĂ©seau (un port inhabituel qui Ă©coute).

    • Souvent bloquĂ© par les pare-feu (pas de rĂšgle entrante). C’est pour ça que le bind shell est aujourd’hui moins utilisĂ© en externe, mais il peut rester utile en environnement interne / lab.


Web Shell

Un shell web est un script Ă©crit dans un langage pris en charge par un serveur web compromis, qui exĂ©cute des commandes via le serveur web lui-mĂȘme. Un shell web est gĂ©nĂ©ralement un fichier contenant le code qui exĂ©cute les commandes et gĂšre les fichiers. Il peut ĂȘtre dissimulĂ© dans une application ou un service web compromis, ce qui le rend difficile Ă  dĂ©tecter et trĂšs populaire auprĂšs des attaquants.

Les shells Web peuvent ĂȘtre Ă©crits dans plusieurs langages pris en charge par les serveurs Web, comme PHP , ASP, JSP et mĂȘme de simples scripts CGI.

Comment les web shells fonctionnent :

  • 1. DĂ©pĂŽt du fichier malveillant L’attaquant parvient Ă  dĂ©poser un script sur le serveur (upload vulnĂ©rable, RCE, inclusion de fichier, etc.). Ce script contient du code capable d’exĂ©cuter des commandes systĂšme, gĂ©rer des fichiers, lister des rĂ©pertoires, etc.

  • 2. Interaction via HTTP/HTTPS Pour utiliser le web shell, l’attaquant envoie des requĂȘtes HTTP vers l’URL du script, avec des paramĂštres indiquant la commande ou l’action Ă  exĂ©cuter (ex. ?cmd=whoami).

  • 3. ExĂ©cution cĂŽtĂ© serveur Le serveur interprĂšte le script (PHP, ASP, JSP
), exĂ©cute la commande demandĂ©e et renvoie la sortie dans la rĂ©ponse HTTP (HTML, texte brut, JSON
).

  • 4. Avantage pour l’attaquant

    • Le trafic ressemble Ă  du trafic web classique (HTTP/HTTPS).

    • L’attaquant n’a besoin que d’un navigateur ou d’un simple client HTTP pour piloter le shell.

    • Le web shell peut ĂȘtre camouflĂ© (nom de fichier lĂ©gitime, placĂ© dans un rĂ©pertoire applicatif).


Shell Listeners

Un shell listener est le composant cÎté attaquant (ou parfois cÎté cible pour un bind shell) qui attend une connexion afin de prendre en charge une session de shell.

Comment les shells listeners fonctionnent :

  • 1. Ouverture d’un port en Ă©coute Un programme (outil en ligne de commande, framework d’exploitation, etc.) ouvre un port rĂ©seau et se met en Ă©coute en attendant une connexion entrante.

  • 2. Attente de la connexion du payload Quand un reverse shell est dĂ©clenchĂ©, le payload sur la cible se connecte Ă  l’adresse et au port du listener.

  • 3. Association de la connexion Ă  un shell Le listener va alors attacher cette connexion Ă  une interface interactive (console) pour permettre Ă  l’attaquant de taper des commandes et de voir la sortie.

  • 4. Utilisation typique

    • Listener pour reverse shell (cas le plus courant).

    • Handler dans des frameworks (ex. un “multi/handler” qui gĂšre plusieurs sessions).

Du point de vue Blue Team, on peut surveiller l’ouverture de ports en Ă©coute sur des systĂšmes oĂč cela n’est pas attendu, ou des connexions sortantes vers des ports non standards.


Shell Payloads

Un shell payload est le morceau de code qui, une fois exĂ©cutĂ© sur la cible, va Ă©tablir une session de shell (reverse, bind, web shell, etc.). C’est lui qui fait le “lien” entre la vulnĂ©rabilitĂ© exploitable (RCE, overflow, macro, etc.) et la session interactive obtenue par l’attaquant.

Comment les shells payloads fonctionnent :

  • 1. GĂ©nĂ©ration ou Ă©criture du payload Le payload peut ĂȘtre :

    • une ligne de commande qui lance un shell et redirige son entrĂ©e/sortie vers une socket rĂ©seau ;

    • un binaire compilĂ© (dropper, backdoor) ;

    • un script (PowerShell, Python, PHP, etc.) ;

    • du shellcode injectĂ© en mĂ©moire via une vulnĂ©rabilitĂ©.

  • 2. ExĂ©cution sur la cible Ce payload est exĂ©cutĂ© grĂące Ă  une vulnĂ©rabilitĂ© :

    • injection de commande, RCE, macro malveillante, dĂ©sĂ©rialisation, etc. Une fois lancĂ©, il crĂ©e soit :

    • une connexion sortante (reverse shell),

    • un port en Ă©coute (bind shell),

    • ou s’intĂšgre dans un service web (web shell).

  • 3. Établissement de la session DĂšs que la connexion est Ă©tablie entre le payload et le listener (ou le client pour un bind shell), une session interactive est disponible (shell texte, parfois mĂȘme shell chiffrĂ© ou intĂ©grĂ© Ă  un framework).

  • 4. Vue Blue Team Comprendre les payloads permet :

    • d’anticiper les indicateurs de compromission (processus suspects, connexions anormales, fichiers inhabituels),

    • de dĂ©tecter et bloquer les tentatives (filtrage de commandes, EDR, supervision rĂ©seau, contrĂŽle des scripts).


Comment stabiliser un shell :

Voici les différentes façon pour stabiliser un shell : Lien THM

Technique 1: Python (Principalement pour les machines Linux)

La commande suivante va permettre d'avoir un shell plus joli :

La commande suivante nous permettera d'avoir accĂšs a plus de commande :

Et pour finir, la commande suivante dĂ©sactive notre propre Ă©cho de terminal (qui nous donne accĂšs aux saisies semi-automatiques des onglets, aux touches flĂ©chĂ©es et Ă  Ctrl + C pour arrĂȘter les processus)

Si le shell meurt/bug, n'hésitez pas à faire la commande suivante :

Technique 2: rlwrap (Principalement pour les machines Windows)

Pensez Ă  installer rlwrap avant son utilisation :

Mis Ă  jour