Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/zeronetworks/cornershot
ReconnaissanceAnalyse des VulnérabilitésCollecte d'InformationsSécurité RéseauTests d'Intrusion
GitHubzeronetworks/cornershot

cornershot

Amplifier la visibilité réseau depuis plusieurs POV d'autres hôtes.

Voir le dépôt
311494il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

GitHub release (latest SemVer) GitHub all releases

Qu'est-ce que CornerShot

En temps de guerre, CornerShot est une arme qui permet à un soldat de regarder au-delà d'un coin (et éventuellement de tirer) sans risquer de s'exposer. De la même manière, le package CornerShot permet d'examiner l'accès réseau d'un hôte distant sans avoir besoin de privilèges spéciaux sur cet hôte.

En utilisant CornerShot, une source, ayant un accès réseau à un porteur (carrier), peut déterminer s'il existe un accès réseau entre le porteur et la cible pour un port spécifique p.

Par exemple, supposons qu'une équipe rouge tente de se propager d'un hôte source A "compromis" vers un hôte cible X, pour lequel l'hôte A n'a pas d'accès. S'ils se propagent via l'hôte B, ils découvriront alors seulement qu'il n'y a pas d'accès réseau entre B et X.

En utilisant CornerShot, l'équipe peut découvrir que l'hôte C a en fait accès à la cible X, donc la propagation vers la cible X devrait d'abord passer par l'hôte C.

root@kitploit:~
+-----+        +-----+          +-----+
|     |        |     | filtré    |     |
|  A  +-------->  B  +----X--->(p) X  |
|     |        |     |          |     |
+-----+        +-----+          +-(p)-+
 source      porteur            cible
   +                               ^
   |                               |
   |           +-----+             |
   |           |     |   ouvert    |
   +---------->+  C  +-------------+
               |     |
               +-----+

