PassTheCert开发指南:C与Python版本的代码结构与扩展方法
2026/7/26 17:44:36 网站建设 项目流程

PassTheCert开发指南:C#与Python版本的代码结构与扩展方法

【免费下载链接】PassTheCertProof-of-Concept tool to authenticate to an LDAP/S server with a certificate through Schannel项目地址: https://gitcode.com/gh_mirrors/pa/PassTheCert

PassTheCert 是一款通过 Schannel 实现证书认证到 LDAP/S 服务器的 Proof-of-Concept 工具,支持 C# 和 Python 两种版本。本文将深入解析其代码结构设计与扩展方法,帮助开发者快速理解项目架构并进行功能扩展。

项目整体架构

PassTheCert 采用多语言实现策略,核心功能在 C# 和 Python 中分别独立实现,满足不同场景下的使用需求。项目目录结构清晰,主要包含以下部分:

  • C# 版本:位于C#/目录下,包含完整的 Visual Studio 解决方案,实现了证书认证、LDAP 操作及多种攻击功能。
  • Python 版本:位于Python/目录下,基于 impacket 库实现,提供轻量级的证书认证与 LDAP 操作接口。

核心功能定位

两种版本均围绕以下核心功能展开:

  • 通过 Schannel 使用证书进行 LDAP/S 认证
  • 支持多种 Active Directory 操作(如添加计算机、修改权限等)
  • 提供命令行接口,方便用户直接使用或集成到其他工具链

C# 版本代码结构解析

C# 版本是 PassTheCert 的主要实现,代码组织遵循面向对象设计原则,核心逻辑集中在PassTheCert.cs文件中。

核心类与方法

Program 类

Program类是程序入口点,包含以下关键组件:

  • Main 方法:解析命令行参数,初始化 LDAP 连接,根据攻击类型调用相应方法。关键代码位于 C#/PassTheCert/PassTheCert.cs。

  • 证书认证逻辑:通过X509Certificate2加载证书,配置LdapConnection使用 Schannel 认证:

    X509Certificate2 certificate = new X509Certificate2(cert_path, cert_password, X509KeyStorageFlags.Exportable); LdapConnection connection = new LdapConnection(server); connection.ClientCertificates.Add(certificate); connection.SessionOptions.VerifyServerCertificate += (conn, cert) => { return true; };
攻击功能实现

C# 版本实现了多种攻击功能,每种功能对应独立的方法:

  • ElevateUserAttack:提升用户权限,授予 DCSync 所需的复制权限,代码位于 C#/PassTheCert/PassTheCert.cs。

  • RbcdAttack:修改msDS-AllowedToActOnBehalfOfOtherIdentity属性,实现资源委派攻击,代码位于 C#/PassTheCert/PassTheCert.cs。

  • AddComputerAttack:添加新计算机账户到域,用于后续攻击,代码位于 C#/PassTheCert/PassTheCert.cs。

安全描述符操作

工具通过IADsSecurityDescriptorIADsAccessControlList接口操作安全描述符,实现权限修改。关键方法包括:

  • GetSecurityDescriptor:获取目标对象的安全描述符
  • SecurityDescriptorToByteArray:将安全描述符转换为字节数组
  • CreateElevateUserAceCreateRbcdAce:创建访问控制项 (ACE)

Python 版本代码结构解析

Python 版本基于 impacket 和 ldap3 库实现,代码更加轻量,主要包含passthecert.py文件。

核心类设计

RBCD 类

RBCD类专门处理资源委派攻击,提供以下方法:

  • read():读取目标计算机的委派权限
  • write(delegate_from):添加委派权限
  • remove(delegate_from):移除委派权限
  • flush():清空委派权限

关键代码位于 Python/passthecert.py。

ManageComputer 类

ManageComputer类处理计算机账户管理,支持添加、删除和修改计算机账户:

def add_computer(self, constrained_delegations = None): # 创建计算机账户逻辑 # 设置 SPN 和 unicodePwd 等属性

证书认证实现

Python 版本通过 ldap3 的 TLS 配置实现证书认证:

tls = ldap3.Tls(local_private_key_file=options.key, local_certificate_file=options.crt, validate=ssl.CERT_NONE) ldapServer = ldap3.Server(target, use_ssl=options.port == 636, port=options.port, get_info=ldap3.ALL, tls=tls) ldapConn = ldap3.Connection(ldapServer, authentication=ldap3.SASL, sasl_mechanism=ldap3.EXTERNAL)

功能扩展方法

无论是 C# 还是 Python 版本,都可以通过以下方式进行功能扩展:

添加新攻击类型

  1. C# 版本

    • Main方法的参数解析部分添加新的攻击类型标识
    • 实现对应的攻击方法(如NewAttackMethod
    • switch (attack_type)中添加新的 case 分支
  2. Python 版本

    • 在命令行参数解析中添加新的-action选项
    • 实现对应的处理类或方法
    • 在主逻辑中添加新 action 的处理分支

扩展 LDAP 操作

如需添加新的 LDAP 操作(如修改特定属性),可参考现有代码:

  • C#:使用ModifyRequestDirectoryAttributeModification
  • Python:使用 ldap3 的modify方法

集成新的认证方式

虽然工具当前专注于证书认证,但可通过扩展认证模块支持其他方式:

  • C#:扩展LdapConnection的配置逻辑
  • Python:修改ldap3.Connection的初始化参数

编译与使用

C# 版本编译

使用 Visual Studio 打开C#/PassTheCert.sln解决方案,直接构建即可生成可执行文件。

Python 版本使用

直接运行 Python 脚本,需安装依赖库:

pip install ldap3 impacket

基本使用示例(添加计算机账户):

python passthecert.py -action add_computer -domain contoso.com -dc-ip 192.168.1.100 -crt user.crt -key user.key -computer-name DESKTOP-1337$

总结

PassTheCert 提供了 C# 和 Python 两种版本的证书认证 LDAP 工具,代码结构清晰,功能模块化。开发者可根据需求选择合适的版本进行使用或扩展。通过本文介绍的代码结构解析和扩展方法,能够快速上手项目并进行二次开发,添加新的攻击类型或 LDAP 操作功能。

项目的设计遵循了 Proof-of-Concept 工具的特点,注重功能实现和易用性,同时保留了足够的扩展性,适合作为学习 Active Directory 证书认证和 LDAP 操作的参考项目。

【免费下载链接】PassTheCertProof-of-Concept tool to authenticate to an LDAP/S server with a certificate through Schannel项目地址: https://gitcode.com/gh_mirrors/pa/PassTheCert

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询