🔌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 Shellsarrow-up-right et Shell Overviewarrow-up-right 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 THMarrow-up-right

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