Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cornershot — Расширьте видимость сети с нескольких точек зрения других хостов. | Kitploit
Инструменты/GitHubGitHub/zeronetworks/cornershot
РазведкаАнализ уязвимостейСбор информацииСетевая безопасностьТестирование на Проникновение
GitHubzeronetworks/cornershot

cornershot

Расширьте видимость сети с нескольких точек зрения других хостов.

Репозиторий
311492 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

GitHub release (latest SemVer) GitHub all releases

Что такое CornerShot

В военном деле CornerShot — это оружие, позволяющее солдату заглянуть за угол (и, возможно, сделать выстрел), не подвергая себя риску. Подобным образом пакет CornerShot позволяет проверить сетевой доступ удалённого хоста без необходимости иметь какие-либо особые привилегии на этом хосте.

С помощью CornerShot источник, имеющий сетевой доступ к носителю, может определить, есть ли сетевой доступ между носителем и целью для конкретного порта p.

Например, предположим, что красная команда пытается распространиться от «скомпрометированного» хоста-источника A к целевому хосту X, к которому у хоста A нет доступа. Если они будут распространяться через хост B, то лишь тогда обнаружат, что между хостом B и X нет сетевого доступа.

Используя CornerShot, команда может выяснить, что на самом деле хост C имеет доступ к цели X, поэтому для распространения к цели X сначала нужно пройти через хост C.

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

Как и nmap, CornerShot различает следующие состояния портов: open, closed, filtered и unknown (если определить не удаётся).

На следующей демонстрации показан запуск CornerShot против двух хостов-носителей 172.0.1.12 и 172.0.1.13 для определения, имеют ли они сетевой доступ к 192.168.200.1:

демонстрация cornershot

Подробнее читайте здесь.

Варианты использования

Единое развёртывание для полной видимости сети

Казалось бы, простая задача — определить, имеет ли хост B в сети доступ к хосту C — может потребовать массового развёртывания сетевых датчиков, агентов на устройствах или сбора множества правил брандмауэра, конфигураций маршрутизаторов и политик хостов.

CornerShot может упростить этот процесс, используя одного (или очень мало) агентов, которые могут опрашивать другие хосты в сети для определения их доступа к удалённым хостам.

Проверка путей BloodHound

Команды безопасности, использующие BloodHound для поиска и устранения путей повышения привилегий в своей сети, часто сталкиваются с миллионами логических путей, обнаруженных BloodHound.

ShotHound — это инструмент, который интегрирует CornerShot с BloodHound для обнаружения практических путей, поддерживаемых сетевым доступом.

Начало работы

CornerShot можно использовать как пакет или как отдельный модуль. Единственные требования — Python 3 и пакет impacket.

Установка

root@kitploit:~
pip install cornershot

Использование в качестве отдельного модуля

Для базового использования требуются учётные данные действительного доменного пользователя, полное доменное имя домена, IP-адрес носителя и целевой IP-адрес.

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

Для сканирования диапазона носителей и диапазона целей можно использовать подсети или диапазоны IP-адресов, перечисленные через запятую:

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

По умолчанию CornerShot пытается сканировать следующие порты: 135, 445, 3389, 5985, 5986. Пользователь может указать список портов и диапазонов портов через запятую:

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

Как пакет

В коде необходимо создать экземпляр объекта CornerShot с именем пользователя, паролем и именем домена действительного доменного пользователя. Добавление носителей, целей и портов осуществляется через метод add_shots. Когда всё готово, можно вызвать метод open_fire, который выполняет только необходимые вызовы RPC на основе требуемых портов.

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

Результат open_fire — это словарь, ключами которого являются носители, у каждого носителя — ещё один набор ключей для целей, и, наконец, каждая цель содержит словарь портов и их соответствующих состояний. Пример формата результата:

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

Как работает CornerShot?

CornerShot использует различные, хорошо задокументированные стандартные методы удалённого вызова процедур (RPC), которые применяются в различных сервисах Microsoft. Используя методы, для которых требуется только аутентифицированная учётная запись в домене, CornerShot может инициировать сетевой трафик от хоста-носителя к цели.

CornerShot определяет состояние порта удалённого хоста, измеряя время выполнения вызова RPC и используя различные коды ошибок для каждого метода RPC.

Методы RPC

Возможно, читатель знаком с "printer bug", обнаруженным Lee Christensen. Хотя это называют ошибкой, это хорошо задокументированное поведение службы печати, которое позволяет любому аутентифицированному пользователю принудить удалённый сервер к аутентификации на любой машине с помощью метода RpcRemoteFindFirstPrinterChangeNotificationEx.

CornerShot использует следующие методы RPC из нескольких протоколов Microsoft (существует множество дополнительных методов, которые будут реализованы в будущих версиях):

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

