Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CallStackSpoofer — 一个用于在进行系统调用时伪造任意调用栈的 PoC 实现(例如通过 NtOpenProcess 获取句柄) | Kitploit
工具/GitHubGitHub/withsecurelabs/callstackspoofer
IDS/IPS规避后渗透利用红队对抗性攻击
GitHubwithsecurelabs/callstackspoofer

CallStackSpoofer

一个用于在进行系统调用时伪造任意调用栈的 PoC 实现(例如通过 NtOpenProcess 获取句柄)

查看仓库
5897441年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CallStackSpoofer

该仓库演示了一个 PoC 实现,用于在进行系统调用时伪造任意调用栈。完整的技术分析请参阅随附的博客文章:https://labs.withsecure.com/blog/spoofing-call-stacks-to-confuse-edrs。

默认情况下,它包含三个可供模仿的示例调用栈,可通过提供 --wmi、--rpc 或 --svchost 参数来选择,如下所示:

readmeexample

这些调用栈是通过启用进程访问事件的 SysMon 运行并搜索 lsass 为句柄操作目标的事件而获得的。

注意,作为提醒,此 PoC 已在以下 Windows 版本上测试:

  • 10.0.19044.1706 (21h2)

它尚未在任何其他版本上测试,并且偏移量在不同 Windows 版本上显然可能会有所不同(并因此失效)。

如果您遇到问题,一种调试错误的技术是在 SysMon 中找到生成 OpenProcess 事件的进程,并在 WinDbg 中附加到该进程。附加后,运行 bp ntdll!NtOpenProcess,当断点命中时运行 knf。

这将显示类似下面的输出,其中包含完整的符号解析和正确的栈使用空间(由“Memory”列表示):

root@kitploit:~
0:003> knf
 #   Memory  Child-SP          RetAddr               Call Site
00           00000037`f01fe300 00007ffd`221d2ea6     ntdll!NtOpenProcess+0x12
01         8 00000037`f01fe308 00007ffd`1ffee959     KERNELBASE!ProcessIdToSessionId+0x96
02        80 00000037`f01fe388 00007ffd`23b99633     lsm!RpcOpenEnum+0x129
03       430 00000037`f01fe7b8 00007ffd`23b33711     RPCRT4!Invoke+0x73
04        40 00000037`f01fe7f8 00007ffd`23bfd77b     RPCRT4!Ndr64UnmarshallHandle+0xe1
05        70 00000037`f01fe868 00007ffd`23b7d2ac     RPCRT4!Ndr64StubWorker+0xb0b
06       6c0 00000037`f01fef28 00007ffd`23b7a408     RPCRT4!NdrServerCallAll+0x3c
07        50 00000037`f01fef78 00007ffd`23b5a266     RPCRT4!DispatchToStubInCNoAvrf+0x18
08        50 00000037`f01fefc8 00007ffd`23b59bb8     RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x1a6
09        e0 00000037`f01ff0a8 00007ffd`23b68a0f     RPCRT4!RPC_INTERFACE::DispatchToStub+0xf8
0a        70 00000037`f01ff118 00007ffd`23b67e18     RPCRT4!LRPC_SCALL::DispatchRequest+0x31f
0b        d0 00000037`f01ff1e8 00007ffd`23b67401     RPCRT4!LRPC_SCALL::HandleRequest+0x7f8
0c       110 00000037`f01ff2f8 00007ffd`23b66e6e     RPCRT4!LRPC_ADDRESS::HandleRequest+0x341
0d        a0 00000037`f01ff398 00007ffd`23b6b542     RPCRT4!LRPC_ADDRESS::ProcessIO+0x89e
0e       140 00000037`f01ff4d8 00007ffd`24ab0330     RPCRT4!LrpcIoComplete+0xc2
0f        a0 00000037`f01ff578 00007ffd`24ae2f26     ntdll!TppAlpcpExecuteCallback+0x260
10        80 00000037`f01ff5f8 00007ffd`23387034     ntdll!TppWorkerThread+0x456
11       300 00000037`f01ff8f8 00007ffd`24ae2651     KERNEL32!BaseThreadInitThunk+0x14
12        30 00000037`f01ff928 00000000`00000000     ntdll!RtlUserThreadStart+0x21

另外请注意,当前调用点使用的总栈空间在下一行中指示(例如,ntdll!NtOpenProcess 仅占用 8 字节)。如前所述,本自述文件开头链接的博客中提供了完整的技术分析,其中将更详细地解释这一点(以及诸如 Child-SP 之类的概念)。windbg 生成的值可用于在出现任何问题时与 CalculateFunctionStackSize() 返回的值进行关联。

相关工作

感谢 unicorn_pe 项目(https://github.com/hzqst/unicorn_pe)提供的用于解析 UNWIND_CODE 的示例代码。

下载工具