Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cornershot — Amplie a visibilidade da rede a partir de múltiplos pontos de vista de outros hosts. | Kitploit
Ferramentas/GitHubGitHub/zeronetworks/cornershot
ReconhecimentoAnálise de VulnerabilidadesColeta de InformaçõesSegurança de RedeTestes de Penetração
GitHubzeronetworks/cornershot

cornershot

Amplie a visibilidade da rede a partir de múltiplos pontos de vista de outros hosts.

Ver Repositório
31149há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

GitHub release (latest SemVer) GitHub all releases

O que é CornerShot

Na guerra, CornerShot é uma arma que permite a um soldado olhar além de uma esquina (e talvez atirar) sem se expor ao risco. Da mesma forma, o pacote CornerShot permite que se olhe para o acesso de rede de um host remoto sem a necessidade de ter privilégios especiais nesse host.

Usando CornerShot, uma origem, com acesso de rede ao portador, pode determinar se existe acesso de rede entre o portador e o alvo para uma porta específica p.

Por exemplo, vamos supor que uma equipe vermelha está tentando se propagar de um host de origem A "comprometido" para um host alvo X, para o qual o host A não tem acesso. Se eles se propagarem pelo host B, só então descobrirão que não há acesso de rede entre o host B e X.

Usando CornerShot, a equipe pode descobrir que o host C na verdade tem acesso ao alvo X, então a propagação em direção ao alvo X deve passar pelo host C primeiro.

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


De forma semelhante ao nmap, CornerShot diferencia entre os seguintes estados de portas: aberto, fechado, filtrado e desconhecido (se não for possível determinar).

A demonstração a seguir mostra a execução do CornerShot contra dois hosts portadores 172.0.1.12 e 172.0.1.13, para determinar se eles têm acesso de rede a 192.168.200.1:

cornershot demo

Leia mais aqui.

Casos de Uso

Implantação Única para Visibilidade Completa de Rede

A tarefa aparentemente simples de identificar se algum host B na rede tem acesso ao host C pode exigir uma grande implantação de sensores de rede, agentes de dispositivos ou coleta de uma infinidade de regras de firewall, configurações de roteador e políticas de host.

CornerShot pode simplificar esse processo usando um (ou muito poucos) agentes que podem consultar outros hosts na rede, para determinar seu acesso a hosts remotos.

Validar Caminhos do BloodHound

Equipes de segurança que utilizam BloodHound para encontrar e mitigar caminhos de escalada de privilégios dentro de sua rede, muitas vezes enfrentam milhões de caminhos lógicos descobertos pelo BloodHound.

ShotHound é uma ferramenta que integra CornerShot com BloodHound, a fim de descobrir caminhos práticos que são suportados pelo acesso de rede.

Primeiros Passos

CornerShot pode ser usado como um pacote ou como um módulo independente. Os únicos requisitos são Python 3 e o pacote impacket.

Instalação

root@kitploit:~
pip install cornershot

Uso Independente

O uso básico requer credenciais de um usuário de domínio válido, um domínio FQDN, um IP do portador e um IP do alvo.

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

Para escanear uma faixa de portadores contra uma faixa de alvos, sub-redes ou faixas de IP podem ser usadas em uma lista delimitada por vírgulas:

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

Por padrão, CornerShot tentará escanear as seguintes portas: 135, 445, 3389, 5985, 5986. O usuário pode fornecer uma lista delimitada por vírgulas de portas e faixas de portas:

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

Como um Pacote

No código, é necessário instanciar um objeto CornerShot com o nome de usuário, senha e nome de domínio de um usuário de domínio válido. Adicionar portadores, alvo e portas é feito através do método add_shots. Uma vez pronto, o método open_fire pode ser chamado, que realiza apenas as chamadas RPC relevantes com base nas portas necessárias.

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

O resultado de open_fire é um dicionário com chaves de portadores, cada portador tem outro conjunto de chaves para alvos, e finalmente, cada alvo contém um dicionário de portas e seus respectivos estados. Este é um formato de exemplo de resultado:

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

Como CornerShot Funciona?

CornerShot se baseia em vários métodos padrão de Chamada de Procedimento Remoto (RPC) bem documentados, que são usados por vários serviços Microsoft. Ao usar métodos que exigem apenas uma conta autenticada no domínio, CornerShot é capaz de gerar tráfego de rede de um host portador para um alvo.

CornerShot é capaz de determinar o estado da porta remota medindo o tempo que uma chamada RPC levou e usando diferentes códigos de erro para cada método RPC.

Métodos RPC

O leitor pode estar familiarizado com o "printer bug", que foi descoberto por Lee Christensen. Embora seja chamado de bug, é um comportamento bem documentado do serviço de impressão, que permite a qualquer usuário autenticado coagir um servidor remoto a se autenticar em qualquer máquina, usando o método RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot utiliza os seguintes métodos RPC de vários protocolos Microsoft (há muitos métodos adicionais, que serão implementados em versões futuras):

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

