Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

Recommended Posts

理论知识

在传统的kerberos认证的时候,是使用用户密码进行认证的。回顾下申请TGT的过程。
用用户hash加密时间戳作为value,type为PA-ENC-TIMESTAMP, 放在PA_DATA上。KDC收到请求,使用用户hash解密value的值得到时间戳跟当前时间做比对,如果在合理的范围(正常五分钟),就认证通过。
事实上也可以使用证书作为认证,这也是这次spectorops关于ADCS研究的最大亮点,后面漏洞紧紧围绕这点。
RFC4556引入了对 Kerberos 预身份验证的公钥加密支持。这个RFC 的title是Public Key Cryptography for Initial Authentication in Kerberos,后面我们使用简称PKINIT来介绍使用证书进行kerberos身份认证这种方法。
PKINIT同样也使用时间戳,但不是使用用户密码派生密钥加密消息,而是使用属于证书的私钥对消息进行签名。

测试环境

DC windows server 2019
AD CS Windows Server 2008
非域内机器windows 7

测试准备

certtmlp.msc - 证书模板控制台
certsrv.msc - 证书颁发机构
certmgr.msc - 证书管理

给一域用户安装个用户证书
win+r运行certmgr.msc,选择个人,右键,所有任务->申请新证书。请求证书选择用户(即可生成当前用户的一个证书)

fsXTFU.png

安装后如下

fsX7YF.png

执行certutil -user -store My可以看到用户证书

fsXLl9.png

场景模拟

假设一台域内机器带有一个用户证书要怎么利用他?
先把这个证书dump下来(需要包括私钥)可以用certutil或者直接用certmgr.msc dump

certutil -user -exportPFX <SHA1 hash> test1.pfx
  • 1

(dump的时候需要给证书设置个密码(如果该证书默认没密码的话))

fsXOyR.png
fsXXO1.png

(使用certutil导出)

fsXzTK.png

这里有一种情况不能通过这两种方式dump,有些证书在导入的时候需要密码或者不勾选标志此密钥为可导出的密钥,需要mimikatz dump

fsj9YD.png

dump出现如下问题

fsjiSH.png

使用mimikatz的crypto::capi修改lsass,然后在dump (这个报错也不影响,具体原因不知)
(这证书dump下来如果导入的时候设置了密码也没用,验证根本过不了,也不知道有啥用)

crypto::capi #修改lsass
crypto::certificates /systemstore:local_machine /store:my /export
  • 1
  • 2

(没以administrator权限执行)

fsjk6A.png

(以administrator权限执行)

decd25cc3ceaa229.png

尝试用Rubeus进行申请票据
知道证书密码或者dump证书的时候没设置不可dump可自己设置密码

Rubeus.exe asktgt /user:csadmin /password:123456 /certificate:admin.pfx /domain:joker.local /dc:WIN-0ASLVBO5ID9.joker.local #123456是私钥密码(dump证书的时候设置的)
  • 1
3f344d91d72244e3.png

利用过程

理论点

a735763c31d0fe83.png

在域内利用
Rubeus.exe申请票据导入到当前进程,然后获取hash用wmiexec.py连接之类的
(清空原有的票据进行测试)

f4dd4b544a516e3e.png

Rubeus进行申请票据

aa2df3a2f23d4cb5.png

获取hash

3969335a61d64673.png

不在域内利用
将pfx移动到win7,并导入证书。在hosts文件添加域控IP和加入被控制机器的IP和机器名或者DNS改为域控的IP (代理进内网)

ed2393d62b472888.png

利用keke获取ntlm,然后用wmiexec.py连接之类的

tgt::pac /subject:csadmin /castore:current_user /domain:joker.local
  • 1
0cf25ddee50a166f.png

直接利用mimikatz令牌注入用psexec连接AD CS服务器
(pth ntlm到新进程psexec连接)

c08063c93c568bc2.png

常见搜索证书的位置

我们经常可以在邮件,磁盘里面看到证书,我们一般按照后缀来搜索证书的,我们一般关注以下后缀
1、key后缀的,只包含私钥
2、crt/cer 后缀的,只包含公钥
3、csr后缀的,证书申请文件,不包含公钥,也不包含私钥。没啥用
4、pfx,pem,p12后缀的,包含公私钥,我们最喜欢的。
搜索文件后缀的每个人使用的工具不一样,我个人比较喜欢的是SharpSearch,.Net的项目,支持内存加载,可以写成CNA插件。

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...