Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/zeronetworks/cornershot
ReconocimientoAnálisis de VulnerabilidadesRecopilación de InformaciónSeguridad de RedesPruebas de Penetración
GitHubzeronetworks/cornershot

cornershot

Ampliar la visibilidad de la red desde múltiples puntos de vista de otros hosts

Ver Repositorio
31149hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
cornershot — Ampliar la visibilidad de la red desde múltiples puntos de vista de otros hosts | Kitploit

GitHub release (latest SemVer) GitHub all releases

¿Qué es CornerShot?

En la guerra, CornerShot es un arma que permite a un soldado mirar más allá de una esquina (y posiblemente disparar) sin arriesgarse a ser expuesto. De manera similar, el paquete CornerShot permite observar el acceso de red de un host remoto sin necesidad de tener privilegios especiales en ese host.

Usando CornerShot, una fuente, con acceso de red a carrier, puede determinar si existe acceso de red entre el carrier y el target para un puerto específico p.

Por ejemplo, supongamos que un equipo rojo intenta propagarse desde un host fuente A "comprometido" a un host destino X, al cual el host A no tiene acceso. Si se propagan a través del host B, solo entonces descubrirán que no hay acceso de red entre el host B y X.

Usando CornerShot, el equipo puede descubrir que el host C realmente tiene acceso al destino X, por lo que la propagación hacia el destino X debe pasar primero por el host C.

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


De manera similar a nmap, CornerShot diferencia entre los siguientes estados de puertos: open, closed, filtered y unknown (si no se puede determinar).

La siguiente demostración muestra la ejecución de CornerShot contra dos hosts carriers 172.0.1.12 y 172.0.1.13, para determinar si tienen acceso de red a 192.168.200.1:

cornershot demo

Lea más aquí.

Casos de Uso

Despliegue Único para Visibilidad Completa de la Red

La tarea aparentemente simple de identificar si algún host B en la red tiene acceso al host C puede requerir un gran despliegue de sensores de red, agentes de dispositivos o la recopilación de una multitud de reglas de firewall, configuraciones de enrutadores y políticas de host.

CornerShot puede simplificar este proceso usando uno (o muy pocos) agentes que puedan consultar a otros hosts en la red para determinar su acceso a hosts remotos.

Validar Rutas de BloodHound

Los equipos de seguridad que utilizan BloodHound para encontrar y mitigar rutas de escalada de privilegios dentro de su red a menudo luchan con millones de rutas lógicas descubiertas por BloodHound.

ShotHound es una herramienta que integra CornerShot con BloodHound para descubrir rutas prácticas respaldadas por acceso de red.

Primeros Pasos

CornerShot se puede usar como un paquete o como un módulo independiente. Los únicos requisitos son Python 3 y el paquete impacket.

Instalación

root@kitploit:~
pip install cornershot

Uso Independiente

El uso básico requiere credenciales de un usuario de dominio válido, un nombre de dominio FQDN, una IP de carrier y una IP de destino.

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

Para escanear un rango de carriers contra un rango de destinos, se pueden usar subredes o rangos de IP en una lista delimitada por comas:

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 defecto, CornerShot intentará escanear los siguientes puertos: 135, 445, 3389, 5985, 5986. El usuario puede proporcionar una lista delimitada por comas de puertos y rangos de puertos:

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

Como Paquete

Dentro del código, es necesario instanciar un objeto CornerShot con el nombre de usuario, contraseña y nombre de dominio de un usuario de dominio válido. Agregar carriers, destinos y puertos se logra mediante el método add_shots. Una vez listo, se puede llamar al método open_fire, que realiza solo las llamadas RPC relevantes según los puertos requeridos.

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

El resultado de open_fire es un diccionario con claves de carriers, cada carrier tiene otro conjunto de claves para destinos y, finalmente, cada destino contiene un diccionario de puertos y sus respectivos estados. Este es un formato de ejemplo de un 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'}
	}
}

¿Cómo Funciona CornerShot?

CornerShot se basa en varios métodos de Llamada a Procedimiento Remoto (RPC) estándar y bien documentados utilizados por varios servicios de Microsoft. Al usar métodos que solo requieren una cuenta autenticada en el dominio, CornerShot puede desencadenar tráfico de red desde un host carrier hacia un destino.

CornerShot puede determinar el estado del puerto remoto midiendo el tiempo que tomó una llamada RPC y utilizando diferentes códigos de error para cada método RPC.

Métodos RPC

