• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Подключение к Com на удалённой машине

  • Автор темы Автор темы jashilko
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
J

jashilko

Теперь у меня вторая проблема:

Имеется сервер автоматизации в виде exe, имеются несколько клиентов которые к нему подключаются и должны получать события. То есть один клиент по нажатию кнопки событие генерирует, и все! клиенты его получают.

Всё работает на локальной машине, как только я пытаюсь запустить клиента на локальной машине, он создаёт всё равно свой сервер, никак не связанный с тем, к которому подключены локальные клиенты.

У клиентов есть функция подключения GetActiveObject, если объект получили, то всё здорово, если нет - создаём. Если клиент удалён, используем функцию CreateRemoteComObject но она именно создаёт новый, она не подключается к уже существующему.

Почему так и в чём решение?

Подключение клиента:

Код:
 GetActiveObject(CLASS_autom, nil, ActiveObj);

if ActiveObj <> nil then
AutoTest := ActiveObj as Iautom
else
AutoTest := Coautom.Create;
EventSink := TEvent.Create as IEventSink;
Container := AutoTest as IConnectionPointContainer;
OleCheck(Container.FindConnectionPoint(IEventSink, ConnectionPoint));
OleCheck(ConnectionPoint.Advise(EventSink, Cookie));



инициализация сервера:

Код:
 inherited Initialize;
FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoints.CreateConnectionPoint(AutoFactory.EventIID,
ckMulti, EventConnect);
RegisterActiveObject(Self as IUnknown, CLASS_autom,
ACTIVEOBJECT_WEAK, FObjRegHandle);
 
При работе с COM не забывайте еще про конфигурирование (dcomcnfg).

Ну и Ваша фраза:
Всё работает на локальной машине, как только я пытаюсь запустить клиента на локальной машине, он создаёт всё равно свой сервер, никак не связанный с тем, к которому подключены локальные клиенты.
несовсем понятна
 
При подключении к COM-объекту на удаленном ПК (т.е. получается DCOM), нужно использовать DComCnfg и особое внимание уделить тому от какого имени (учетной записи) производится запуск программ и получение доступа к COM-объекту. Лучше всего если сеть будет доменная, и там произвести настройку запуска и доступа на определенную учетную запись. Полезно будет посмотреть и журналы событий windows при попытках доступа к COM.
 
Помимо самих настроек DCOM, нужно еще и не забывать какую модель для экземпляра вы испльзуете...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD