Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cornershot — Amplifica la visibilità di rete da molteplici punti di vista di altri host. | Kitploit
Strumenti/GitHubGitHub/zeronetworks/cornershot
RicognizioneAnalisi delle VulnerabilitàRaccolta InformazioniSicurezza di RetePenetration Testing
GitHubzeronetworks/cornershot

cornershot

Amplifica la visibilità di rete da molteplici punti di vista di altri host.

Vedi Repository
311492 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

GitHub release (latest SemVer) GitHub all releases

Cos'è CornerShot

In guerra, CornerShot è un'arma che permette a un soldato di guardare oltre un angolo (e possibilmente sparare) senza esporsi al rischio. Allo stesso modo, il pacchetto CornerShot permette di osservare l'accesso di rete di un host remoto senza bisogno di avere privilegi speciali su quell'host.

Usando CornerShot, una sorgente, con accesso di rete a un carrier, può determinare se esiste accesso di rete tra il carrier e il target per una specifica porta p.

Ad esempio, supponiamo che un red team stia cercando di propagarsi da un host sorgente "compromesso" A, a un host target X, a cui l'host A non ha accesso. Se si propagano attraverso l'host B, solo allora scopriranno che non c'è accesso di rete tra l'host B e X.

Usando CornerShot, il team può scoprire che l'host C ha effettivamente accesso al target X, quindi la propagazione verso il target X dovrebbe passare prima attraverso l'host C.

root@kitploit:~
+-----+        +-----+          +-----+
|     |        |     | filtered |     |
|  A  +-------->  B  +----X--->(p) X  |
|     |        |     |          |     |
+-----+        +-----+          +-(p)-+
 source      carrier        target
   +                               ^
   |                               |
   |           +-----+             |
   |           |     |   open      |
   +---------->+  C  +-------------+
               |     |
               +-----+


Similmente a nmap, CornerShot distingue tra i seguenti stati delle porte: open (aperta), closed (chiusa), filtered (filtrata) e unknown (sconosciuta) (se non può essere determinata).

La seguente demo mostra l'esecuzione di CornerShot contro due host carrier 172.0.1.12 e 172.0.1.13, per determinare se hanno accesso di rete a 192.168.200.1:

cornershot demo

Leggi di più qui.

Casi d'Uso

Singola Distribuzione per Visibilità Completa della Rete

Il compito apparentemente semplice di identificare se un host B nella rete ha accesso all'host C può richiedere una grande distribuzione di sensori di rete, agenti sui dispositivi o la raccolta di una moltitudine di regole firewall, configurazioni di router e policy degli host.

CornerShot può semplificare questo processo utilizzando uno (o pochissimi) agenti che possono interrogare altri host nella rete per determinare il loro accesso a host remoti.

Validare i Percorsi di BloodHound

I team di sicurezza che utilizzano BloodHound per trovare e mitigare i percorsi di escalation dei privilegi all'interno della loro rete spesso lottano con milioni di percorsi logici scoperti da BloodHound.

ShotHound è uno strumento che integra CornerShot con BloodHound, al fine di scoprire percorsi pratici supportati dall'accesso di rete.

Per Iniziare

CornerShot può essere utilizzato come pacchetto o come modulo standalone. Gli unici requisiti sono Python 3 e il pacchetto impacket.

Installazione

root@kitploit:~
pip install cornershot

Utilizzo Standalone

L'uso base richiede le credenziali di un utente di dominio valido, un nome di dominio FQDN, un IP carrier e un IP target.

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

Per scansionare un intervallo di carrier contro un intervallo di target, possono essere utilizzati subnet o intervalli IP in una lista delimitata da virgole:

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

Per impostazione predefinita, CornerShot tenterà di scansionare le seguenti porte: 135, 445, 3389, 5985, 5986. L'utente può fornire una lista delimitata da virgole di porte e intervalli di porte:

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

Come Pacchetto

Nel codice, è necessario istanziare un oggetto CornerShot con nome utente, password e nome di dominio di un utente di dominio valido. L'aggiunta di carrier, target e porte si ottiene tramite il metodo add_shots. Una volta pronto, è possibile chiamare il metodo open_fire, che esegue solo le chiamate RPC pertinenti in base alle porte richieste.

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()

Il risultato di open_fire è un dizionario con chiavi dei carrier, ogni carrier ha un altro insieme di chiavi per i target, e infine ogni target contiene un dizionario di porte e i rispettivi stati. Questo è un formato di esempio del risultato:

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'}
	}
}

Come Funziona CornerShot?

CornerShot si basa su vari metodi di Remote Procedure Call (RPC) standard e ben documentati, utilizzati da vari servizi Microsoft. Utilizzando metodi che richiedono solo un account autenticato nel dominio, CornerShot è in grado di innescare traffico di rete da un host carrier verso un target.

CornerShot è in grado di determinare lo stato della porta remota misurando il tempo impiegato da una chiamata RPC e utilizzando diversi codici di errore per ciascun metodo RPC.

Metodi RPC

Il lettore potrebbe conoscere il "printer bug", scoperto da Lee Christensen. Sebbene sia chiamato bug, è un comportamento ben documentato del servizio di stampa, che consente a qualsiasi utente autenticato di costringere un server remoto ad autenticarsi verso qualsiasi macchina, utilizzando il metodo RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot utilizza i seguenti metodi RPC da diversi protocolli Microsoft (ci sono molti altri metodi, che saranno implementati nelle versioni future):

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

