Понимание smb и DCERPC для удаленного выполнения команд

Я пытаюсь понять все методы, доступные для выполнения удаленных команд в Windows через сценарии Impacket:

https://www.coresecurity.com/corelabs-research/open-source-tools/impacket

https://github.com/CoreSecurity/impacket

Я понимаю объяснение высокого уровня psexec.py и smbexec.py, как они создают сервис на удаленном конце и запускают команды через cmd.exe -c но я не могу понять, как вы можете создать службу на удаленном хосте Windows через SMB. Разве smb не предназначался в основном для передачи файлов и общего доступа к принтерам? Читая исходный код, который я вижу в примечаниях, что они используют DCERPC для создания этих сервисов, это часть протокола smb? Все ресурсы DCERPC, которые я нашел, были довольно запутанными и не были сосредоточены на возможностях создания сервисов. Глядя на исходный код atexec.py, он говорит, что он взаимодействует со службой планировщика задач хоста Windows, также через DCERPC. Можно ли использовать его для взаимодействия со всеми службами, запущенными на удаленном компьютере?

Спасибо!

1 ответ

Решение

DCERPC ( https://en.wikipedia.org/wiki/DCE/RPC): исходный протокол, который использовался в качестве шаблона для MSRPC ( https://en.wikipedia.org/wiki/Microsoft_RPC).

MSRPC - это способ выполнения функций на удаленном конце и передачи данных (параметров этих функций). Это не способ напрямую выполнять команды удаленной ОС на удаленной стороне.

SMB ( https://en.wikipedia.org/wiki/Server_Message_Block) - это протокол обмена файлами, используемый в основном для доступа к файлам на файловых серверах Windows. Кроме того, он предоставляет именованные каналы ( https://msdn.microsoft.com/en-us/library/cc239733.aspx), способ передачи данных между локальным процессом и удаленным процессом.

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

На самом деле MSRPC является одним из наиболее важных, но очень малоизвестных протоколов в мире Windows.

Ни MSRPC, ни SMB не имеют никакого отношения к удаленному выполнению команд оболочки.

Один из распространенных способов выполнения удаленных команд:

  • Копирование файлов (через SMB) на удаленную сторону (служба Windows EXE)
  • Создайте записи реестра на удаленной стороне (чтобы скопированная служба Windows была установлена ​​и запускалась)
  • Запустите службу Windows. Запущенная служба Windows может использовать любой сетевой протокол (например, MSRPC) для получения команд и их выполнения.
  • После завершения работы службу Windows можно удалить (удалить записи реестра и удалить файлы).

Фактически, это то, что делает PSEXEC.

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

Да, это просто протокол удаленного вызова процедур. Но его можно использовать для запуска процедуры на удаленной стороне, которая может делать что угодно, например, создавать сервис.

Глядя на исходный код atexec.py, он говорит, что он взаимодействует со службой планировщика задач хоста Windows, также через DCERPC. Можно ли использовать его для взаимодействия со всеми службами, запущенными на удаленном компьютере?

Есть некоторые команды MSRPC, которые обрабатывают планировщик задач, и другие, которые обрабатывают общие команды запуска и остановки службы.

Несколько заключительных слов в конце:

SMB / CIFS и протоколы вокруг них действительно сложны и трудны для понимания. Кажется нормальным пытаться понять, как бороться, например, с удаленным управлением сервисом, но это может быть очень долгий путь

Возможно, эта страница (которая использует Java для управления службами Windows) также может помочь в понимании.

https://dev.c-ware.de/confluence/pages/viewpage.action?pageId=15007754

Другие вопросы по тегам