PWNCAT est une plate-forme post-exploitation pour les cibles Linux . Il a commencé comme un emballage autour des coquilles de liaison et inverse de base et a grandi à partir de là. Il rationalise les opérations de l'équipe rouge commune lors de la mise en scène du code de votre machine d'attaquant, pas de la cible.
PWNCAT avait l'habitude de prendre en charge Linux, mais il y a eu beaucoup de travail récemment pour prendre en charge plusieurs plates-formes. Actuellement, il existe une prise en charge alpha pour les cibles Windows. Veuillez consulter la dernière documentation pour plus de détails sur la façon d'utiliser PWNCAT avec une cible Windows.
PWNCAT intercepte la communication brute avec un shell distant et permet à l'utilisateur d'effectuer des actions automatisées sur l'hôte distant, y compris l'énumération, l'installation d'implant et même l'escalade des privilèges.
Après avoir reçu une connexion, PWNCAT configurera certaines configurations communes pour travailler avec des shells distants.
which ) pwncat sait comment apparaître PTY avec quelques méthodes différentes et référencera les méthodes avec les exécutables précédemment énumérés. Après avoir engendré un PTY, il configurera le terminal de contrôle en mode brut, vous pouvez donc interagir de manière similaire à ssh .
pwncat synchronisera également les paramètres PTY distants (tels que les lignes, les colonnes, la variable d'environnement TERM ) avec vos paramètres locaux pour s'assurer que le shell se comporte correctement avec des applications interactives telles que vim ou nano .
John Hammond et moi avons présenté pwncat à Grimmcon. Notre présentation, qui peut être trouvée sur YouTube ici. Cette vidéo montre une première version de l'API et de l'interface. Veuillez vous référer à la documentation pour l'utilisation à jour et la documentation de l'API!
La documentation PWNCAT est en cours de construction sur Lire les documents. Rendez-vous là pour la dernière documentation d'utilisation et de développement!
PWNCAT nécessite Python 3.9+ sur Linux
pwncat dépend uniquement d'un environnement de développement de python fonctionnant fonctionnant sur Linux. Afin d'installer certains des packages requis avec pip , vous aurez probablement besoin du package "Python Development" de votre distribution. Sur les systèmes basés sur Debian, il s'agit python-dev . Pour Arch, les fichiers de développement sont expédiés avec le référentiel Python principal. Pour Enterprise Linux, le package est nommé python-devel .
pwncat est poussé à PYPI sous le nom de pwncat-cs et peut être installé avec pip comme tel:
pip install pwncat-csCependant, il est recommandé d'installer PWNCAT à partir d'un environnement virtuel.
python3 -m venv pwncat-env
source pwncat-env/bin/activate
pip install pwncat-cs Pour un environnement de développement, pwncat utilise la poésie Python. Vous pouvez cloner le référentiel localement et utiliser la poésie pour configurer un environnement de développement.
# Setup pwncat inside a poetry-managed virtual environment
git clone [email protected]:calebstewart/pwncat.git
cd pwncat
poetry install
# Enter the virtual environment
poetry shell En raison du conflit de dénomination avec le PWNCAT de Cytopia, j'ai décidé de renommer le package à pwncat-cs . Cela comprend le renommer le point d'entrée afin qu'il n'y ait pas de conflits directs avec le projet de Cytopia. Si vous mettez à jour à partir de v0.4.* , Le nom de commande aura maintenant changé et que le pcat et pc Varianst ont été supprimés. Voir les notes de publication les plus récentes pour plus de détails.
L'avantage supplémentaire de cette décision est que le projet est désormais poussé vers PYPI pour une installation / mise à jour plus facile à l'avenir.
pwncat prend désormais en charge les connexions à partir des cibles Windows à partir de v0.4.0a1 . La plate-forme Windows utilise une bibliothèque C2 basée sur .NET qui est chargée automatiquement. Les cibles Windows doivent se connecter avec un shell cmd.exe ou powershell.exe , et PWNCAT s'occupera du reste.
Les bibliothèques implémentant le C2 sont implémentées sur PWNCAT-Windows-C2. Les DLL du C2 seront automatiquement téléchargées à partir de la version ciblée pour vous. Si vous n'avez pas de connectivité Internet sur votre machine cible, vous pouvez dire à PWNCAT de pré-étaler les DLL à l'aide de l'argument --download-plugins . Si vous exécutez une version de version de PWNCAT, vous pouvez également télécharger un tarball de tous les plugins intégrés à partir de la page des versions.
Les plugins sont stockés par défaut dans ~/.local/share/pwncat , mais cela est configurable avec la configuration plugin_path . Si vous téléchargez l'ensemble des plugins emballés à partir de la page des versions, vous devez l'extraire sur le chemin indiqué par plugin_path .
Mis à part les principales DLL C2, d'autres plugins peuvent également être disponibles. Actuellement, les seuls plugins par défaut fournis sont le C2 et une implémentation de Badpotato. PWNCAT peut charger de manière réfléchie les binaires .NET pour être utilisés un plugins pour le C2. Pour plus d'informations sur les plugins Windows C2, veuillez consulter la documentation.
Récemment, l'architecture du cadre PWNCAT a été redessinée pour incorporer une structure générique "module". Toutes les fonctionnalités sont maintenant implémentées sous forme de modules. Cela comprend l'énumération, la persistance et l'escalade des privilèges. L'interaction avec les modules est similaire à la plupart des autres plates-formes post-exploitation. Vous pouvez utiliser les commandes run , search et info familières et d'entrer les contextes du module avec la commande use . Reportez-vous à la documentation pour plus d'informations.
L'installation sur Blackarch est aussi simple que:
pacman -Syu pwncat-calebLes paramètres de ligne de commande pour PWNCAT tentent d'être flexibles et d'accepter une variété de syntaxe de connexion commune. Plus précisément, il essaiera d'accepter la syntaxe de NetCAT et SSH commune. Les éléments suivants sont tous valides:
# Connect to a bind shell
pwncat-cs connect://10.10.10.10:4444
pwncat-cs 10.10.10.10:4444
pwncat-cs 10.10.10.10 4444
# Listen for reverse shell
pwncat-cs bind://0.0.0.0:4444
pwncat-cs 0.0.0.0:4444
pwncat-cs :4444
pwncat-cs -lp 4444
# Connect via ssh
pwncat-cs ssh://user:[email protected]
pwncat-cs [email protected]
pwncat-cs user:[email protected]
pwncat-cs -i id_rsa [email protected]
# SSH w/ non-standard port
pwncat-cs -p 2222 [email protected]
pwncat-cs [email protected]:2222
# Reconnect utilizing installed persistence
# If reconnection fails and no protocol is specified,
# SSH is used as a fallback.
pwncat-cs reconnect://[email protected]
pwncat-cs reconnect://user@c228fc49e515628a0c13bdc4759a12bf
pwncat-cs [email protected]
pwncat-cs c228fc49e515628a0c13bdc4759a12bf
pwncat-cs 10.10.10.10 Par défaut, PWNCAT suppose que la plate-forme cible est Linux . Afin de se connecter à un shell Windows Reverse ou Bind, vous devez passer l'argument --platform/-m :
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444 Pour plus d'informations sur la syntaxe et la gestion des arguments, consultez les informations d'aide avec pwncat-cs --help ou visitez la documentation.
La méthode d'installation recommandée est un environnement virtuel Python. Cela offre l'utilisation quotidienne la plus simple de pwncat . Cependant, il y a eu un intérêt à utiliser pwncat à partir d'une image Docker, j'ai donc fourni un DockerFile qui fournit une installation pwncat fonctionnelle. Pour créer l'utilisation de l'image:
docker build -t pwncat . Cela créera l'image pwncat Docker avec la balise "PWNCAT". Le répertoire de travail dans le conteneur est /work . Le point d'entrée du conteneur est le binaire pwncat . Il peut être utilisé comme tel:
# Connect to a bind shell at 10.0.0.1:4444
docker run -v " /some/directory " :/work -t pwncat 10.0.0.1 4444 Dans cet exemple, seuls les fichiers dans /some/directory sont exposés au conteneur. De toute évidence, pour le téléchargement / le téléchargement, le conteneur ne pourra voir les fichiers exposés que via tous les répertoires montés.
pwncat offre deux fonctionnalités principales. À son cœur, son objectif est de configurer automatiquement un pseudoterminal distant (PTY) qui permet l'interaction avec l'hôte distant un peu comme une session SSH complète. Lorsque vous opérez dans un PTY, vous pouvez utiliser des fonctionnalités communes de votre coquille distante telles que l'historique, l'édition de ligne et les applications de terminaux graphiques.
L'autre moitié de pwncat est un cadre qui utilise votre coquille distante pour effectuer des tâches automatisées d'énumération, de persistance et de privilège. L'invite pwncat locale fournit un certain nombre de fonctionnalités utiles pour les tests de pénétration standard, notamment:
pwncat offre également la possibilité de réintégrer automatiquement ces "tampers" distantsLe cadre sous-jacent pour interagir avec l'hôte distant vise à résumer le shell sous-jacent et la méthode de connexion autant que possible, permettant aux commandes et aux plugins d'interagir de manière transparente avec l'hôte distant.
Vous pouvez en savoir plus sur l'interaction avec pwncat et sur le cadre sous-jacent de la documentation. Si vous avez une idée pour une nouvelle méthode d'escalade ou une méthode de persistance, veuillez jeter un œil à la documentation de l'API spécifiquement. Les demandes de traction sont les bienvenues!
PWNCAT aimerait être un couteau à armée suisse de l'équipe rouge. Espérons que bientôt, plus de fonctionnalités seront ajoutées.
Parce que pwncat essaie d'interagir abstraitement avec n'importe quel shell avec des dépendances du système à distance minimales, il y a des cas de bord que nous avons trouvés. Lorsque nous les trouvons, nous faisons tout notre possible pour les rendre compte et les masquer à l'utilisateur. Cependant, certains ont glissé à travers les mailles du filet et ont été observés dans la nature. Lorsque cela se produit, pwncat fera tout ce qu'il peut pour préserver votre terminal, mais vous pouvez être accueilli avec des défaillances de sortie ou de commande particulières.
Alors que BSD est un noyau basé sur Unix, en pratique, ses outils d'utilisateur sont sensiblement différents de leurs homologues Linux. Pour cette raison, de nombreuses fonctionnalités automatisées de pwncat ne fonctionneront pas ou échoueront carrément lors de la course contre une cible basée sur BSD. J'ai essayé d'attraper toutes les erreurs ou les cas de bord, mais il y a probablement des hoquets qui n'ont pas été entièrement testés contre BSD. Dans tous les cas, la coquille stabilisée devrait fonctionner dans un environnement BSD, mais je ne fournit aucune garantie.
Si je trouve un temps plus tard sur la route, je peux essayer de stabiliser pwncat sur BSD, mais pour l'instant, je me concentre sur les distributions basées sur Linux. Si vous souhaitez contribuer à faire en sorte que pwncat se comporte mieux sur BSD, vous êtes plus que la bienvenue pour tendre la main ou simplement fourrer le repo. Comme toujours, les demandes de traction sont les bienvenues!