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

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

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

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

工具目录

分类

查看所有分类
Loading categories
KDStab — KillDefender 和 Backstab 的 BOF 组合 | Kitploit
工具/GitHubGitHub/octoberfest7/kdstab
防御工具权限提升漏洞利用框架后渗透利用红队Payload 开发
GitHuboctoberfest7/kdstab

KDStab

KillDefender 和 Backstab 的 BOF 组合

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

KDStab

2022年6月28日:微软已推出补丁,阻止打开 MsMpEng.exe 令牌的句柄,因此本工具的 KillDefender 部分不再可用。Backstab 仍应有效。尚不清楚补丁 ID,可能在未打补丁的旧系统上仍可工作。已在 Win10 21H2 和 Win11 上验证。

这是一个结合了 Yaxser 的 Backstab 和 pwn1sher 的 KillDefender 的 Beacon 对象文件实现,用于 Cobalt Strike。

image

介绍

KDStab 是一款后渗透工具,用于击败 Windows Defender(理论上也可用于其他安全解决方案,但未经测试),从而让其他后渗透工具在使用时减少被检测的风险。它利用 Backstab 和 KillDefender 实现这一目的,两者均通过 kdstab 的 Cobalt Strike 命令在适当时调用。

KDStab 已在 x64 Windows 10、Windows 11 和 Server 2019 上成功测试。

KDStab 需要管理员或系统级访问权限。

主要功能:

  1. 枚举进程的完整性级别
  2. 剥离进程的特权并将其完整性设置为不可信
  3. 杀死受 PPL 保护的进程
  4. 列出受 PPL 保护的进程的句柄
  5. 关闭受 PPL 保护的进程的特定句柄

示例

检查进程的完整性级别

image

剥离进程的特权并将其令牌设置为不可信

image

/STRIP 命令的结果

image

杀死受 PPL 保护的进程

image

背景

我在 pwn1sher 的 KillDefender 发布后不久偶然发现了它,觉得它很厉害;除了让 MsMpEng.exe(Defender)失效外,它还保持进程运行,这在 OPSEC 角度看来是可取的(此外,WinDefend 服务的默认行为是在失败时重启 MsMpEng.exe——这个特性稍后会很有用)。

虽然在渗透测试中让 Defender 失明很棒,但作为专业人员,我们有责任将客户的资产恢复到我们发现时的状态;此外,我们并不希望因为 Kill(ed)Defender 而让他们的系统暴露给其他攻击者。

问题在于“恢复” MsMpEng.exe 到工作状态非常困难。KillDefender 的工作原理是剥离目标进程的特权(如 SeDebugPrivilege 等),并将其令牌完整性设置为不可信。你不能简单地“重新提升”令牌到系统级并恢复特权,必须杀死进程并启动一个新实例。当然,MsMpEng.exe 同时也是 PsProtectedSignerAntimalware-Light 进程,即使作为系统也无法直接结束进程。令人沮丧的是,TrustedInstaller 组最近已从 MsMpEng.exe 中移除(你可以找到其他相关研究),使得这种长期以来用于真正杀死 MsMpEng.exe 进程(或 WinDefend 服务)的技术失效。在这种情况下,唯一看似可行的选择是重启机器,这可能会给客户带来问题,尤其是在服务器和域控制器上。

带着这个问题,我开始研究并很快找到了 Yaxser 的 Backstab。Backstab 能够通过利用 ProcExp 驱动程序杀死受 PPL 保护的进程;这是一个 Microsoft 签名的 sysinternals 驱动程序,对我们有利。Backstab 确实执行了一些 OPSEC 不安全的操作;它将驱动程序写入磁盘并创建注册表项。但是,如果 Defender 已经失明……:)。

我着手将这两个工具移植到 BOF 格式,以便通过 Cobalt Strike Beacon 使用,而无需将它们写入磁盘(原始的 Backstab 二进制文件在运行时被 Defender 阻止)。

我是 C/C++ 和编写 BOF 的新手,在过程中学到了很多。你会在代码中发现一些不一致之处(比如 Backstab_bof 在 Linux 上使用 gcc 编写和编译,而 KillDefender_bof 在 Visual Studio 中编写和编译),这是由于我在创建过程中的学习所致,但我已经进行了大量测试以确保功能,并且在 aggressor 脚本中构建了许多约束,以确保对 BOF 的正确使用和输入。希望这个工具对你有用。

变化与编程说明

对工具的源代码进行了一些值得注意的更改,并做出了一些编程选择,在此说明:

  1. ProcExp 驱动程序不再存储/加载为资源,而是硬编码为 backstab_src/resource.c 中的字节数组
  2. 原始 Backstab 代码中存在多处内存泄漏,我已发现并解决
  3. KillDefender POC 在用户不是系统时失败;我添加了一段代码来枚举当前用户,并在需要时通过模拟 Winlogon 的令牌获取系统权限
  4. KillDefender 已修改,允许用户指定要针对的进程;此外添加了“Check”模式,用于枚举进程的完整性级别(可确认进程是否成功剥离了特权和完整性)
  5. Backstab 使用了足够多的不同 API 和 C 调用,以至于 Cobalt Strike 无法解析所有动态函数解析——TrustedSec 来救场!我实现了他们的动态函数解析,以补充 CS 的功能,从而能够调用所有必要的 API
  6. 原始 Backstab 有几个 switch/case 语句,在移植过程中造成问题,因此被替换为 if/else 语句。此外,大部分全局变量也因类似原因被消除
  7. 我知道一个工具用 Visual Studio 编写,另一个用 GCC 编写很奇怪;这是我在成功移植过程中挣扎并经历许多成长痛苦的结果。希望未来的工具能受益于我在此过程中学到的许多教训
  8. KillDefender_bof 和 Backstab_bof 都以独立仓库形式存在。请注意,独立仓库中的代码与本工具中的代码不同。这样做是为了使它们更灵活,并能集成到单个包中

编译说明

我没有尝试为 x86 编译这两个工具;如果你确实需要此工具的 x86 版本,请自行解决。

使用 gcc 编译 Backstab_bof:

root@kitploit:~
x86_64-w64-mingw32-gcc -o backstab.x64.o -Os -c main.c -DBOF -D_UNICODE

确保已将 mingw 更新到最新版本!我之前遇到过版本中头文件过时的问题,但最新版本的头文件是正确的。

使用 x64 本机命令提示符编译 KillDefender_bof:

root@kitploit:~
cl.exe /c /GS- /TP killdefender_bof.cpp /FoKillDefender.x64.o

致谢

  1. Yaxser 及其 Backstab 工具:https://github.com/Yaxser/Backstab
  2. pwn1sher 及其 KillDefender 工具:https://github.com/pwn1sher/KillDefender
  3. Trustedsec 及其 CS-Situational-Awareness-BOF 仓库,这对移植过程帮助巨大。我在本项目中使用了其代码片段,强烈推荐任何开始编写 BOF 的人查看该仓库:https://github.com/trustedsec/CS-Situational-Awareness-BOF
下载工具