RPC에서 WebClient로
이 코드에 대한 정보는 이 블로그 게시물에서 확인할 수 있습니다. 여기에 있는 무엇이든 사용하기 전에 읽어보시기를 권장합니다.
RPC 호출을 통해 WebClient를 트리거하는 코드입니다. 결국 기대한 대로 동작하지 않았기 때문에 코드가 실제로 정리되지는 않았으며, 매우 개념 증명(proof of concept) 상태에 머물러 있습니다.
이러한 RPC 호출은 서비스를 시작하는 코드 경로에 도달할 수 있습니다:
- EfsRpcDuplicateEncryptionInfoFile_Downlevel -> EfsDuplicateEncryptionInfoRPCClient -> EfsDuplicateEncryptionInfoClient -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcEncryptFileSrv_Downlevel -> EfsEncryptFileClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcDecryptFileSrv_Downlevel -> EfsDecryptFileClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcAddUsersToFileEx_Downlevel -> EfsAddUsersClientEx -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcRemoveUsersFromFile_Downlevel -> EfsRemoveUsersClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcQueryRecoveryAgents_Downlevel -> EfsQueryRecoveryAgentsClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcQueryUsersOnFile_Downlevel -> EfsQueryUsersClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
- EfsRpcFileKeyInfo_Downlevel -> EfsFileKeyInfoClient -> LocateAndConnectToService -> EfspGetFullName -> EfspAttemptToGetWebDavPath -> WNetGetResourceInformaton
리포지토리에는 EfsRpcEncryptFileSrv_Downlevel만 존재하며, 나머지는 향후 추가될 수 있습니다.
WnfToWebClient는 WNF 메시지를 사용하여 WebClient 서비스를 시작하는 .NET 코드입니다. NT AUTHORITY/SYSTEM 권한이 필요하므로 이 역시 단지 개념 증명에 불과합니다.
RPC 호출과 WNF 메시지는 ETW 이벤트 소비자(UBPM)와 WNF 상태 이름의 보안 설명자(security descriptor) 때문에 (현재로서는) 실제로 무기화할 수 없습니다.