El lector puede estar familiarizado con el "printer bug", que fue descubierto por Lee Christensen. Aunque se le llama error, es un comportamiento bien documentado del servicio de impresión, que permite a cualquier usuario autenticado coaccionar a un servidor remoto para que se autentique en cualquier máquina usando el método RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot utiliza los siguientes métodos RPC de varios protocolos de Microsoft (hay muchos métodos adicionales que se implementarán en versiones futuras):

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

La implementación de los protocolos en sí se logra mediante el magnífico paquete impacket.

RpcOpenPrinter

Este método recibe un printerName como parámetro. El nombre printerName puede ser una ruta a un archivo local, un archivo remoto o incluso a una impresora web. Al proporcionar un nombre que cumple con el formato WEB_PRINT_SERVER, es posible consultar cualquier puerto remoto. Un ejemplo de un nombre de servidor de impresión web que desencadenará tráfico HTTP a un host y puerto remotos es: "http://<target_ip>:<target_port>/printers/ppp/.printer".

BaseRegSaveKey

Para utilizar este método, se necesita un enfoque de dos pasos: primero, abrir una clave de registro en el host remoto, lo que resulta en un identificador válido, y segundo, intentar guardar una copia de seguridad de este identificador en un archivo remoto. El método BaseRegSaveKey recibe una ruta de archivo a la que puede guardar una copia de seguridad de un registro, lo que desencadena tráfico SMB a través del puerto 445 (y 135 como respaldo) hacia un destino. La clave de registro que CornerShot abre es HKEY_CURRENT_USER, que está abierta para lectura de forma predeterminada en la mayoría de los hosts cliente.

ElfrOpenBELW

Esta función intenta hacer una copia de seguridad de eventos de Windows en una ruta de archivo, que puede ser remota; en tal caso, el servicio intentará acceder al host y ruta remotos.

EvtRpcOpenLogHandle

Similar al método EVEN, solo que este método utiliza una versión diferente del protocolo de Eventos de Windows, que se realiza directamente sobre TCP; no es necesario que el puerto SMB esté abierto.

Determinando el Estado del Puerto

CornerShot estima el estado de los puertos remotos basándose en factores de tiempo y mensajes de error recibidos por el método RPC o el transporte subyacente. Al experimentar con diferentes hosts Windows y varios protocolos RPC, llegamos a 3 umbrales de tiempo diferentes que funcionan en la mayoría de los entornos de red. Estos umbrales se ilustran mejor con la siguiente figura:

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

El umbral mínimo (MIN) es de 0.5 segundos; las respuestas por debajo de este umbral indican un error en el método RPC subyacente o en el transporte subyacente, o podría haberse recibido una respuesta del host de destino.

Las respuestas por debajo del umbral FILTERED de 20 segundos podrían indicar un puerto abierto o cerrado, dependiendo del tipo de mensaje de error recibido para el método.

Las respuestas entre el umbral FILTERED y el umbral superior (UPPER) de 40 segundos indican un puerto filtrado para todos los métodos probados (hasta ahora...). Y las solicitudes que toman más del límite UPPER indican una conexión TCP abierta prolongada.

Soporte de Sistemas Operativos

Ejecutar CornerShot contra diferentes versiones de sistemas operativos y configuraciones dará resultados diferentes. No todas las versiones de Windows tienen las mismas named pipes ni se comportan igual cuando se les consulta con el mismo método RPC. La mayoría de los Windows OOTB no expondrán SMB y otros servicios RPC a través de la red; sin embargo, la experiencia ha demostrado que en entornos grandes estos puertos tienden a estar abiertos y accesibles para la mayoría de los activos.

La siguiente tabla muestra el soporte predeterminado para varios protocolos RPC, siempre que los puertos apropiados sean accesibles para el host carrier y no se hayan realizado cambios de configuración en el host:

* Si el servicio Webclient se está ejecutando en una máquina cliente, se pueden escanear puertos adicionales. Actualmente CornerShot no soporta esta opción.

** El protocolo RPRN es compatible en hosts servidor, sin embargo, abrir una impresora web remota no funciona (razón por la cual no podemos escanear CUALQUIER puerto de destino) hasta que encontremos una solución 😉

Desarrolladores

¡Se agradecen disparos RPC adicionales o cualquier otra contribución!

Todos los métodos RPC se implementan bajo /shots y heredan de una clase abstracta llamada BaseRPCShot. La carpeta /example muestra cómo crear un disparo RPC personalizado y usarlo en código.

Licencia

CornerShot se publica bajo la licencia Apache 2.0. Para más detalles, consulte LICENSE.

Contáctenos

¡Estamos encantados de saber de usted! Para errores, parches, sugerencias sobre este paquete, contáctenos en [email protected].

Descargar herramienta
OSSupported RPC ProtocolsRequired Open Carrier PortsPossible Target Ports to Scan
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