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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Crassus — Windows权限提升发现工具,解析进程监视器启动日志以识别DLL劫持、弱ACL及其他提权路径,并自动生成代理DLL源代码。 | Kitploit
工具/GitHubGitHub/vu-ls/crassus
权限提升漏洞利用渗透测试二进制分析
GitHubvu-ls/crassus

Crassus

Windows权限提升发现工具,解析进程监视器启动日志以识别DLL劫持、弱ACL及其他提权路径,并自动生成代理DLL源代码。

查看仓库
63364607个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Crassus Windows 权限提升发现工具

快速开始

  1. 在进程监视器(Process Monitor)中,选择 Enable Boot Logging 选项。 "进程监视器引导日志记录选项"
  2. 重启。
  3. 登录系统并等待 Windows 稳定后,再次运行进程监视器。
  4. 当提示时,保存引导日志,例如保存为 raw.PML。
  5. 使用 Ctrl-R 重置默认的进程监视器过滤器。
  6. 保存此日志文件,例如保存为 boot.PML。
  7. 运行 Crassus.exe boot.PML。
  8. 检查任何绿色标记的结果以及 results.csv 中的相应条目。

目录

  • 为什么是“Crassus”
    • 你真的又做了一个权限提升发现工具吗?
    • 功能
    • 流程图
  • 截图
    • Crassus 执行
    • CSV 输出
    • 输出导出
    • 导出 DLL 函数
    • 导出 DLL 序号
  • 获取 Crassus.exe
    • 使用 Visual Studio 构建
    • 使用预编译的 Crassus.exe
  • 用法
    • 执行流程
    • 命令行参数
    • 示例
    • 代理 DLL 模板
    • openssl.cnf 模板
  • 编译代理 DLL
    • Visual Studio
    • MinGW
  • 真实世界示例
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • 故障排除
    • 缺少文件未执行
    • 代码以意外权限执行
    • 发现结果在重启后消失
  • 贡献
  • 致谢

为什么是“Crassus”?

Accenture 创建了一个名为 Spartacus 的工具,用于在 Windows 上发现 DLL 劫持机会。以 Spartacus 为基础,我们创建了 Crassus,将其 Windows 权限提升发现能力扩展到不仅仅是查找缺失文件。特权进程使用的文件和目录的 ACL 可以找到比仅仅查找缺失文件更多的方法来实现目标。

你真的又做了一个权限提升发现工具吗?

……但 Crassus 有一个特点:它利用了 SysInternals 进程监视器(Process Monitor) 并解析原始的 PML 日志文件。典型用法是使用进程监视器生成引导日志,然后使用 Crassus 解析它。它还会为有漏洞的 DLL 自动生成包含所有相关导出的代理 DLL 源代码。

功能

  • 原生解析 ProcMon PML 文件。日志(PML)解析器是通过将部分功能从 https://github.com/eronnen/procmon-parser/ 移植到 C# 实现的。格式规范可在此处找到。
  • Crassus 将为所有识别到的缺失 DLL 创建代理 DLL 的源代码。例如,如果某个应用程序容易通过 version.dll 遭受 DLL 劫持,Crassus 将为您创建包含所有导出的 version.cpp 和 version.def 文件。默认情况下,代理 DLL 会启动 calc.exe。构建脚本包含在内,可使用 Visual Studio 或 MinGW 构建 DLL。
  • 对于其他感兴趣的事件,例如创建进程或加载库,会调查非特权用户修改文件或文件路径任何部分的能力。
  • 能够处理大型 PML 文件,并将所有感兴趣的事件存储到输出的 CSV 文件中。

流程图

Crassus 工作的大致要点可总结为以下流程图: Crassus 流程图

截图

Crassus 执行

运行 Crassus

CSV 输出

CSV 输出

输出导出

导出

导出 DLL 函数

DLL 函数

导出 DLL 序号

DLL 序号

获取 Crassus.exe

使用 Visual Studio 构建

Crassus 是作为 Visual Studio 2019 项目开发的。要构建 Crassus.exe:

  1. 打开 Crassus.sln
  2. 在键盘上按 Ctrl+Shift+B

使用预编译的 Crassus.exe

如果您信任在不知道其作用的情况下运行他人的代码,Crassus.exe 在此存储库中提供。

用法

