
Расширьте видимость сети с нескольких точек зрения других хостов.
В военном деле CornerShot — это оружие, позволяющее солдату заглянуть за угол (и, возможно, сделать выстрел), не подвергая себя риску. Подобным образом пакет CornerShot позволяет проверить сетевой доступ удалённого хоста без необходимости иметь какие-либо особые привилегии на этом хосте.
С помощью CornerShot источник, имеющий сетевой доступ к носителю, может определить, есть ли сетевой доступ между носителем и целью для конкретного порта p.
Например, предположим, что красная команда пытается распространиться от «скомпрометированного» хоста-источника A к целевому хосту X, к которому у хоста A нет доступа. Если они будут распространяться через хост B, то лишь тогда обнаружат, что между хостом B и X нет сетевого доступа.
Используя CornerShot, команда может выяснить, что на самом деле хост C имеет доступ к цели X, поэтому для распространения к цели X сначала нужно пройти через хост C.
+-----+ +-----+ +-----+
| | | | 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:

Подробнее читайте здесь.
Казалось бы, простая задача — определить, имеет ли хост B в сети доступ к хосту C — может потребовать массового развёртывания сетевых датчиков, агентов на устройствах или сбора множества правил брандмауэра, конфигураций маршрутизаторов и политик хостов.
CornerShot может упростить этот процесс, используя одного (или очень мало) агентов, которые могут опрашивать другие хосты в сети для определения их доступа к удалённым хостам.
Команды безопасности, использующие BloodHound для поиска и устранения путей повышения привилегий в своей сети, часто сталкиваются с миллионами логических путей, обнаруженных BloodHound.
ShotHound — это инструмент, который интегрирует CornerShot с BloodHound для обнаружения практических путей, поддерживаемых сетевым доступом.
CornerShot можно использовать как пакет или как отдельный модуль. Единственные требования — Python 3 и пакет impacket.
pip install cornershot
Для базового использования требуются учётные данные действительного доменного пользователя, полное доменное имя домена, IP-адрес носителя и целевой IP-адрес.
python -m cornershot <user> <password> <domain> <carrier> <target>
Для сканирования диапазона носителей и диапазона целей можно использовать подсети или диапазоны IP-адресов, перечисленные через запятую:
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. Пользователь может указать список портов и диапазонов портов через запятую:
python -m cornershot -tp 22,8080,45000-45005 <user> <password> <domain> <carrier> <target>
В коде необходимо создать экземпляр объекта CornerShot с именем пользователя, паролем и именем домена действительного доменного пользователя. Добавление носителей, целей и портов осуществляется через метод add_shots. Когда всё готово, можно вызвать метод open_fire, который выполняет только необходимые вызовы RPC на основе требуемых портов.
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 — это словарь, ключами которого являются носители, у каждого носителя — ещё один набор ключей для целей, и, наконец, каждая цель содержит словарь портов и их соответствующих состояний. Пример формата результата:
{'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 использует различные, хорошо задокументированные стандартные методы удалённого вызова процедур (RPC), которые применяются в различных сервисах Microsoft. Используя методы, для которых требуется только аутентифицированная учётная запись в домене, CornerShot может инициировать сетевой трафик от хоста-носителя к цели.
CornerShot определяет состояние порта удалённого хоста, измеряя время выполнения вызова RPC и используя различные коды ошибок для каждого метода RPC.
Возможно, читатель знаком с "printer bug", обнаруженным Lee Christensen. Хотя это называют ошибкой, это хорошо задокументированное поведение службы печати, которое позволяет любому аутентифицированному пользователю принудить удалённый сервер к аутентификации на любой машине с помощью метода RpcRemoteFindFirstPrinterChangeNotificationEx.
CornerShot использует следующие методы RPC из нескольких протоколов Microsoft (существует множество дополнительных методов, которые будут реализованы в будущих версиях):
Реализация самих протоколов осуществляется с помощью замечательного пакета impacket.
Этот метод принимает параметр printerName. Имя принтера может быть путём к локальному файлу, удалённому файлу или даже к веб-принтеру. Указав имя, соответствующее формату WEB_PRINT_SERVER, можно опросить любой удалённый порт. Пример имени веб-принтера, которое инициирует HTTP-трафик к удалённому хосту и порту: "http://<target_ip>:<target_port>/printers/ppp/.printer".