零基础日语培训,零日( 三 )


借助 SetWindowsHookEx 函数 , 可在窗口调用过程之前 , 设置处理 WM_NCCREATE 消息的自定义回调 。然而在 win32k.sys 中 , 所有窗口都由 tagWND 结构呈现 , 其具有“fnid”字段(亦称 Function ID) 。该字段用于定义窗口的类 , 所有窗口分为 ScrollBar、Menu、Desktop 等部分 , 此前卡巴斯基已经分享过与我们已经写过与 Function ID 相关的 bug。
在 WM_NCCREATE 回调期间 , 窗口的 Function ID 被设置为 0 , 使得我们能够钩子内部为窗口设置额外数据 , 更重要的是 Hook 后立即执行的窗口过程的地址 。将窗口过程更改为菜单窗口过程 , 会导致执行 xxxMenuWindowProc , 且该函数会将 Function ID 启动到 FNID_MENU(因为当前消息等于 WM_NCCREATE) 。
在将 Function ID 设置为 FNID_MENU 之前操作额外数据的能力 , 可强制 xxxMenuWindowProc 函数停止菜单的初始化、并返回 FALSE。因此发送 NCCREATE 消息将被视为失败的操作 , CreateWindowEx 函数将通过调用 FreeWindow 来停止执行 。
卡巴斯基实验室发现 , 野外已经有针对 64-bit 版本的 Windows 操作系统的攻击(从 Windows 7 到 Windows 10) , 其利用了众所周知的 HMValidateHandle 漏洞来绕过 ASLR。成功利用后 , 漏洞会借助 Base64 编码命令来执行 PowerShell , 主要目的是从 https // pastebin.com 下载执行二、三阶段的脚本 。
其中三阶段脚本的内容很是简洁明了 —— 捷豹 shellcode、分配可执行内存、将 shellcode 复制到已分配的内存、以及调用 CreateThread 来执行 shellcode。shellcode 的主要目标 , 是制作一个简单的 HTTP 反向 shell , 以便攻击者完全控制受害者的系统 。

推荐阅读