执行流程

  1. 在进程监视器(Process Monitor)中,选择 Enable Boot Logging 选项。 "进程监视器引导日志记录选项"
  2. 重启。
  3. 登录系统并等待 Windows 稳定后,可选地运行可能配置为以特权运行的计划任务。
  4. 再次运行进程监视器。
  5. 当提示时,保存引导日志。
  6. 使用 Ctrl-R 重置默认的进程监视器过滤器。
  7. 保存此日志文件,例如保存为 boot.PML。重新保存日志文件的原因有两个:
    1. 旧版本的进程监视器不会将引导日志保存为单个文件。
    2. 默认情况下,引导日志未经过滤,可能包含额外的噪音,例如在启动进程监视器本身时用户级别的 DLL 劫持。

命令行参数

参数描述
<PMLFILE>现有 ProcMon 事件日志文件的位置(文件)。
--verbose启用详细输出。
--debug启用调试输出。

示例

解析保存在 boot.PML 中的进程监视器引导日志。所有存在漏洞的路径将保存为 results.csv,所有代理 DLL 源文件保存在 stubs 子目录中。

C:\tmp> Crassus.exe boot.PML

代理 DLL 模板

以下是生成代理 DLL 时使用的模板。对于 Crassus 发现的 DLL,代理 DLL 将包含与 %_EXPORTS_% 中指定的相同导出名称,以及 .def 文件中指定的相同序号。Crassus 会通过查看父进程的架构,并相应地在 %_BUILD_AS_% 字段中标记源代码,来检测 DLL 需要构建为 32 位库还是 64 位库。

如果无法通过进程监视器日志找到真实的 DLL,或者导出名称有问题,构建脚本将回退到创建没有指定导出的 DLL。

#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // 在此运行您的载荷。
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

openssl.cnf 模板

对于不安全使用 OPENSSLDIR 变量值的应用程序,可以将精心构造的 openssl.cnf 文件放置在指定位置。在此示例中,软件将加载 C:\tmp\calc.dll。请确保使用 32 位库用于 32 位进程,使用 64 位库用于 64 位进程。

[openssl_init]
# 这将尝试在 OpenSSL 初始化时加载文件 c:\tmp\calc.dll
# 构建脚本应检测 calc.dll 库需要构建为 32 位还是 64 位
/tmp/calc = asdf

编译代理 DLL

Visual Studio

可以使用 Visual Studio 随附的 cl.exe 二进制文件进行编译。具体命令如下:

cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

要自动化构建过程,包括指定库应为 64 位还是 32 位:

  1. 打开 Visual Studio 开发者命令提示符。
  2. 使用 build.bat 脚本构建 DLL。
  3. 如果易受攻击的文件名不以 .dll 结尾,则根据需要重命名编译后的文件。

注意: 由于 vcvarsall.bat 的一个不幸行为(这绝对不是一个 bug),您可能在同一 Visual Studio 开发者命令提示符会话中尝试多次运行 build.bat 时遇到问题。如果遇到错误,只需关闭窗口并重新启动它。

MinGW

如果 Visual Studio 不易使用,代理 DLL 也可以使用 MinGW-w64 进行编译。例如,在 Ubuntu 平台上,可以通过以下命令安装 MinGW:sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

# 创建 32 位 DLL
i686-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
i686-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

# 创建 64 位 DLL
x86_64-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
x86_64-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

要自动化构建过程,包括指定库应为 64 位还是 32 位:

  1. 打开终端。
  2. 运行 bash ./build.sh
  3. 如果易受攻击的文件名不以 .dll 结尾,则根据需要重命名编译后的文件。

真实世界示例

Acronis True Image

Crassus 分析

如 VU#114757 所述,旧版 Acronis 软件包含多个权限提升漏洞。

  1. 在非特权用户可创建的位置放置 openssl.cnf。
  2. C:\ProgramData\Acronis 目录的 ACL 不当。

Crassus 自动发现这两个问题。 Crassus 对 Acronis 的输出

DLL 劫持

通过将我们编译的 curl.dll 文件放置在 C:\ProgramData\Acronis\Agent\var\atp-downloader\ 目录中,并使用新的进程监视器引导日志重新启动,我们可以看到我们的载荷(运行 calc.exe)以 SYSTEM 权限运行。 "放置 curl.dll 后的进程监视器日志"

openssl.cnf 放置

下载工具