
Erweitern Sie die Netzwerksichtbarkeit aus mehreren Blickwinkeln anderer Hosts.
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.
+-----+ +-----+ +-----+
| | | | 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:

Weitere Informationen hier.
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.
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.
CornerShot kann als Paket oder als eigenständiges Modul verwendet werden. Die einzigen Anforderungen sind Python 3 und das impacket-Paket.
pip install cornershot
Die grundlegende Verwendung erfordert Anmeldedaten eines gültigen Domänenbenutzers, einen FQDN-Domänennamen, eine Träger-IP und eine Ziel-IP.
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:
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:
python -m cornershot -tp 22,8080,45000-45005 <user> <password> <domain> <carrier> <target>
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.
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:
{'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'}
}
}
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.
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):
Die Implementierung der Protokolle selbst erfolgt über das hervorragende impacket-Paket.