Реализация самих протоколов осуществляется с помощью замечательного пакета impacket.

RpcOpenPrinter

Этот метод принимает параметр printerName. Имя принтера может быть путём к локальному файлу, удалённому файлу или даже к веб-принтеру. Указав имя, соответствующее формату WEB_PRINT_SERVER, можно опросить любой удалённый порт. Пример имени веб-принтера, которое инициирует HTTP-трафик к удалённому хосту и порту: "http://<target_ip>:<target_port>/printers/ppp/.printer".

BaseRegSaveKey

Для использования этого метода требуется два шага: сначала открыть ключ реестра на удалённом хосте — это даёт действительный дескриптор, а затем попытаться сохранить резервную копию этого дескриптора в удалённый файл. Метод BaseRegSaveKey принимает путь к файлу, в который можно сохранить резервную копию реестра, что инициирует SMB-трафик через порт 445 (и 135 как резервный) к цели. Ключ реестра, который открывает CornerShot, — это HKEY_CURRENT_USER, который по умолчанию открыт для чтения на большинстве клиентских хостов.

ElfrOpenBELW

Эта функция пытается создать резервную копию событий Windows в файл, который может быть удалённым — в таком случае служба попытается обратиться к удалённому хосту и пути.

EvtRpcOpenLogHandle

Аналогично методу EVEN, только этот метод использует другую версию протокола событий Windows, которая работает напрямую через TCP — нет необходимости в открытом порту SMB.

Определение состояния порта

CornerShot оценивает состояние удалённых портов на основе временных факторов и сообщений об ошибках, полученных от метода RPC или нижележащего транспорта. Путём экспериментов с различными хостами Windows и разными протоколами RPC мы вывели три различных временных порога, которые оказываются эффективными в большинстве сетевых сред. Эти пороги лучше всего проиллюстрировать на следующем рисунке:

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

Порог MIN составляет 0,5 секунды. Ответы ниже этого порога либо означают ошибку в нижележащем методе RPC или транспорте, либо ответ мог быть получен от целевого хоста.

Ответы ниже порога FILTERED (20 секунд) могут указывать как на открытый, так и на закрытый порт, в зависимости от типа сообщения об ошибке, полученного для данного метода.

Ответы между порогами FILTERED и UPPER (40 секунд) указывают на фильтрованный порт для всех протестированных методов (пока что...). А запросы, занимающие больше времени, чем верхний предел, указывают на продолжительное открытое TCP-соединение.

Поддержка ОС

Выполнение CornerShot против разных версий и конфигураций ОС даст разные результаты. Не все версии Windows имеют одинаковые именованные каналы или ведут себя одинаково при запросе одним и тем же методом RPC. Большинство Windows «из коробки» не будут открывать SMB и другие службы RPC по сети, однако опыт показывает, что в крупных средах эти порты часто открыты и доступны для большинства активов.

В следующей таблице показана поддержка различных протоколов RPC по умолчанию при условии, что соответствующие порты доступны хосту-носителю и в конфигурацию хоста не вносились изменения:

* Если на клиентской машине запущена служба Webclient, можно сканировать дополнительные порты. В настоящее время CornerShot не поддерживает эту возможность.

** Протокол RPRN поддерживается на серверных хостах, однако открытие удалённого веб-принтера не работает (поэтому мы не можем сканировать ЛЮБОЙ целевой порт) — до тех пор, пока мы не найдём обходной путь 😉

Разработчикам

Дополнительные RPC-«выстрелы» или любой другой вклад приветствуются!

Все методы RPC реализованы в папке /shots и наследуются от абстрактного класса BaseRPCShot. В папке /example показано, как создать собственный RPC-выстрел и использовать его в коде.

Лицензия

CornerShot выпущен под лицензией Apache 2.0. Подробнее см. LICENSE.

Свяжитесь с нами

Мы будем рады услышать вас! По поводу ошибок, патчей, предложений по этому пакету пишите нам на [email protected].

Скачать инструмент
ОСПоддерживаемые протоколы RPCТребуемые открытые порты носителяВозможные порты цели для сканирования
Windows 7EVEN,EVEN6445 / 135 и TCP-порт even6445*
Windows 8EVEN,EVEN6445 / 135 и TCP-порт even6445*
Windows 10EVEN,EVEN6,RPRN445 / 135 и TCP-порт even6ЛЮБОЙ
Server 2008EVEN,EVEN6,RRP,RPRN**445 / 135 и TCP-порт even6445
Server 2012EVEN,EVEN6,RRP,RPRN**445 / 135 и TCP-порт even6445
Server 2016EVEN,EVEN6,RRP,RPRN**445 / 135 и TCP-порт even6445
Server 2019EVEN,EVEN6,RRP,RPRN**445 / 135 и TCP-порт even6445