Conhost注入

简介

在Windows7和之后的版本中,Microsoft引入了conhost.exe来处理控制台窗口的渲染。比如当你在powershell中运行CS木马,Windows会自动启动一个conhost.exe进程来处理这个powershell.exe,这两个进程之间存在某种关联,即conhost.exe的父进程就是powershell.exe

image-20230919103532681

此技术的核心是利用conhost.exe的虚拟函数表(vftable)来实现进程注入。vftable是一个函数指针数组,用于支持C++的虚拟函数。通过修改vftable中的某些函数指针,可以使它们指向攻击者的恶意代码,从而在函数被调用时执行该代码

实现流程

1.定义虚函数表结构体

首先定义了一个结构体ConsoleWindow, 这是一个虚函数表(vftable)的结构,用于描述 conhost.exe 的窗口类

typedef struct _vftable_t {
    ULONG_PTR     EnableBothScrollBars;
    ULONG_PTR     UpdateScrollBar;
    ULONG_PTR     IsInFullscreen;
    ULONG_PTR     SetIsFullscreen;
    ULONG_PTR     SetViewportOrigin;
    ULONG_PTR     SetWindowHasMoved;
    ULONG_PTR     CaptureMouse;
    ULONG_PTR     ReleaseMouse;
    ULONG_PTR     GetWindowHandle;
    ULONG_PTR     SetOwner;
    ULONG_PTR     GetCursorPosition;
    ULONG_PTR     GetClientRectangle;
    ULONG_PTR     MapPoints;
    ULONG_PTR     ConvertScreenToClient;
    ULONG_PTR     SendNotifyBeep;
    ULONG_PTR     PostUpdateScrollBars;
    ULONG_PTR     PostUpdateTitleWithCopy;
    ULONG_PTR     PostUpdateWindowSize;
    ULONG_PTR     UpdateWindowSize;
    ULONG_PTR     UpdateWindowText;
    ULONG_PTR     HorizontalScroll;
    ULONG_PTR     VerticalScroll;
    ULONG_PTR     SignalUia;
    ULONG_PTR     UiaSetTextAreaFocus;
    ULONG_PTR     GetWindowRect;
} ConsoleWindow;

2.获取conhost进程ID

使用FindWindowsExA函数遍历所有的ConsoleWindowClass窗口,直到找到与目标conhost.exe进程关联的窗口句柄,然后获取该窗口的进程ID。要注意的是,这个ID是控制台应用程序(如cmd或powershell)的进程ID,而不是conhost.exe的

使用GetConhostId函数查找与控制台应用程序关联的 conhost.exe 进程,并返回其进程ID

3.读取vftable

通过窗口句柄获取GWLP_USERDATA(用户定义的数据),这里存储了指向vftable的指针,随后读取目标进程的vftable至本地

4.注入shellcode

在目标进程中分配内存,将shellcode写入这块内存。

5.修改vftable

修改本地的vftable结构,使其GetWindowHandle函数指针指向存放shellcode的内存地址,再在目标进程分配内存用于存放修改后的vftable,最后将指向vftable的指针修改成修改后的vftable地址

6.触发执行

通过发送 WM_SETFOCUS 消息到 conhost.exe 窗口,触发vftable中被修改的 GetWindowHandle 函数,从而执行Shellcode

7.恢复原始状态

执行完Shellcode后,将vftable恢复到原始状态,以避免引起目标进程的异常或崩溃

运行测试

与内核回调表进程注入类似,当注入的进程上线后,源进程会停止通讯,直到注入进程的退出后才恢复通讯

image-20230919115125056

最后更新于