Ce repo vise à servir deux objectifs. Tout d'abord, il fournit un ensemble intéressant de commandes de base de connaissance de la situation implémentées dans un fichier objet balise (BOF). Cela vous permet d'effectuer quelques vérifications sur un hôte avant de commencer à exécuter des commandes qui peuvent être plus invasives.
Son objectif plus large est de fournir un exemple de code et un flux de travail permettant à d'autres de commencer à créer davantage de BOF. Il s'agit d'un document d'accompagnement du billet de blog rédigé ici : https://www.trustedsec.com/blog/a-developers-introduction-to-beacon-object-files/
Si vous souhaitez utiliser le même workflow que ce référentiel, vos étapes de base sont les suivantes :
En réalité, cela pourrait être compressé dans un script d'assistance, mais ces étapes n'ont pas été prises pour cet effort.
Commandes | Usage | Remarques |
---|---|---|
adcs_enum | adcs_enum | Énumérer les autorités de certification et les modèles dans AD à l'aide des fonctions Win32 |
adcs_enum_com | adcs_enum_com | Énumérer les autorités de certification et les modèles dans l'AD à l'aide de l'objet COM ICertConfig |
adcs_enum_com2 | adcs_enum_com2 | Énumérer les autorités de certification et les modèles dans AD à l'aide de l'objet COM IX509PolicyServerListManager |
adv_audit_policies | adv_audit_policies | Récupérer des politiques d'audit de sécurité avancées |
arpège | arpège | Liste du tableau ARP |
cacls | cacls [chemin du fichier] | Répertorie les autorisations utilisateur pour le fichier spécifié, les caractères génériques sont pris en charge |
dir | rép [répertoire] [/s] | Liste les fichiers dans un répertoire. Prend en charge les caractères génériques (par exemple "C:WindowsS*") contrairement à la commande CobaltStrike ls |
pilotes | pilotes | Énumérez les services installés Imagepaths pour vérifier le certificat de signature par rapport aux fournisseurs AV/EDR connus |
enum_filter_driver | enum_filter_driver [opt: ordinateur] | Énumérer les pilotes de filtre |
enumLocalSessions | enumLocalSessions | Énumérer les sessions utilisateur actuellement connectées, à la fois locales et via RDP |
env | env | Répertorier les variables d'environnement de processus |
findLoadedModule | findLoadedModule [modulepart] [opt:procnamepart] | Recherchez dans quels processus *modulepart* sont chargés, en recherchant éventuellement simplement *procnamepart* |
get_password_policy | get_password_policy [nom d'hôte] | Obtenez la politique de mot de passe et les verrouillages configurés pour le serveur cible ou le domaine |
ipconfig | ipconfig | Répertorier l'adresse IPv4, le nom d'hôte et le serveur DNS |
ldapsearch | ldapsearch [requête] [opt : attribut] [opt : results_limit] [opt : nom d'hôte ou IP du DC] [opt : nom distinctif] | Exécutez des recherches LDAP (REMARQUE : spécifiez *,ntsecuritydescriptor comme paramètre d'attribut si vous souhaitez que tous les attributs + ACL encodées en base64 des objets, cela peut ensuite être résolu à l'aide de BOFHound. Pourrait éventuellement casser la pagination, même si tout semblait bien pendant les tests.) |
listes | listes | Répertoriez les entrées du cache DNS. Essayez d'interroger et de résoudre chacun |
list_firewall_rules | list_firewall_rules | Répertorier les règles du pare-feu Windows |
listemods | listmods [opt : pid] | Répertoriez les modules de processus (DLL). Ciblez le processus actuel si le PID est vide. Complément aux driversigs pour déterminer si notre processus a été injecté par AV/EDR |
listes de lecture | listes de lecture | Liste des canaux nommés |
lieu | lieu | Répertorier la langue des paramètres régionaux du système, l'ID des paramètres régionaux, la date, l'heure et le pays |
netGroupList | netGroupList [opt : domaine] | Répertorier les groupes du domaine par défaut ou spécifié |
netGroupListMembers | netGroupListMembers [nom du groupe] [opt : domaine] | Répertorier les membres du groupe du domaine par défaut ou spécifié |
netLocalGroupList | netLocalGroupList [opt : serveur] | Répertorier les groupes locaux à partir de l'ordinateur local ou spécifié |
netLocalGroupListMembers | netLocalGroupListMembers [nom du groupe] [opt : serveur] | Répertorier les groupes locaux à partir de l'ordinateur local ou spécifié |
netLocalGroupListMembers2 | netLocalGroupListMembers2 [opt : nom du groupe] [opt : serveur] | Version modifiée de netLocalGroupListMembers prenant en charge BOFHound |
connexion Internet | netloggedon [nom d'hôte] | Renvoie les utilisateurs connectés sur l'ordinateur local ou distant |
netloggedon2 | netloggedon2 [opt : nom d'hôte] | Version modifiée de netloggedon prenant en charge BOFHound |
session réseau | netsession [opt: ordinateur] | Énumérer les sessions sur l'ordinateur local ou spécifié |
session réseau2 | netsession2 [opt:ordinateur] [opt:méthode de résolution] [opt:serveur DNS] | Version modifiée de netsession prenant en charge BOFHound |
partages nets | netshares [nom d'hôte] | Répertorier les partages sur l'ordinateur local ou distant |
netstat | netstat | Ports de liste TCP et UDP IPv4 |
heure nette | nettime [nom d'hôte] | Afficher l'heure sur un ordinateur distant |
heure de mise en réseau | netuptime [nom d'hôte] | Renvoie des informations sur l'heure de démarrage sur l'ordinateur local ou distant |
utilisateur du réseau | netuser [nom d'utilisateur] [opt : domaine] | Obtenez des informations sur un utilisateur spécifique. Extraire du domaine si un nom de domaine est spécifié |
netuse_add | netuse_add [nom de partage] [opt: nom d'utilisateur] [opt: mot de passe] [opt:/DEVICE: nom de périphérique] [opt:/PERSIST] [opt:/REQUIREPRIVACY] | Lier une nouvelle connexion à un ordinateur distant |
netuse_delete | netuse_delete [device||sharename] [opt:/PERSIST] [opt:/FORCE] | Supprimer le périphérique lié/nom de partage] |
liste_netuse | netuse_list [opt: cible] | Répertoriez toutes les ressources de partage liées ou les informations sur la ressource locale cible |
vue nette | vue nette | Répertorier les ordinateurs accessibles dans le domaine actuel |
nslookup | nslookup [nom d'hôte] [opt : serveur DNS] [opt : type d'enregistrement] | Faites une requête DNS. Le serveur DNS est le serveur que vous souhaitez interroger (ne précisez pas ou 0 par défaut) le type d'enregistrement est quelque chose comme A, AAAA ou ANY. Certaines situations sont limitées en raison des crashs observés |
sonde | sonde [hôte] [port] | Vérifiez si un port spécifique est ouvert |
résession | regsession [opt : nom d'hôte] | Renvoie les SID des utilisateurs connectés en énumérant HKEY_USERS. Compatible avec BOFHound |
reg_query | [opt : nom d'hôte] [ruche] [chemin] [opt : valeur à interroger] | Interroger une valeur de registre ou énumérer une seule clé |
reg_query_recursive | [opt : nom d'hôte] [ruche] [chemin] | Énumérer récursivement une clé en commençant par le chemin |
ressources | ressources | Répertorier l'utilisation de la mémoire et l'espace disque disponible sur le disque dur principal |
impression d'itinéraire | impression d'itinéraire | Répertorier les routes IPv4 |
sc_enum | sc_enum [opt: serveur] | Énumérer les services pour les informations qc, query, qfailure et qtriggers |
sc_qc | sc_qc [nom du service] [opt: serveur] | implémentation sc qc dans BOF |
sc_qdescription | sc_qdescription [nom du service] [opt : serveur] | implémentation de sc qdescription dans BOF |
sc_qfailure | sc_qfailure [nom du service] [opt: serveur] | Interroger un service pour connaître les conditions d'échec |
sc_qtriggerinfo | sc_qtriggerinfo [nom du service] [opt: serveur] | Interroger un service pour connaître les conditions de déclenchement |
sc_query | sc_query [opt : nom du service] [opt : serveur] | implémentation de la requête sc dans BOF |
schtasksenum | schtasksenum [opt : serveur] | Énumérer les tâches planifiées sur l'ordinateur local ou distant |
schtasksquery | schtasksquery [opt : serveur] [chemin de la tâche] | Interroger la tâche donnée sur l'ordinateur local ou distant |
liste de tâches | liste de tâches [opt : serveur] | Répertorier les processus en cours d'exécution, notamment PID, PPID et ComandLine (utilise wmi) |
disponibilité | disponibilité | Répertoriez le temps de démarrage du système et la durée de son exécution |
vsssenum | vssenum [nom d'hôte] [opt: nom de partage] | Énumérer les clichés instantanés sur certains serveurs Server 2012+ |
whoami | whoami | Liste quiami/tous |
liste de fenêtres | liste de fenêtres [opt : tout] | Liste les fenêtres visibles dans la session utilisateur en cours |
wmi_query | Requête wmi_query [opt : serveur] [opt : espace de noms] | Exécutez une requête wmi et affichez les résultats au format CSV |
Notez que la raison pour laquelle reg_query est inclus lorsque CS a une commande reg query(v) intégrée est que celle-ci peut cibler des ordinateurs distants et a la capacité d'énumérer de manière récursive une clé entière.
Le code fonctionnel de la plupart de ces commandes provient du projet Reactos ou d'exemples de code hébergés sur MSDN. La base de code des pilotes provient de https://gist.github.com/jthuraisamy/4c4c751df09f83d3620013f5d370d3b9
Merci à tous les contributeurs répertoriés sous contributeurs. Chacun d'entre vous a apporté quelque chose de significatif à ce référentiel et s'est occupé de moi et de mes processus de révision. J'apprécie chacun d'entre vous de m'avoir appris et contribué à faire de ce référentiel BOF le meilleur possible !
Les BOF précompilés sont fournis dans ce projet et sont compilés à l'aide d'une version récente de Mingw-w64 généralement installée à partir de Brew.
Ces BOF sont écrits en pensant à la prise en charge de Windows Vista+. Une nouvelle branche appelée winxp_2003 a été créée si vous devez utiliser l'ensemble principal de BOF sur ces anciens systèmes. Cette branche restera dans un état moins pris en charge. Il sera fonctionnel, mais pas mis à jour avec chaque nouveau push/fonctionnalité que nous pourrions ajouter.