Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cornershot — Erweitern Sie die Netzwerksichtbarkeit aus mehreren Blickwinkeln anderer Hosts. | Kitploit
Tools/GitHubGitHub/zeronetworks/cornershot
AufklärungSchwachstellenanalyseInformationsbeschaffungNetzwerksicherheitPenetrationstests
GitHubzeronetworks/cornershot

cornershot

Erweitern Sie die Netzwerksichtbarkeit aus mehreren Blickwinkeln anderer Hosts.

Repository anzeigen
311494vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

GitHub release (latest SemVer) GitHub all releases

Was ist CornerShot?

Im Krieg ist CornerShot eine Waffe, die es einem Soldaten ermöglicht, um eine Ecke zu schauen (und möglicherweise einen Schuss abzugeben), ohne sich selbst zu exponieren. Ähnlich ermöglicht das CornerShot-Paket, den Netzwerkzugriff eines entfernten Hosts zu überprüfen, ohne dass man besondere Berechtigungen auf diesem Host benötigt.

Mit CornerShot kann eine Quelle mit Netzwerkzugriff auf einen Träger feststellen, ob zwischen Träger und Ziel Netzwerkzugriff für einen bestimmten Port p besteht.

Angenommen, ein Red Team versucht, von einem „kompromittierten" Quell-Host A zu einem Ziel-Host X zu gelangen, zu dem Host A keinen Zugriff hat. Wenn sie über Host B propagieren, werden sie erst dann feststellen, dass es keinen Netzwerkzugriff zwischen Host B und X gibt.

Durch die Verwendung von CornerShot kann das Team entdecken, dass Host C tatsächlich Zugriff auf Ziel X hat, sodass die Propagation auf Ziel X zunächst über Host C erfolgen sollte.

root@kitploit:~
+-----+        +-----+          +-----+
|     |        |     | gefiltert|     |
|  A  +-------->  B  +----X--->(p) X  |
|     |        |     |          |     |
+-----+        +-----+          +-(p)-+
 Quelle      Träger           Ziel
   +                               ^
   |                               |
   |           +-----+             |
   |           |     |   offen     |
   +---------->+  C  +-------------+
               |     |
               +-----+

Ähnlich wie nmap unterscheidet CornerShot zwischen den folgenden Portzuständen: open, closed, filtered und unknown (falls nicht bestimmbar).

Die folgende Demo zeigt die Ausführung von CornerShot gegen zwei Träger-Hosts 172.0.1.12 & 172.0.1.13, um festzustellen, ob sie Netzwerkzugriff auf 192.168.200.1 haben:

cornershot demo

Weitere Informationen hier.

Anwendungsfälle

Einzelne Bereitstellung für vollständige Netzwerktransparenz

Die scheinbar einfache Aufgabe, festzustellen, ob ein Host B im Netzwerk Zugriff auf Host C hat, kann eine umfangreiche Bereitstellung von Netzwerksensoren, Geräteagenten oder die Sammlung einer Vielzahl von Firewall-Regeln, Router-Konfigurationen und Host-Richtlinien erfordern.

CornerShot kann diesen Prozess vereinfachen, indem ein (oder sehr wenige) Agenten verwendet werden, die andere Hosts im Netzwerk abfragen können, um deren Zugriff auf entfernte Hosts zu bestimmen.

Validierung von BloodHound-Pfaden

Sicherheitsteams, die BloodHound nutzen, um Berechtigungserweiterungspfade in ihrem Netzwerk zu finden und zu entschärfen, kämpfen oft mit Millionen von logischen Pfaden, die von BloodHound entdeckt werden.

ShotHound ist ein Tool, das CornerShot mit BloodHound integriert, um praktische Pfade zu entdecken, die durch Netzwerkzugriff unterstützt werden.

Erste Schritte

CornerShot kann als Paket oder als eigenständiges Modul verwendet werden. Die einzigen Anforderungen sind Python 3 und das impacket-Paket.

Installation

root@kitploit:~
pip install cornershot

Eigenständige Verwendung

Die grundlegende Verwendung erfordert Anmeldedaten eines gültigen Domänenbenutzers, einen FQDN-Domänennamen, eine Träger-IP und eine Ziel-IP.

root@kitploit:~
python -m cornershot <user> <password> <domain> <carrier> <target>

Um einen Bereich von Trägern gegen einen Bereich von Zielen zu scannen, können Subnetze oder IP-Bereiche in einer kommagetrennten Liste verwendet werden:

root@kitploit:~
python -m cornershot <user> <password> <domain> 192.168.1.10-192.168.1.20 192.168.5.0/24,192.168.6.0/24

Standardmäßig versucht CornerShot, die folgenden Ports zu scannen: 135, 445, 3389, 5985, 5986. Der Benutzer kann eine kommagetrennte Liste von Ports und Portbereichen angeben:

root@kitploit:~
python -m cornershot -tp 22,8080,45000-45005 <user> <password> <domain> <carrier> <target>

Als Paket

Im Code muss man ein CornerShot-Objekt mit dem Benutzernamen, dem Passwort und dem Domänennamen eines gültigen Domänenbenutzers instanziieren. Das Hinzufügen von Trägern, Zielen und Ports erfolgt über die Methode add_shots. Sobald dies erledigt ist, kann die Methode open_fire aufgerufen werden, die nur die relevanten RPC-Aufrufe basierend auf den erforderlichen Ports durchführt.

root@kitploit:~
from cornershot import CornerShot
cs = CornerShot("username", "password", "fqdn")
cs.add_shots(carriers=["192.168.1.1"],targets=["192.168.1.2","192.168.1.3"])
results = cs.open_fire()

Das Ergebnis von open_fire ist ein Wörterbuch mit Schlüsseln für Träger; jeder Träger hat einen weiteren Satz von Schlüsseln für Ziele, und schließlich enthält jedes Ziel ein Wörterbuch von Ports und deren jeweiligen Zuständen. Dies ist ein Beispielformat eines Ergebnisses:

root@kitploit:~
{'carrier_1': 
	{'target_1': 
		{135: 'unknown', 445: 'filtered', 3389: 'filtered', 5986: 'filtered', 5985: 'filtered'},
	'target_2': 
		{135: 'unknown', 445: 'open', 5985: 'unknown', 5986: 'filtered', 3389: 'open'}
	}, 
'carrier_2': 
	{'target_1': 
		{3389: 'filtered', 135: 'filtered', 5985: 'filtered', 445: 'filtered', 5986: 'unknown'}, 
	'target_2': 
		{5985: 'filtered', 5986: 'filtered', 445: 'filtered', 135: 'filtered', 3389: 'open'}
	}
}

Wie funktioniert CornerShot?

CornerShot basiert auf verschiedenen, gut dokumentierten, standardmäßigen Remote Procedure Call (RPC)-Methoden, die von verschiedenen Microsoft-Diensten verwendet werden. Durch die Verwendung von Methoden, die nur ein authentifiziertes Konto in der Domäne erfordern, kann CornerShot Netzwerkverkehr von einem Träger-Host zu einem Ziel auslösen.

CornerShot kann den Zustand des entfernten Ports bestimmen, indem es die Zeit misst, die ein RPC-Aufruf benötigt hat, und verschiedene Fehlercodes für jede RPC-Methode verwendet.

RPC-Methoden

Der Leser mag mit dem „Printer Bug” vertraut sein, der von Lee Christensen entdeckt wurde. Obwohl es als Bug bezeichnet wird, handelt es sich um ein gut dokumentiertes Verhalten des Druckdienstes, das es jedem authentifizierten Benutzer ermöglicht, einen entfernten Server zu zwingen, sich bei einem beliebigen Rechner zu authentifizieren, unter Verwendung der Methode RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot nutzt die folgenden RPC-Methoden aus mehreren Microsoft-Protokollen (es gibt viele weitere Methoden, die in zukünftigen Versionen implementiert werden):

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

Die Implementierung der Protokolle selbst erfolgt über das hervorragende impacket-Paket.

RpcOpenPrinter

Diese Methode erhält einen printerName als Parameter. Der printerName kann ein Pfad zu einer lokalen Datei, einer entfernten Datei oder sogar zu einem Webdrucker sein. Durch die Angabe eines Namens, der dem WEB_PRINT_SERVER-Format entspricht, kann jeder entfernte Port abgefragt werden. Ein Beispiel für einen Web-Drucker-Servernamen, der HTTP-Verkehr zu einem entfernten Host und Port auslöst, ist: "http://<target_ip>:<target_port>/printers/ppp/.printer".

BaseRegSaveKey

Um diese Methode zu nutzen, benötigen wir ein zweistufiges Vorgehen: Zuerst öffnen wir einen Registrierungsschlüssel auf dem entfernten Host – was zu einem gültigen Handle führt – und zweitens versuchen wir, eine Sicherung dieses Handles in einer entfernten Datei zu speichern. Die BaseRegSaveKey-Methode erhält einen Dateipfad, in den sie eine Sicherung einer Registrierung speichern kann, was SMB-Verkehr über Port 445 (und 135 als Backup) zu einem Ziel auslöst. Der Registrierungsschlüssel, den CornerShot öffnet, ist HKEY_CURRENT_USER, der standardmäßig auf den meisten Client-Hosts zum Lesen geöffnet ist.

ElfrOpenBELW

Diese Funktion versucht, Windows-Ereignisse in einen Dateipfad zu sichern, der entfernt sein kann – in einem solchen Fall versucht der Dienst, auf den entfernten Host und Pfad zuzugreifen.

EvtRpcOpenLogHandle