Comme nmap, CornerShot différencie les états de ports suivants : ouvert, fermé, filtré et inconnu (s'il ne peut pas être déterminé).

La démonstration suivante montre l'exécution de CornerShot contre deux hôtes porteurs 172.0.1.12 & 172.0.1.13, afin de déterminer s'ils ont un accès réseau à 192.168.200.1 :

cornershot demo

En savoir plus ici.

Cas d'utilisation

Déploiement unique pour une visibilité réseau complète

La tâche apparemment simple d'identifier si un hôte B dans le réseau a accès à l'hôte C peut nécessiter un large déploiement de capteurs réseau, d'agents sur les appareils ou la collecte d'une multitude de règles de pare-feu, de configurations de routeurs et de politiques hôtes.

CornerShot peut simplifier ce processus en utilisant un (ou très peu) agent qui peut interroger d'autres hôtes du réseau pour déterminer leur accès à des hôtes distants.

Valider les chemins BloodHound

Les équipes de sécurité qui utilisent BloodHound pour trouver et atténuer les chemins d'élévation de privilèges dans leur réseau luttent souvent contre des millions de chemins logiques découverts par BloodHound.

ShotHound est un outil qui intègre CornerShot à BloodHound afin de découvrir des chemins pratiques soutenus par un accès réseau.

Pour commencer

CornerShot peut être utilisé comme un package ou comme un module autonome. Les seules exigences sont Python 3 et le paquet impacket.

Installation

root@kitploit:~
pip install cornershot

Utilisation autonome

L'utilisation de base nécessite les identifiants d'un utilisateur de domaine valide, un nom de domaine FQDN, une IP de porteur et une IP cible.

root@kitploit:~
python -m cornershot <utilisateur> <mot_de_passe> <domaine> <porteur> <cible>

Pour analyser une gamme de porteurs contre une gamme de cibles, des sous-réseaux ou des plages d'IP peuvent être utilisés dans une liste séparée par des virgules :

root@kitploit:~
python -m cornershot <utilisateur> <mot_de_passe> <domaine> 192.168.1.10-192.168.1.20 192.168.5.0/24,192.168.6.0/24

Par défaut, CornerShot essaiera d'analyser les ports suivants : 135, 445, 3389, 5985, 5986. L'utilisateur peut fournir une liste séparée par des virgules de ports et plages de ports :

root@kitploit:~
python -m cornershot -tp 22,8080,45000-45005 <utilisateur> <mot_de_passe> <domaine> <porteur> <cible>

En tant que package

Dans le code, il faut instancier un objet CornerShot avec le nom d'utilisateur, le mot de passe et le nom de domaine d'un utilisateur de domaine valide. L'ajout de porteurs, cibles et ports se fait via la méthode add_shots. Une fois prêt, la méthode open_fire peut être appelée, qui effectue uniquement les appels RPC pertinents en fonction des ports requis.

root@kitploit:~
from cornershot import CornerShot
cs = CornerShot("nom_utilisateur", "mot_de_passe", "fqdn")
cs.add_shots(porteurs=["192.168.1.1"], cibles=["192.168.1.2","192.168.1.3"])
résultats = cs.open_fire()

Le résultat de open_fire est un dictionnaire avec des clés de porteurs, chaque porteur a un autre ensemble de clés pour les cibles, et enfin, chaque cible contient un dictionnaire de ports et leurs états respectifs. Voici un exemple de format du résultat :

root@kitploit:~
{'porteur_1': 
	{'cible_1': 
		{135: 'inconnu', 445: 'filtré', 3389: 'filtré', 5986: 'filtré', 5985: 'filtré'},
	'cible_2': 
		{135: 'inconnu', 445: 'ouvert', 5985: 'inconnu', 5986: 'filtré', 3389: 'ouvert'}
	}, 
'porteur_2': 
	{'cible_1': 
		{3389: 'filtré', 135: 'filtré', 5985: 'filtré', 445: 'filtré', 5986: 'inconnu'}, 
	'cible_2': 
		{5985: 'filtré', 5986: 'filtré', 445: 'filtré', 135: 'filtré', 3389: 'ouvert'}
	}
}

Comment fonctionne CornerShot ?

CornerShot s'appuie sur diverses méthodes standard d'appel de procédure distante (RPC) bien documentées, utilisées par divers services Microsoft. En utilisant des méthodes qui ne nécessitent qu'un compte authentifié dans le domaine, CornerShot est capable de déclencher du trafic réseau depuis un hôte porteur vers une cible.

CornerShot peut déterminer l'état du port distant en mesurant le temps pris par un appel RPC et en utilisant différents codes d'erreur pour chaque méthode RPC.

Méthodes RPC

Le lecteur connaît peut-être le "printer bug", découvert par Lee Christensen. Bien qu'il soit appelé un bug, il s'agit d'un comportement bien documenté du service d'impression, qui permet à tout utilisateur authentifié de contraindre un serveur distant à s'authentifier sur n'importe quelle machine, en utilisant la méthode RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot utilise les méthodes RPC suivantes de plusieurs protocoles Microsoft (il existe de nombreuses méthodes supplémentaires, qui seront implémentées dans les versions futures) :

  • RPRN : RpcOpenPrinter
  • RRP : BaseRegSaveKey
  • EVEN : ElfrOpenBELW
  • EVEN6 : EvtRpcOpenLogHandle

L'implémentation des protocoles eux-mêmes est réalisée via l'excellent paquet impacket.

RpcOpenPrinter

Cette méthode reçoit un paramètre printerName. Le nom d'imprimante peut être un chemin vers un fichier local, un fichier distant ou même une imprimante web. En fournissant un nom conforme au format WEB_PRINT_SERVER, il est possible d'interroger n'importe quel port distant. Un exemple de nom de serveur d'impression web qui déclenchera du trafic HTTP vers un hôte et un port distant est : "http://<ip_cible>:<port_cible>/printers/ppp/.printer".

BaseRegSaveKey

Pour utiliser cette méthode, nous avons besoin d'une approche en deux étapes : d'abord, ouvrir une clé de registre sur l'hôte distant - ce qui donne un handle valide, et ensuite, essayer de sauvegarder une copie de ce handle vers un fichier distant. La méthode BaseRegSaveKey reçoit un chemin de fichier vers lequel elle peut sauvegarder une copie d'un registre, ce qui déclenche du trafic SMB sur le port 445 (et 135 en secours) vers une cible. La clé de registre que CornerShot ouvre est HKEY_CURRENT_USER, qui est ouverte en lecture par défaut sur la plupart des clients Windows.

ElfrOpenBELW

Cette fonction tente de sauvegarder des événements Windows dans un chemin de fichier, qui peut être distant - dans ce cas, le service essaiera d'accéder à l'hôte et au chemin distants.

EvtRpcOpenLogHandle

Similaire à la méthode EVEN, à la différence que cette méthode utilise une version différente du protocole Windows Events, qui est effectuée directement via TCP - pas besoin que le port SMB soit ouvert.

Détermination de l'état du port

CornerShot estime l'état des ports distants en se basant sur des facteurs temporels et les messages d'erreur reçus par la méthode RPC ou le transport sous-jacent. En expérimentant avec différents hôtes Windows et divers protocoles RPC, nous avons établi 3 seuils de temporisation différents qui se sont avérés efficaces dans la plupart des environnements réseau. Ces seuils sont mieux illustrés par la figure suivante :

root@kitploit:~
                +                           +                 +     
                |                           |                 |
     inconnu    |       ouvert / fermé      |     filtré      |  ouvert
     /          |                           |                 |
     ouvert     |                           |                 |
                |                           |                 |
  +-------------+------------------+-----------------+--------------+
  0            0.5                          20                40    Secondes
               MIN                        FILTRÉ            SUPÉRIEUR

Le seuil MIN est de 0,5 seconde ; les réponses en dessous de ce seuil indiquent soit une erreur dans la méthode RPC sous-jacente ou le transport sous-jacent, soit une réponse a pu être reçue de l'hôte cible.

Les réponses en dessous du seuil FILTRÉ de 20 secondes peuvent indiquer un port ouvert ou fermé, selon le type de message d'erreur reçu pour la méthode.

Les réponses entre les seuils FILTRÉ et SUPÉRIEUR de 40 secondes indiquent un port filtré pour toutes les méthodes testées (jusqu'à présent...). Et les requêtes prenant plus que la limite SUPÉRIEUR indiquent une connexion TCP ouverte prolongée.

Support des systèmes d'exploitation

L'exécution de CornerShot contre différentes versions et configurations de systèmes d'exploitation donnera des résultats différents. Toutes les versions de Windows n'ont pas les mêmes tubes nommés ou ne se comportent pas de la même manière lorsqu'elles sont interrogées avec la même méthode RPC. La plupart des Windows en configuration OOTB n'exposent pas SMB et d'autres services RPC sur le réseau, mais l'expérience montre que dans les grands environnements, ces ports ont tendance à être ouverts et accessibles pour la plupart des actifs.

Le tableau suivant montre le support par défaut pour divers protocoles RPC, à condition que les ports appropriés soient accessibles à l'hôte porteur et qu'aucun changement de configuration n'ait été effectué sur l'hôte :

* Si le service Webclient est en cours d'exécution sur une machine cliente, des ports supplémentaires peuvent être analysés. Actuellement, CornerShot ne supporte pas cette option.

** Le protocole RPRN est supporté sur les serveurs, mais l'ouverture d'une imprimante web distante ne fonctionne pas (c'est pourquoi nous ne pouvons pas analyser n'importe quel port cible) - jusqu'à ce que nous trouvions une solution de contournement 😉

Développeurs

Les contributions de nouveaux tirs RPC, ou toute autre contribution, sont les bienvenues !

Toutes les méthodes RPC sont implémentées sous /shots et héritent d'une classe abstraite nommée BaseRPCShot. Le dossier /example montre comment créer un tir RPC personnalisé et l'utiliser dans le code.

Licence

CornerShot est distribué sous la licence Apache 2.0. Pour plus de détails, voir LICENSE.

Nous contacter

Nous sommes ravis de vous entendre ! Pour les bugs, correctifs, suggestions sur ce package, veuillez nous contacter à [email protected]

Télécharger l’outil
OSProtocoles RPC supportésPorts porteur ouverts requisPorts cibles possibles à analyser
Windows 7EVEN,EVEN6445 / 135 & port tcp even6445*
Windows 8EVEN,EVEN6445 / 135 & port tcp even6445*
Windows 10EVEN,EVEN6,RPRN445 / 135 & port tcp even6N'IMPORTE
Server 2008EVEN,EVEN6,RRP,RPRN**445 / 135 & port tcp even6445
Server 2012EVEN,EVEN6,RRP,RPRN**445 / 135 & port tcp even6445
Server 2016EVEN,EVEN6,RRP,RPRN**445 / 135 & port tcp even6445
Server 2019EVEN,EVEN6,RRP,RPRN**445 / 135 & port tcp even6445