ADCSKiller代码架构解析:Python多线程漏洞利用框架设计
【免费下载链接】ADCSKillerAn ADCS Exploitation Automation Tool Weaponizing Certipy and Coercer项目地址: https://gitcode.com/gh_mirrors/ad/ADCSKiller
ADCSKiller是一款基于Python的ADCS漏洞利用自动化工具,它通过整合Certipy与Coercer的核心功能,构建了一个高效的多线程漏洞检测与利用框架。本文将深入剖析其代码架构设计,揭示如何通过模块化设计实现ADCS漏洞的自动化探测与利用。
核心架构概览
ADCSKiller采用面向对象的设计思想,将整个漏洞利用流程抽象为三个核心模块:数据收集层、漏洞分析层和漏洞利用层。这种分层架构不仅提高了代码的可维护性,还为后续扩展新漏洞利用模块(如ESC2-ESC7)奠定了基础。
主要代码文件结构
- adcskiller.py:主程序入口,包含核心类定义与执行逻辑
- requirements.txt:依赖管理文件,声明必要的第三方库
数据收集层设计
数据收集层负责从目标环境中获取ADCS相关的关键信息,主要通过Certipy工具和LDAP协议实现。这一层的核心是Exploit类中的数据收集方法,包括证书模板枚举、域管理员识别和域控制器发现。
证书服务信息收集
get_certipy_results方法通过调用Certipy工具的find命令,获取目标CA服务器的证书模板信息,并将结果保存为JSON格式。代码中特别处理了连接超时和凭据错误等异常情况,确保数据收集的可靠性。
certipy_results = subprocess.run(["certipy", "find", "-u", f"{self.__username}@{self.__domain}", "-p", self.__password, "-dc-ip", self.__target, "-vulnerable", "-json", "-output", self.__certipy_output_prefix], capture_output=True, text=True).stdoutLDAP数据获取
bind_to_ldap方法实现了与域控制器的LDAP连接,支持ldap://389和ldaps://636两种协议。连接成功后,get_domain_admins和get_dcs方法通过LDAP查询获取域管理员列表和域控制器信息,为后续漏洞利用提供目标用户和主机信息。
多线程执行引擎
ADCSKiller的一大特色是采用多线程架构实现并发漏洞利用,主要通过两个线程类实现:CertipyRelay和Coercer。这两个类均继承自Python的threading.Thread,实现了漏洞利用过程中的并行处理。
CertipyRelay线程
CertipyRelay线程负责启动Certipy的中继服务,监听并处理来自目标服务器的证书请求。其核心逻辑在run方法中实现,通过调用Certipy的relay命令启动中继服务。
def run(self): print(f'[+] Started Relaying to {self.target_ca}') relaying_results = subprocess.Popen(["certipy", "relay", "-ca", self.target_ca, "-template", "DomainController"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) for line in relaying_results.stdout: print(line.strip())Coercer线程
Coercer线程则负责执行强制认证攻击,诱导目标域控制器向中继服务器发送认证请求。其run方法调用Coercer工具的coerce命令,实现强制认证功能。
def run(self): print(f'[+] Started coercion from {self.target_dc} to {self.lhost}') subprocess.run(["Coercer", "coerce", "-u", self.username, "-p", self.password, "-d", self.domain, "-t", self.target_dc, "-l", self.lhost, "--always-continue"], capture_output=True, text=True).stdout print(f'[+] Finished coercion from {self.target_dc} to {self.lhost}')漏洞利用层实现
漏洞利用层通过run_exploits方法实现对不同类型ADCS漏洞的调度执行。目前支持ESC1和ESC8两种漏洞类型,采用字典映射的方式将漏洞类型与对应的利用方法关联起来,便于扩展新的漏洞利用模块。
ESC1漏洞利用
exploit_esc1方法实现了对ESC1漏洞的利用,通过Certipy的req命令为域管理员请求证书,再通过auth命令获取NT哈希。这一过程自动化了从证书请求到哈希获取的完整流程。
ESC8漏洞利用
exploit_esc8方法则实现了对ESC8漏洞的利用,通过协调CertipyRelay和Coercer两个线程,实现中继攻击。代码中根据CA服务器是否为域控制器,动态调整攻击策略,提高了攻击的适应性。
依赖管理与扩展性
ADCSKiller通过requirements.txt管理项目依赖,目前主要依赖argparse和ldap3两个库,分别用于命令行参数解析和LDAP操作。这种轻量级的依赖设计确保了工具的易用性和可移植性。
从代码架构来看,ADCSKiller预留了良好的扩展接口。run_exploits方法中采用的字典映射方式,使得添加新的漏洞利用模块(如ESC2-ESC7)变得非常简单,只需实现对应的利用方法并添加到映射字典即可。
总结
ADCSKiller通过模块化设计和多线程技术,构建了一个高效的ADCS漏洞利用框架。其核心优势在于:
- 分层架构:数据收集、漏洞分析和漏洞利用的清晰分离,提高了代码的可维护性
- 多线程并发:通过CertipyRelay和Coercer线程实现并行攻击,提升了攻击效率
- 灵活扩展:采用字典映射方式管理漏洞利用模块,便于添加新的漏洞类型
- 异常处理:完善的错误处理机制,提高了工具的稳定性和可靠性
随着ADCS相关漏洞研究的深入,ADCSKiller有望通过持续迭代,成为ADCS安全评估的重要工具。对于安全研究人员而言,其代码架构也为开发类似的漏洞利用框架提供了有益的参考。
【免费下载链接】ADCSKillerAn ADCS Exploitation Automation Tool Weaponizing Certipy and Coercer项目地址: https://gitcode.com/gh_mirrors/ad/ADCSKiller
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考