[翻译]Windows进程注入: 破坏BaDDEr
原文:https://modexp.wordpress.com/2019/08/09/windows-process-injection-breaking-badder/
引言
动态数据交换(Dynamic Data Exchange)是个数据共享协议,动态数据交换管理库(Dynamic Data Exchange Management Library)使应用程序能够通过DDE协议更方便地共享数据。2017年10月一个微软Office任意代码执行漏洞被发现后,DDE随即上了头条。从那以后,它就被默认关闭了,也就被大家认为是一个不重要的组件。本注入方法只局限于explorer.exe,当然如果你知道其它使用该协议的应用程序就另当别论了。我要感谢Adam关于使用DDE进行注入的讨论。
枚举DDE服务
Windows 10里使用DDE的DLL有shell32.dll, ieframe.dll和twain_32.dll。shell32.dll在explorer.exe中创建了三个DDE服务。下面的代码使用DDEML API列出所有服务及服务所属的进程。
VOID dde_list(VOID) {
CONVCONTEXT cc;
HCONVLIST cl;
DWORD idInst = 0;
HCONV c = NULL;
CONVINFO ci;
WCHAR server[MAX_PATH];
if(DMLERR_NO_ERROR != DdeInitialize(&idInst, NULL, APPCLASS_STANDARD, 0)) {
printf("unable to initialize : %i.\n", GetLastError());
return;
}
ZeroMemory(&cc, sizeof(cc));
cc.cb = sizeof(cc);
cl = DdeConnectList(idInst, 0, 0, 0, &cc);
if(cl != NULL) {
for(;;) {
c = DdeQueryNextServer(cl, c);
if(c == NULL) break;
ci.cb = sizeof(ci);
DdeQueryConvInfo(c, QID_SYNC, &ci);
DdeQueryString(idInst, ci.hszSvcPartner, server, MAX_PATH, CP_WINUNICODE);
printf("Service : %-10ws Process : %ws\n",
server, wnd2proc(ci.hwndPartner));
}
DdeDisconnectList(cl);
} else {
printf("DdeConnectList : %x\n", DdeGetLastError(idInst));
}
DdeUninitialize(idInst);
}
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