Ähnlich wie die EVEN-Methode, nur dass diese Methode eine andere Version des Windows-Ereignisprotokolls verwendet, die direkt über TCP erfolgt – es ist kein offener SMB-Port erforderlich.

Bestimmung des Portzustands

CornerShot schätzt den Zustand der entfernten Ports basierend auf Zeitfaktoren und Fehlermeldungen, die von der RPC-Methode oder dem zugrunde liegenden Transport empfangen werden. Durch Experimente mit verschiedenen Windows-Hosts und verschiedenen RPC-Protokollen haben wir drei verschiedene Zeitschwellenwerte ermittelt, die sich in den meisten Netzwerkumgebungen als funktionierend erwiesen haben. Diese Schwellenwerte werden am besten mit der folgenden Abbildung veranschaulicht:

root@kitploit:~
                +                           +                 +     
                |                           |                 |
     unknown    |       open / closed       |     filtered    |  open
     /          |                           |                 |
     open       |                           |                 |
                |                           |                 |
  +-------------+------------------+-----------------+--------------+
  0            0.5                          20                40    Sekunden
               MIN                        FILTERED           UPPER  

Der MIN-Schwellenwert liegt bei 0,5 Sekunden. Antworten unterhalb dieses Schwellenwerts bedeuten entweder einen Fehler in der zugrunde liegenden RPC-Methode oder im zugrunde liegenden Transport, oder es könnte eine Antwort vom Zielhost empfangen worden sein.

Antworten unterhalb des FILTERED-Schwellenwerts von 20 Sekunden könnten entweder einen offenen oder einen geschlossenen Port anzeigen, abhängig von der Art der Fehlermeldung, die für die Methode empfangen wurde.

Antworten zwischen dem FILTERED- und dem UPPER-Schwellenwert von 40 Sekunden weisen bei allen getesteten Methoden (bisher...) auf einen gefilterten Port hin. Und Anfragen, die länger als das UPPER-Limit dauern, deuten auf eine verlängerte offene TCP-Verbindung hin.

Betriebssystemunterstützung

Die Ausführung von CornerShot gegen verschiedene Betriebssystemversionen und -konfigurationen wird unterschiedliche Ergebnisse liefern. Nicht alle Windows-Versionen haben die gleichen Named Pipes oder verhalten sich gleich, wenn sie mit derselben RPC-Methode abgefragt werden. Die meisten Windows-Installationen setzen SMB und andere RPC-Dienste nicht standardmäßig über das Netzwerk frei, jedoch hat die Erfahrung gezeigt, dass in großen Umgebungen diese Ports oft offen und für die meisten Assets zugänglich sind.

Die folgende Tabelle zeigt die Standardunterstützung für verschiedene RPC-Protokolle, vorausgesetzt, die entsprechenden Ports sind für den Träger-Host erreichbar und es wurden keine Konfigurationsänderungen am Host vorgenommen:

* Wenn der Webclient-Dienst auf einem Client-Rechner läuft, können zusätzliche Ports gescannt werden. Derzeit unterstützt CornerShot diese Option nicht.

** Das RPRN-Protokoll wird auf Server-Hosts unterstützt, jedoch funktioniert das Öffnen eines entfernten Webdruckers nicht (weshalb wir keinen BELIEBIGEN Ziel-Port scannen können) – bis wir einen Workaround finden 😉

Entwickler

Weitere RPC-Shots oder jeder andere Beitrag ist willkommen!

Alle RPC-Methoden sind unter /shots implementiert und erben von einer abstrakten Klasse namens BaseRPCShot. Der Ordner /example zeigt, wie man einen benutzerdefinierten RPC-Shot erstellt und im Code verwendet.

Lizenz

CornerShot wird unter der Apache 2.0-Lizenz veröffentlicht. Weitere Details finden Sie in der LICENSE.

Kontakt

Wir freuen uns, von Ihnen zu hören! Bei Fehlern, Patches, Vorschlägen zu diesem Paket kontaktieren Sie uns bitte unter [email protected].

Tool herunterladen
OSUnterstützte RPC-ProtokolleErforderliche offene Träger-PortsMögliche zu scannende Ziel-Ports
Windows 7EVEN,EVEN6445 / 135 & even6 TCP-Port445*
Windows 8EVEN,EVEN6445 / 135 & even6 TCP-Port445*
Windows 10EVEN,EVEN6,RPRN445 / 135 & even6 TCP-PortJEDER
Server 2008EVEN,EVEN6,RRP,RPRN**445 / 135 & even6 TCP-Port445
Server 2012EVEN,EVEN6,RRP,RPRN**445 / 135 & even6 TCP-Port445
Server 2016EVEN,EVEN6,RRP,RPRN**445 / 135 & even6 TCP-Port445
Server 2019EVEN,EVEN6,RRP,RPRN**445 / 135 & even6 TCP-Port445