A implementação dos protocolos em si é alcançada através do maravilhoso pacote impacket.

RpcOpenPrinter

Este método recebe um printerName como parâmetro. O nome printerName pode ser um caminho para um arquivo local, um arquivo remoto ou até mesmo para uma impressora web. Ao fornecer um nome que esteja em conformidade com o formato WEB_PRINT_SERVER, é possível consultar qualquer porta remota. Um exemplo de nome de servidor de impressão web que irá gerar tráfego HTTP para um host e porta remotos é: "http://<target_ip>:<target_port>/printers/ppp/.printer".

BaseRegSaveKey

Para utilizar este método, precisamos de uma abordagem em duas etapas: primeiro, abrir uma chave de registro no host remoto - o que resulta em um handle válido, e segundo, tentar salvar um backup deste handle em um arquivo remoto. O método BaseRegSaveKey recebe um caminho de arquivo para o qual pode salvar um backup de um registro, o que gera tráfego SMB na porta 445 (e 135 como backup) para um alvo. A chave de registro que CornerShot abre é a HKEY_CURRENT_USER, que está aberta para leitura por padrão na maioria dos hosts clientes.

ElfrOpenBELW

Esta função tenta fazer backup de eventos do Windows em um caminho de arquivo, que pode ser remoto - nesse caso, o serviço tentará acessar o host e caminho remotos.

EvtRpcOpenLogHandle

Semelhante ao método EVEN, apenas este método utiliza uma versão diferente do protocolo de Eventos do Windows, que é feito diretamente sobre TCP - não há necessidade da porta SMB estar aberta.

Determinando o Estado da Porta

CornerShot estima o estado das portas remotas com base em fatores de tempo e mensagens de erro recebidas pelo método RPC ou transporte subjacente. Ao experimentar com diferentes hosts Windows e vários protocolos RPC, chegamos a 3 limites de tempo diferentes que provam funcionar na maioria dos ambientes de rede. Esses limites são melhor ilustrados com a seguinte figura:

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

O limite MIN é de 0,5 segundos, respostas abaixo deste limite significam um erro no método RPC subjacente ou no transporte subjacente, ou uma resposta pode ter sido recebida do host alvo.

Respostas abaixo do limite FILTERED de 20 segundos podem indicar uma porta aberta ou fechada, dependendo do tipo de mensagem de erro recebida para o método.

Respostas entre o limite FILTERED e UPPER de 40 segundos indicam uma porta filtrada para todos os métodos testados (até agora...). E solicitações que levam mais tempo que o limite UPPER indicam uma conexão TCP aberta prolongada.

Suporte a SO

Executar o CornerShot contra diferentes versões e configurações de SO produzirá resultados diferentes. Nem todas as versões do Windows têm os mesmos named pipes ou se comportam da mesma forma quando consultadas com o mesmo método RPC. A maioria dos Windows de fábrica não expõe SMB e outros serviços RPC pela rede, no entanto, a experiência mostrou que em grandes ambientes essas portas tendem a estar abertas e acessíveis para a maioria dos ativos.

A tabela a seguir mostra o suporte padrão para vários protocolos RPC, desde que as portas apropriadas estejam acessíveis ao host portador e nenhuma alteração de configuração tenha sido feita no host:

* Se o serviço Webclient estiver em execução em uma máquina cliente, portas adicionais podem ser escaneadas. Atualmente o CornerShot não suporta esta opção.

** O protocolo RPRN é suportado em servidores, no entanto, abrir uma impressora web remota não funciona (por isso não podemos escanear QUALQUER porta alvo) - até encontrarmos uma solução alternativa 😉

Desenvolvedores

Shots RPC adicionais, ou qualquer outra contribuição são bem-vindos!

Todos os métodos RPC são implementados em /shots, e herdam de uma classe abstrata chamada BaseRPCShot. A pasta /example mostra como criar um shot RPC personalizado e usá-lo no código.

Licença

CornerShot é lançado sob a licença Apache 2.0. Para mais detalhes veja LICENSE.

Fale Conosco

Ficaremos felizes em ouvir de você! Para bugs, correções, sugestões sobre este pacote, entre em contato conosco em [email protected]

Baixar ferramenta
SOProtocolos RPC SuportadosPortas do Portador Abertas NecessáriasPossíveis Portas do Alvo para Escanear
Windows 7EVEN,EVEN6445 / 135 & even6 tcp port445*
Windows 8EVEN,EVEN6445 / 135 & even6 tcp port445*
Windows 10EVEN,EVEN6,RPRN445 / 135 & even6 tcp portANY
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