
Pupy
Pupy est un RAT (outil d'administration à distance) et un outil de post-exploitation opensource, multiplateforme (Windows, Linux, OSX, Android), principalement écrit en python. Il dispose d'un principe d'exécution entièrement en mémoire et laisse une très faible empreinte. Pupy peut communiquer via différents transports, migrer dans des processus (injection réflective), charger du code python distant, des paquets python et des extensions C python depuis la mémoire.
Les modules de Pupy peuvent accéder de manière transparente aux objets python distants en utilisant rpyc pour effectuer diverses tâches interactives.
Pupy peut générer des payloads dans de multiples formats comme des exécutables PE, des DLL réflectives, des fichiers python purs, powershell, apk, ...
Lorsque vous empaquetez un payload, vous pouvez choisir un launcher (connect, bind, ...), un transport (ssl, http, rsa, obfs3, scramblesuit, ...) et un certain nombre de "scriptlets". Les scriptlets sont des scripts python destinés à être embarqués pour effectuer diverses tâches hors ligne (sans nécessiter de session), comme démarrer un script en arrière-plan, ajouter de la persistance, démarrer un keylogger, détecter un sandbox, ...
Installation
git clone https://github.com/n1nj4sec/pupy.git pupy
cd pupy
git submodule init
git submodule update
pip install -r pupy/requirements.txt
ou Reportez-vous au wiki
Fonctionnalités
- Multiplateforme (testé sur windows xp, 7, 8, 10, kali linux, ubuntu, osx, android)
- Sur windows, le payload Pupy peut être compilé en DLL réflective et l'interpréteur python entier est chargé depuis la mémoire. Pupy ne touche pas au disque :)
- pupy peut aussi être empaqueté dans un seul fichier .py et exécuté sans aucune dépendance autre que la bibliothèque standard python sur tous les OS
- pycrypto est remplacé par des implémentations aes && rsa en python pur lorsqu'il n'est pas disponible
- Pupy peut migrer de manière réflective dans d'autres processus
- Pupy peut importer à distance, depuis la mémoire, des paquets python purs (.py, .pyc) et des extensions C python compilées (.pyd, .so). Les modules python importés ne touchent pas au disque.
- Pupy est facilement extensible, les modules sont assez simples à écrire, triés par OS et par catégorie.
- Beaucoup de modules géniaux sont déjà implémentés !
- Pupy utilise rpyc et un module peut accéder directement aux objets python sur le client distant
- Nous pouvons aussi accéder interactivement aux objets distants depuis le shell pupy et vous obtenez même l'auto-complétion des attributs distants !
- Les transports de communication sont modulaires, empilables et géniaux. Vous pourriez exfiltrer des données en utilisant HTTP sur HTTP sur AES sur XOR. Ou n'importe quelle combinaison des transports disponibles !
- Pupy peut communiquer en utilisant les transports enfichables d'obfsproxy
- Tous les modules non interactifs peuvent être envoyés sur plusieurs hôtes en une seule commande
- Les commandes et scripts exécutés sur les hôtes distants sont interruptibles
- Auto-complétion pour les commandes et arguments
- Une configuration personnalisée peut être définie : alias de commandes, modules exécutés automatiquement à la connexion, ...
- Des shells python interactifs avec auto-complétion sur l'interpréteur python distant entièrement en mémoire peuvent être ouverts
- Des shells interactifs (cmd.exe, /bin/bash, ...) peuvent être ouverts à distance. Les shells distants sur les clients Unix & windows ont un vrai tty avec tous les signaux clavier fonctionnant correctement, comme un shell ssh
- Pupy peut exécuter un exe PE à distance et depuis la mémoire (cf. ex avec mimikatz)
- Pupy peut générer des payloads dans divers formats : apk,lin_x86,lin_x64,so_x86,so_x64,exe_x86,exe_x64,dll_x86,dll_x64,py,pyinst,py_oneliner,ps1,ps1_oneliner,rubber_ducky
- Pupy peut être déployé en mémoire, à partir d'une seule ligne de commande en utilisant les one-liners python ou powershell de pupygen.py.
Transports implémentés
Tous les transports de pupy sont empilables. Cela signifie qu'en créant une conf de transport personnalisée (pupy/network/transport/<transport_name>/conf.py), vous pouvez faire ressembler votre session pupy à n'importe quoi. Par exemple, vous pourriez empiler HTTP sur HTTP sur base64 sur HTTP sur AES sur obfs3 :o)
- rsa
- Une couche avec authentification et chiffrement utilisant RSA et AES256, souvent empilée avec d'autres couches
- aes
- couche utilisant une clé AES256 statique
- ssl (le défaut)
- transport TCP enveloppé avec SSL
- ssl_rsa
- identique à ssl mais empilé avec une couche rsa
- http
- couche faisant ressembler le trafic à du trafic HTTP. HTTP est empilé avec une couche rsa
- obfs3
- scramblesuit
- udp
- couche rsa mais sur UDP (peut être bugué, elle ne gère pas encore la perte de paquets)
- other
- Les autres couches n'ont pas vraiment d'intérêt et sont fournies comme exemples de code : (dummy, base64, XOR, ...)
Launchers implémentés (pas à jour, cf. ./pupygen.py -h)
Les launchers permettent à pupy d'exécuter des actions personnalisées avant de démarrer la connexion inverse
- connect
- Se connecte simplement en retour
- bind
- Lie le payload au lieu d'une connexion inverse
- auto_proxy
- Récupère une liste de proxys SOCKS/HTTP possibles et essaie chacun d'eux. Les méthodes de récupération de proxys sont : registre, requêtes WPAD, paramètres gnome, variable d'environnement HTTP_PROXY
Modules implémentés (pas à jour)
- exécution de commandes
- download
- upload
- shell python interactif avec auto-complétion
- shell interactif (cmd.exe, powershell.exe, /bin/sh, /bin/bash, ...)
- l'allocation de tty est bien prise en charge à la fois sur windows et *nix. Cela ressemble simplement à un shell ssh
- exécution de shellcode
- persistance
- proxy socks5
- redirection de ports locale et distante
- capture d'écran
- keylogger
- exécution depuis la mémoire du génial outil de collecte d'identifiants LaZagne !
- outils de sniff, netcreds
- migration de processus (windows & linux, pas encore osx)
- ...
- beaucoup d'autres outils (client upnp, divers outils de recon/pivot utilisant impacket à distance, ...)
Spécifique à Windows :
- migrate
- l'injection entre architectures de processus fonctionne aussi (x86->x64 et x64->x86)
- exécution en mémoire d'exe PE à la fois x86 et x64 !
- capture depuis la webcam
- enregistreur de microphone
- mouselogger :
- prend de petites captures d'écran autour de la souris à chaque clic et les renvoie au serveur
- manipulation de jetons
- getsystem
- creddump
- des tonnes de scripts powershell utiles
- ...
Spécifique à Android
- Synthèse vocale pour Android pour dire des choses à voix haute
- captures depuis la webcam (caméra avant & caméra arrière)
- traceur GPS !
Documentation
Reportez-vous au wiki
Quelques captures d'écran (pas à jour)
Section captures d'écran sur le wiki
FAQ
Est-ce que le serveur fonctionne sur windows ?
Le serveur Pupy fonctionne mieux sur linux. Le serveur sur windows n'a pas vraiment été testé et il y a probablement beaucoup de bugs. J'essaie de coder de la manière la plus portable possible mais je ne trouve pas toujours le temps de tout corriger. Si vous trouvez le courage de patcher le code non portable, j'accepterai volontiers les pull requests ! :)
Je n'arrive pas à l'installer, comment ça marche ?
Jetez un œil à la section Installation dans le wiki
J'ai l'erreur suivante au lancement de pupy.sh : ImportError: No module named creddump.win32.domcachedump
Suivez les étapes d'installation dans le wiki, vous avez manqué l'initialisation/mise à jour des sous-modules git
J'ai l'erreur suivante lors de l'utilisation de pupygen : IOError: [Errno 2] No such file or directory: '/full-path/pupy-master/pupy/payload_templates/pupyx86.exe'
Suivez les étapes d'installation dans le wiki, vous avez manqué l'initialisation/mise à jour des sous-modules git
J'ai une autre erreur à l'installation
Suivez les étapes d'installation dans le wiki (oui je sais)
Hé, j'adore pupy et je me demandais si je pouvais vous offrir une bière !
Bien sûr ! merci !
Via pledgie :
Via BTC : 12BKKN81RodiG9vxJn34Me9ky19ArqNQxC
hey c4n y0u add a DDOS module plzz?
Non.
par e-mail : [email protected]
sur Twitter : Suivez-moi sur twitter
Si certains d'entre vous veulent participer au développement de pupy, n'hésitez pas ! Toute aide est grandement appréciée et j'examinerai chaque pull request.
Ce projet est un développement personnel, veuillez respecter sa philosophie et ne l'utilisez pas à des fins malveillantes !
Remerciements spéciaux
Remerciements spéciaux à tous les contributeurs qui m'aident à améliorer pupy et à en faire un outil encore meilleur ! :)