
Amplie a visibilidade da rede a partir de múltiplos pontos de vista de outros hosts.
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.
+-----+ +-----+ +-----+
| | | | 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:

Leia mais aqui.
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.
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.
CornerShot pode ser usado como um pacote ou como um módulo independente. Os únicos requisitos são Python 3 e o pacote impacket.
pip install cornershot
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.
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:
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:
python -m cornershot -tp 22,8080,45000-45005 <user> <password> <domain> <carrier> <target>
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.
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:
{'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 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.