L'implementazione dei protocolli stessi è ottenuta tramite il meraviglioso pacchetto impacket.

RpcOpenPrinter

Questo metodo riceve come parametro un printerName. Il nome printerName può essere un percorso a un file locale, un file remoto o anche a una stampante web. Fornendo un nome che sia conforme al formato WEB_PRINT_SERVER, è possibile interrogare qualsiasi porta remota. Un esempio di nome di server di stampa web che innescherà traffico HTTP verso un host e una porta remoti è: "http://<target_ip>:<target_port>/printers/ppp/.printer".

BaseRegSaveKey

Per utilizzare questo metodo, abbiamo bisogno di un approccio in due fasi: prima, aprire una chiave di registro sull'host remoto - che restituisce un handle valido, e poi, tentare di salvare un backup di questo handle su un file remoto. Il metodo BaseRegSaveKey riceve un percorso di file in cui può salvare un backup di un registro, innescando traffico SMB sulla porta 445 (e 135 come backup) verso un target. La chiave di registro che CornerShot apre è HKEY_CURRENT_USER, che è aperta in lettura per impostazione predefinita sulla maggior parte degli host client.

ElfrOpenBELW

Questa funzione tenta di eseguire il backup degli eventi di Windows in un percorso file, che può essere remoto - in tal caso il servizio tenterà di accedere all'host e al percorso remoto.

EvtRpcOpenLogHandle

Simile al metodo EVEN, solo che questo metodo utilizza una versione diversa del protocollo Eventi di Windows, che viene eseguita direttamente su TCP - non è necessario che la porta SMB sia aperta.

Determinazione dello Stato della Porta

CornerShot stima lo stato delle porte remote basandosi su fattori temporali e messaggi di errore ricevuti dal metodo RPC o dal trasporto sottostante. Sperimentando con diversi host Windows e vari protocolli RPC, abbiamo determinato 3 diverse soglie temporali che si sono dimostrate efficaci nella maggior parte degli ambienti di rete. Queste soglie sono meglio illustrate con la seguente figura:

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

La soglia MIN è di 0,5 secondi, le risposte al di sotto di questa soglia indicano un errore nel metodo RPC sottostante o nel trasporto, oppure potrebbe essere stata ricevuta una risposta dall'host target.

Le risposte al di sotto della soglia FILTERED di 20 secondi potrebbero indicare una porta aperta o chiusa, a seconda del tipo di messaggio di errore ricevuto per il metodo.

Le risposte tra la soglia FILTERED e la soglia UPPER di 40 secondi indicano una porta filtrata per tutti i metodi testati (finora...). E le richieste che superano il limite UPPER indicano una connessione TCP aperta prolungata.

Supporto dei Sistemi Operativi

Eseguire CornerShot verso diverse versioni e configurazioni di sistemi operativi produrrà risultati diversi. Non tutte le versioni di Windows hanno le stesse named pipe o si comportano allo stesso modo quando interrogate con lo stesso metodo RPC. La maggior parte dei Windows OOTB non espone SMB e altri servizi RPC sulla rete, tuttavia, l'esperienza ha dimostrato che in ambienti di grandi dimensioni queste porte tendono ad essere aperte e accessibili per la maggior parte delle risorse.

La seguente tabella mostra il supporto predefinito per vari protocolli RPC, dato che le porte appropriate siano accessibili all'host carrier e non siano state apportate modifiche alla configurazione dell'host:

* Se il servizio Webclient è in esecuzione su un computer client, è possibile scansionare porte aggiuntive. Attualmente CornerShot non supporta questa opzione.

** Il protocollo RPRN è supportato sugli host server, tuttavia l'apertura di una stampante web remota non funziona (motivo per cui non possiamo scansionare QUALSIASI porta target) - fino a quando non troveremo una soluzione alternativa 😉

Sviluppatori

Sono benvenuti ulteriori shot RPC o qualsiasi altro contributo!

Tutti i metodi RPC sono implementati in /shots e ereditano da una classe astratta chiamata BaseRPCShot. La cartella /example mostra come creare uno shot RPC personalizzato e utilizzarlo nel codice.

Licenza

CornerShot è rilasciato sotto la licenza Apache 2.0. Per maggiori dettagli, vedere LICENSE.

Contattaci

Siamo felici di sentirti! Per bug, patch, suggerimenti su questo pacchetto, contattaci a [email protected]

Scarica lo strumento
Sistema operativoProtocolli RPC supportatiPorte carrier aperte richiestePorte target scansionabili possibili
Windows 7EVEN,EVEN6445 / 135 & porta tcp even6445*
Windows 8EVEN,EVEN6445 / 135 & porta tcp even6445*
Windows 10EVEN,EVEN6,RPRN445 / 135 & porta tcp even6QUALSIASI
Server 2008EVEN,EVEN6,RRP,RPRN**445 / 135 & porta tcp even6445
Server 2012EVEN,EVEN6,RRP,RPRN**445 / 135 & porta tcp even6445
Server 2016EVEN,EVEN6,RRP,RPRN**445 / 135 & porta tcp even6445
Server 2019EVEN,EVEN6,RRP,RPRN**445 / 135 & porta tcp even6445