在较大的企业、政企、高校等单位的网络信息化建设中,域环境常常是内部网络建设的重要一部分。
而从现有网络安全建设来看,大部分单位的内部网络的安全性往往没有边界严格,但网络防御的重点集中在网络边界上。随着黑产团伙网络攻击事件的频频发生,在攻击者“穿过”单位网络的“边界防御”后,内部网络无疑是攻击者不会轻易放过的“香饽饽”。
黑客经常会利用AD域作为首要攻击目标,特别是域控服务器,一旦其沦陷,则整个域宣告失陷;以ATT&CK视角来看,整个过程黑客涉及了网络攻击生命周期中的权限提升、内部侦察和横向移动阶段。接下来我们将介绍这些攻击手法。
01无凭据场景
定位域控
在前期打点阶段成功拿到一台机器的shell之后,然后判断出该环境存在域,这时需要首先明确域控所有在的位置,为后期攻陷域控做信息收集。
端口扫描:扫描目标的88(kerberos端口),389(ldap端口),636(ldaps端口)定位域控。
dns解析:首先通过端口扫描得到DNS服务器的地址。
使用NTLM Info获取域控的机器名:在无凭据的场景下,我们通过端口扫描或者dns解析的方式得到域控的ip地址之后,还需要收集域控的机器名等信息,此时可以使用NTLM Info(在NTLM认证的在type2返回Challenge的过程中,同时返回了操作系统类型,主机名,netbios名等)来进行收集。
可直接进行利用的漏洞
zerologon漏洞
该漏洞发生在Netlogon远程协议(MS-NRPC)与域控制器建立安全通道的过程中。
Netlogon远程协议是域控制器上提供的一个RPC接口,它用于与用户和计算机身份验证相关的各种任务,最常用于通过NTLM协议帮助用户登录服务器。其他功能包括对NTP响应的认证,特别是:允许计算机在域内更新其密码。
MS-NRPC有一个函数ComputeNetlogonCredential(该函数用于客户端和服务器使用密码原语生成凭据值)。ComputeNetlogonCredential将8字节质询作为输入,并使用会话密钥将质询转换为带有 AES-CFB8 的哈希以输出 8 字节结果。加密需要使用初始化向量 (IV),但ComputeNetlogonCredential函数将 IV 设置为 16 个零字节的固定值。这造成了一个缺陷,因为加密 8 字节的零可能会在 256 次尝试中产生 1 个概率为全零的密文。此外,服务器接受未加密的 netlogon 会话,所以可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。
ms17-010漏洞
MS17-010(永恒之蓝)是影响Windows操作系统中SMBv1协议(SMB协议的最早期版本)的漏洞。攻击者可以通过向SMBv1服务器发送特制数据包来触发此漏洞,从而在目标系统上执行任意代码。为利用此漏洞,攻击者向SMBv1服务器发送特制数据包,触发缓冲区溢出,从而允许攻击者在目标系统上执行任意代码。该数据包通过TCP端口139和445发送,这些端口是SMB协议使用的。漏洞的根本原因是SMBv1服务器处理特定请求的方式存在缺陷。
具体而言,漏洞与服务器处理具有特定参数的事务请求的方式有关。通过发送具有特定参数的特制事务请求,攻击者可以导致服务器为请求分配不足的内存,这可能导致缓冲区溢出和执行任意代码。
获取账户
1、域用户枚举
Kerberos协议认证的AS-REQ阶段,cname的值是用户名。用户不存在时,返回包提示错误KRB5DC_ERR_C_PRINCIPAL_UNKNOWN并且不携带e-data。用户名存在,密码正确和密码错误时,AS-REP的返回包不一致,密码错误时返回KRB5DC_ERR_PREAUTH_REQUIRED,并携带e-data,可利用这点,对域内进行域用户枚举和密码喷洒等攻击。
2、密码喷洒
在常规的爆破中,我们一般先用很多密码去碰撞一个账号,这样很容易导致账号被锁定。而密码喷洒是先用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题。通过账户名枚举获取了域用户后,进行密码喷洒。
3、密码爆破
密码爆破是指使用域用户与多个密码进行碰撞。在碰撞过程中,当密码错误尝试次数超过组策略中指定的次数就会导致账户被锁定。
4、存在不需要预身份认证
As-rep roasting 攻击:如果用户开启了”不使用kerberos预身份认证”,在AS-REP阶段,可以在任意一台能访问DC的机器上请求该用户的TGT,此时DC不会做校验就将TGT和Session Key返回,则可以对Session Key(经过用户的RC4-HMAC密码加密)进行离线暴力破解,进而获取明文密码。
CVE-2022-33679:该漏洞导致攻击者可请求设置了“不要求Kerberos预身份验证”的用户的TGT票据,并对AS-REP中加密session_key使用的密钥流进行破解,从而得到明文密码。
02拥有账户名和密码场景
本地管理员
Dump lsass
凭证转储是攻击者用来破坏基础设施的最常用技术之一。它允许窃取敏感的凭证信息,并使攻击者能够在目标环境中进一步横向移动。负责此操作的进程是lsass.exe(本地安全机构子系统服务),我们需要转储lsass 进程的内存。
1、mimikatz
mimikatz 是一种非常流行的后渗透利用工具,可用于转储 lsass 进程并从中提取 NTLM 哈希值。攻击流程如下。
privilege::debug
sekurlsa::logonpasswords
2、Procdump
procdump是微软官方的工具,使用该工具可以把lsass的内存dump下来,可以绕过大多数的防护软件。lsass进程里面存放着我们登陆的账号密码等信息。只要登陆机器那么lsass进程就会记录你的登陆凭证,通过lsass我们就能够获取到机器的明文密码和hash。首先使用procdump将Lsass中的内存dump下来。
lsass进程获取内存hash,lsass.exe进程会保存机器登录过的用户密码(2008之前密码是明文存储,2012和2016都是密文hash存储)。
procdump.exe -accepteula -ma lsass.exe lsass.dmp
3、QuarksPwDump
Quarks PwDump是quarkslab出品的一款用户密码提取开源工具,目前软件最新版本为0.2b,其完整源代码可从https://github.com/quarkslab/quarkspwdump获取,目前它支持Windows XP/2003/Vista/7/2008版本,且相当稳定。可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker。
QuarksPwDump.exe –dump-hash-local
4、PwDump7
Pwdump7从文件系统中提取二进制 SAM 和 SYSTEM 文件来运行,然后提取哈希值。
PwDump7.exe
5、Avdump
avdump.exe是Avast杀毒软件中自带的一个程序,可用于转储指定进程(lsass.exe)内存数据,它带有Avast杀软数字签名。
AvDump.exe –pid –exception_ptr 0 –thread_id 0 –dump_level 1 –dump_file
绕过LSA防护策略读取密码
在 Win8.1 操作系统开始为 LSA 提供了额外的保护,以防止读取内存和不受保护的进程注入代码。意味着在 Lsa Protection 保护模式下,mimikatz 抓取内存中的密码将出现错误。保护模式要求所有加载到 LSA 的插件都必须使用 Microsoft 签名进行数字签名,否则就无法加载到LSA中。
通过修改注册表的值 RunAsPPL 为 1 开启 Lsass 进程 LSA Protection 保护,并进行重启。
reg add HKLMSYSTEMCurrentControlSetControlLsa /v RunAsPPL /t REG_DWORD /d 00000001 /f
在开启 Lsass 进程的Lsa Propection时,通过mimikatz 抓取密码出现报错。
有 3 种方法可以绕过 LSA 保护并转储缓存的凭据。
删除 RunAsPPL 注册表项并再次重新启动系统。然而,这不是一个实用的方法,因为一旦我们重新启动系统,我们就会丢失缓存在内存上的所有凭据。
通过修补 EPROCESS 内核结构来禁用 LSASS 进程上的 PPL 标志。PPL 保护由驻留在与目标进程关联的 EPROCESS 内核对象中的位控制。如果我们能够在内核空间中获得代码执行,我们就可以禁用 LSA 保护并转储凭据。
直接读取LSASS进程内存内容,而不是使用打开的进程函数。
还有1种方法可以绕过。即采⽤操作 SAM 的⽅式获取凭据。
privilege::debug
token::elevate
lsadump::sam
1、mimikatz驱动加载
通过加载驱动来移出 Lsa Protection,mimikatz 提供Mimidrv.sys 驱动,Mimidrv.sys 已经签名的Windows驱动模型(WDM)内核模式软件驱动程序。
privilege::debug
!+
!processprotect /process:lsass.exe /remove
2、Pplkiller
PPLKiller是一个内核模式驱动程序,它可以禁用所有正在运行的进程上的受保护进程轻保护。
PPLKiller.exe /installDriver
PPLKiller.exe /disableLSAProtection
查看本地存储的所有密码
SAM 是管理所有用户帐户及其密码的安全帐户管理器的缩写。它充当数据库。所有密码都经过哈希处理,然后存储为 SAM。LSA(本地安全机构)负责通过将密码与 SAM 中维护的数据库进行匹配来验证用户登录。Windows 启动后,SAM 即开始在后台运行。SAM 位于C:WindowsSystem32config中,散列并保存在 SAM 中的密码可以在注册表中找到,只需打开注册表编辑器并导航到HKEY_LOCAL_MACHINESAM即可。
1、mimkatz
要想从SECURITY和SAM配置单元文件中获得凭据,可以使用mimikatz从内存中读取它们。首先,你需要执行token::elevate命令来获得一个SYSTEM会话,这样就可以读取凭据了。如果需要的话,还要执行privilege::debug命令来授予SeDebugPrivilege权限。
2、Reg save命令
首先,你需要转储注册表的配置单元。为此,需要借助于SECURITY和SAM配置单元文件以及SYSTEM配置单元,因为其中包含系统Boot Key(或System Key),可用于解密SECURITY和SAM配置单元。
reg save HKLMSYSTEM system.bin
reg save HKLMSECURITY security.bin
reg save HKLMSAM sam.bin
DPAPI解密
DPAPI 提供了一组简单的 API,可以使用绑定到特定用户或系统的隐式加密密钥轻松加密 ( CryptProtectData() ) 和解密 ( CryptUnprotectData() )不透明数据“blob”。这允许应用程序保护用户数据,而不必担心密钥管理之类的事情。对于Windows系统,用户的加密数据大都采用DPAPI进行存储,而想要解密这些数据解,必须要获得DPAPI对应的MasterKey。本文将会介绍在获得了Windows系统的权限后获得MasterKey的方法,同时分析Preferred文件格式,延长MasterKey的有效期。
获取masterkey的几种方法。
1、mimikatz获取
通过读取Lsass进程信息,获取当前系统中的MasterKey,能获得多个Master Key file对应的MasterKey。
privilege::debug
sekurlsa::dpapi
2、离线获取
先将注册表中保存的文件复制下来。
reg save HKLMSYSTEM SystemBkup.hiv
reg save HKLMSECURITY SECURITY.hiv
然后使用mimikatz从注册表文件中获得DPAPI_SYSTEM。
lsadump::secrets /system:SystemBkup.hiv /security:SECURITY.hiv
得到DPAPI_SYSTEM中的user hash,然后用来解密位于%WINDIR%System32MicrosoftProtectS-1-5-18User下的系统Master Key file。
普通域用户
枚举SMB共享
SMB全称是Server Message Block(服务器消息块),又称网络文件共享系统,是一种应用层网络传输协议。SMB被广泛地应用于在计算机间共享文件、端口、命名管道和打印机等。系统上的不同应用程序可以同时读取和写入文件,并向服务器请求服务。 此外,SMB可以直接在TCP/IP或其他网络协议上运行。通过SMB,用户或任何经授权的应用程序都可以访问远程服务器上的文件或其他资源,并且可以执行读取、创建和更新数据等操作。
通常,服务器上有SMB共享驱动器,可以连接到该驱动器并用于查看或传输文件。
接下来介绍这种方法来进行枚举域控的smb共享。
1、Crackmapexec
CrackMapExec(CME)是一款后渗透利用工具,可帮助自动化大型活动目录(AD)网络安全评估任务。
crackmapexec smb <IP> -u-p–shares
2、smbclient
smbclient工具可以用于访问和操作共享文件夹、上传和下载文件,以及执行各种与SMB协议相关的操作。它可以通过命令行界面(CLI)进行操作,并提供了多种选项和参数,使用户能够定制其行为以满足特定需求。
smbclient ///tmp -U username%password
域信息收集
1、Bloodhound
BloodHound 使用图论来揭示 Active Directory 或 Azure 环境中隐藏的且通常是无意的关系。攻击者可以使用 BloodHound 轻松识别原本无法快速识别的高度复杂的攻击路径。防御者可以使用 BloodHound 来识别并消除这些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入地了解 Active Directory 或 Azure 环境中的权限关系。
sharphound.exe -c all
2、Adexplorer
Active Directory Explorer(AD Explorer)是微软的一款域内信息查询工具,它是独立的可执行文件,无需安装。它能够列出域组织架构、用户账号、计算机账号等,可以帮助你寻找特权用户和数据库服务器等敏感目标。
ADExplorer.exe -snapshot “” result.dat /accepteula
kerberoasting攻击
当域内用户去请求域内某个服务资源时,先会通过AS进行身份认证,通过后会返回一个用用户密码hash加密的TGT给用户,用户拿着TGT向TGS去请求,TGS会返回一个用对应服务账号的密码hash加密过的专门用于访问特定服务的服务票据回来,只要用户提供的票据正确,服务就会返回自身hash加密的tgs票据。那么如果我们有一个域用户,就可以申请服务的tgs票据,本地爆破服务hash得到服务密码,kerberos协议使用的加密可以使用y=f(x,key)来表示,算法f为已知的对称加密算法如rc4_hmac_nt,密钥key为ntlm值,待加密数据x为用户名,主机IP,和当前时间戳等,当获取到y即加密后的数据(tgs票据),即可爆破密钥,密钥越简单,被破解的几率越大,这个过程叫做Kerberoasting。
impacket-GetUserSPNs atest.com/zawx:hongrisec@1001 -dc-ip 192.168.100.75 -request
#hashcat破解
hashcat -m 13100 hashes.txt wordlist.txt
ms14-068
Kerberos 域用户提权漏洞(MS14-068,CVE-2014-6324),影响版本 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。
该漏洞最本质的地方在于Microsoft Windows Kerberos KDC无法正确检查Kerberos票证请求随附的特权属性证书(PAC)中的有效签名,这里面的签名就是上面提到的服务检验和以及KDC校验和。导致用户可以自己构造一张PAC。 签名原本的设计是要用到HMAC系列的checksum算法,也就是必须要有key的参与,我们没有krbtgt的hash以及服务的hash,就没有办法生成有效的签名,但是问题就出在,实现的时候允许所有的checksum算法都可以,包括MD5。那我们只需要把PAC 进行md5,就生成新的校验和。这也就意味着我们可以随意更改PAC的内容,完了之后再用md5 给他生成一个服务检验和以及KDC校验和。在MS14-068修补程序之后,Microsoft添加了一个附加的验证步骤,以确保校验和类型为KRB_CHECKSUM_HMAC_MD5。
printNightmare漏洞
CVE-2021-1675/CVE-2021-34527 PrintNightmare 是 RpcAddPrinterDriver 中的一个漏洞,该漏洞用于允许远程打印和驱动程序安装。该函数旨在为具有 Windows 特权 SeLoadDriverPrivilege 的用户提供向远程打印池添加驱动程序的能力。这个权限通常保留给内置 Administrators 组和可能有合法需要在远程终端用户机器上安装打印机驱动程序的 Print Operators 组的用户。
这个漏洞允许任何经过身份验证的用户在没有上述特权的情况下向 Windows 系统添加打印驱动程序,从而使攻击者能够在受影响的系统上完全远程执行代码,权限为SYSTEM。该漏洞影响了所有受支持的 Windows 版本,由于打印机默认在域控制器、Windows 7 和 10 上运行,并且通常在 Windows 服务器上启用,因此存在广泛的攻击面。
NTLM Relay
在攻击过程中,拿到并破解Net-NTLM V1值很容易。但是当拿到Net-NTLM V2时破解难度大大上升,成功与否取决于密码字典的强度,这时候可以通过relay的方式尝试攻击。
NTLM Relay又称中间人攻击、NTLM重放攻击(从客户端角度来看,攻击者的机器是它想要进行身份验证的服务器。从服务器角度来看,攻击者的机器是进行身份验证的客户端),攻击者截取认证相关报文,对报文进行一系列的修改再发送给目标主机从而获取访问真正服务器的权限。
在NTLM Relay攻击中要触发客户端Client对攻击者Attack的认证,一种方法是通过钓鱼的方式诱导客户端对攻击者发生认证,另一种方法则采用强制认证的方式,如printbug(spools)、petitpotam、dfscoerce(netdfs)、shadowcoerce(FssagentRpc)、coercer。
证书服务器攻击
在2021年的BlackHat大会上,由Will Schroeder和Lee Christensen发布了关于Active Directory Certificate Services 利用白皮书《Certified Pre-Owned – Abusing Active Directory Certificate Services》,其中包含了大量的针对ADCS的攻击手法,通过对ADCS的攻击,将域渗透的攻击面扩展到了最大。尽管ADCS并不是默认安装在域环境中,但是在一些大型企业的域环境中却被广泛部署。
1、ESC1(配置错误的证书模板允许请求者指定 SAN)
颁发CA授予低权限用户请求权限(默认)
模板中CA管理员审批未启用(默认)
模板中不需要授权的签名(默认)
模板允许低权限用户注册
模板定义了启用认证的EKU
证书模板允许请求者在CSR中指定一个SAN
满足上面条件时,当攻击者在请求证书时可以通过
CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT字段来声明自己的身份,从而获取到伪造身份的证书。
2、ESC2(证书模板可用于任何目的)
为了滥用ESC2,必须满足以下条件:
企业CA(Enterprise CA)授予低特权用户注册权限。和ESC1相同
经理批准被禁用。细节与ESC1相同
不需要授权签名。细节与ESC1相同
过于宽松的证书模板安全描述符将证书注册权限授予低特权用户。细节与 ESC1 相同
证书模板定义 Any Purpose EKUs 或没有 EKU
3、ESC3(配置错误的注册代理模板)
模版一为颁发“注册代理”证书
颁发CA授予低权限用户请求权限
模板中CA管理员审批未启用
模板中不需要授权的签名
模板允许低权限用户注册
证书模板中定义了证书请求代理EKU(1.3.6.1.4.1.311.20.2.1)
4、ESC4(易受攻击的证书模板访问控制)
证书模板是 AD 中的安全对象,这意味着它们具有安全描述符指定哪些 AD 主体对模板具有特定权限。如果模板具有允许非特权的AD主机编辑权限,那么此模板便可面临攻击。
如果攻击者对模板对象拥有writeProperty权限,可以修改模板AD对象属性,则可以将错误配置写到模板中,例如允许域成员在mspki-certificate-name-flag属性中启用CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT标志,则与ESC1具有相同的滥用场景。
5、ESC5(易受攻击的PKI访问对象控制)
当涉及到ADCS的安全性时,访问控制列表(ACL)之间的相互关系是一个复杂而广泛的网络,这个网络的影响范围很大。证书模板和证书颁发机构本身之外的几个对象可能会对整个ADCS系统产生安全影响。这些可能性包括但不限于:
CA服务器的AD计算机对象(例如,通过S4U2Self或S4U2Proxy进行的攻击)
CA服务器的RPC/DCOM服务
在CN=Public Key Services,CN=Services,CN=Configuration,DC=
,DC=容器中,任何子对象容器都会影响ADCS的安全性(例如证书模板容器、CA容器、NTAuthCertificates 对象、注册服务容器等)
如果一个低权限的攻击者获取到其中任意一个的控制权,则可能会影响到整个PKI系统的安全性。
6、ESC6
(启用EDITF_ATTRIBUTESUBJECTALTNAME2标志)
在企业内部,为了保证网络通信的安全性,使用内部PKI为Web服务器颁发证书是一种常见的做法。管理员通常希望在这些证书中添加额外的主机名,这可以通过允许提供 SAN 请求属性(在 CA 上设置 +EDITF_ATTRIBUTESUBJECTALTNAME2 标志)来实现。
根据微软的描述”If this flag is set on the CA, any request (including when the subject is built from Active Directory) can have user defined values in the subject alternative name” ,如果设置了此标志位攻击者可以为任意的域用户注册证书。
7、ESC7(易受攻击的证书颁发机构访问控制)
除证书模板外,CA自身也有一组权限,用于保护各种CA动作。运行框输入certsrv.msc打开CA,右击属性,打开安全。设置一个账户拥有颁发和管理证书与管理CA的权限账户。
然后用PSPKI模块的Get-CertificationAuthority | Get-CertificationAuthorityAcl 进行枚举CA的ACL。可以看到test1 具有颁发和管理CA权限。
8、ESC8(NTLM中继到ADCS)
在上篇文章中我们可以通过web的方式来注册证书,但是在默认的情况下,web证书注册页面仅支持HTTP协议,支持NTLM身份验证,并且没有启用任何NTLM Relay保护措施。
如果我们强制域控制器的机器账户向攻击者的服务器发起NTLM身份验证,再将域控制器NTLM验证请求Relay到ADCS Web界面,就可以为域控制器申请一个AD 证书,我们使用这个证书即可以域控制器的名义进行域身份验证,并获得域控制器所拥有的特权。
CVE-2021-42287/CVE-2021-42278
默认常识情况加入域的主机所创建的机器账户应该由$结尾,但存在漏洞的情况下,DC并没有一个对于sAMAccountName属性的验证过程,所以我们利用ms-ds-machineaccountquota,这一默认的特性就可以创建没有$结尾的机器账户。CVE-2021-42278,机器账户的名字一般来说应该以$结尾,但AD没有对域内机器账户名做验证。CVE-2021-42287,与上述漏洞配合使用,创建于DC机器账户名字相同的机器账户(不以$结尾) ,账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在TGS_REP阶段,这个账户不存在的时候,DC会使用自己的密钥加密TGS Ticket,提供一个属于该账户的PAC,然后我们就得到了一个高权限ST。
03拥有账户名和hash场景
hash破解
当目标计算机采用ntlmv1身份验证协议时,我们就可以尝试利用responder,强制认证等手段获取ntlmv1然后进行破解。
PTH攻击
Windows是不会记录明文密码的,所以我们只需要获取到目标的NTLM Hash之和用户名,就可以成功登陆,因为NTLM Hash登陆需要Challenge,而Challenge是服务端发送给我们客户端的,我们无需构造,所以就造成了一个”逻辑漏洞的缺陷”。
Psexec
psexec是windows下非常好的一款远程命令行工具。psexec的使用不需要对方主机开启3389端口,只需开启admin$共享或者c$(该共享默认开启,依赖于445端口)。假如目标主机开启了防火墙(默认禁止445端口的连接),psexec是不能使用的,会提示找不到网络路径。
原理:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为”PSEXESVC”的二进制文件。然后通过psexec服务运行命令,运行结束后删除服务。
wmiexec
Windows Management Instrumentation (WMI) 是 Microsoft 对基于 Web 的企业管理 (WBEM) 和通用信息模型 (CIM) 标准的实现。它首先随 Windows 2000 和 Windows Server 2003 一起发布。提供了一组接口,允许管理员在本地或远程监视和控制大多数 Windows 资源。
特别地,WMI 包含一个 Win32_Process 类,用于表示进程。可以通过调用该类的 Create 方法来生成一个新进程。
需要具有管理员权限(或至少具有对 rootcimv2 命名空间的 Execute Method 和 Remote Enable 权限)以通过这种方式远程生成命令。
dcomexec
分布式组件对象模型(DCOM)是一种远程协议,通过远程过程调用(RPC)公开应用程序对象,并由一组构建在Microsoft远程过程调用扩展之上的扩展组成。
有许多应用程序提供了暴露并允许远程命令执行的技术,其中包括MMC20、ShellBrowserWindow、ShellWindows、Excel等等。其中最著名的是MMC(Microsoft Management Console)执行技术,该技术在Impacket中的dcomexec.py中得到实现。
atexec
Microsoft Windows提供机制来执行计划任务。可以通过命名管道atsvc或TCP命名管道ITaskSchedulerService远程创建计划任务。
这可以被攻击者利用以执行远程命令。Impacket中的atexec.py工具创建一个新的立即运行的计划任务,具有最高权限(SYSTEM),执行一个命令。默认情况下,该命令被包装在cmd.exe中,以便将命令的输出重定向到临时文件。通过SMB连接检索、读取和销毁此文件。
04拥有票据场景
Kerberos 是一种网络身份验证协议,旨在确保安全的身份验证和数据通信。Kerberos的三方认证角色分别为客户端(通常为PC)、Kerberos 认证服务器、应用服务器。
域内Kerberos通信可以简化为以下的流程图。
票据伪造
从上面讲的Kerberos里TGT和ST的认证流程里,我们可以看出来,在TGT由krbtgt用户的NTLM哈希来进行加密,还包含了一些客户端信息,在域内,这部分客户端信息对用户来说是已知的,如果我们知道krbtgt用户的哈希,就可以对TGT进行伪造。同样的,如果我们知道应用服务器的NTLM哈希,也可以对ST进行伪造。
1、KDC在TGT颁发的前二十分钟不验证TGT中的用户账户,所以即使用户名不存在也可以。
2、默认生成的TGT生存周期为10小时,这个时间是可以修改的。
3、申请票据不一定要在域内。
黄金票据伪造
需要的数据:
1、域名(adtest.com)
2、域SID(S-1-5-21-3869672703-1254629198-282499905)
3、krbtgt账户的NTLM哈希(aad3b435b51404eeaad3b435b51404ee:6dd18cc95f8869e6bc4c22e00268bff7)
4、用于伪造的用户名
mimikatz.exe “privilege::debug” “kerberos::golden /user:用户名 /domain:域名 /sid:域SID /krbtgt:krbtgt用户哈希 /ticket:tes.kirbi” “exit”
mimikatz.exe “privilege::dbeug” “kerberos::ptt 票据文件名称” “exit”
白银票据伪造
白银票据,也就是我们用于请求应用服务器的ST,参与ST生成的包括了应用服务器的NTLM哈希、应用服务器名称、服务名。
需要的数据:
1、域名(adtest.com)
2、域SID(S-1-5-21-3869672703-1254629198-282499905)
3、应用服务器的NTLM哈希(aad3b435b51404eeaad3b435b51404ee:636e46ec1beaa41a10463f855292364c)
4、用于伪造的用户名
5、服务名称(cifs、LDAP等)
mimikatz.exe “privilege::debug” “kerberos::golden /domain:atest.com /target:应用服务器的DN /sid:域SID /service:服务名 /rc4:应用服务器的NTLM哈希 /user:用户名 /ptt”
委派
域委派是指将域内用户的权限委派给服务账户,使得服务帐户可以用用户权限开展域内活动。
域内可以委派的账户有两种,分别是主机账户和服务账户。其中,域用户可以通过注册SPN的方式来成为服务账户。
注:以下为了书写方便,委派的服务简称服务1,访问的服务简称服务2,即:用户–委派–>服务1–访问–>服务2。
非约束委派
是微软最早使用的委派机制,其提出是为了解决双跳问题(即通过中间机器访问其他服务)。
当配置了非约束委派之后,代表着服务1可以接受任何用户的委派去访问其他服务。在协议层的实现就是用户将自己的TGT转发给服务1,服务1将其缓存到自己的lsass中,然后模拟用户去请求其他的服务。
利用:
如果我们拿下了配置非约束委派的机器,我们可以诱导域管账户访问该机器,此时域管账户就会将自己的TGT发送并缓存到机器的lsass中我们可以通过PTT来获取域管权限,常见方法如打印机漏洞等。
事实上非约束委派平时的利用情况较少,且主流的利用工具例如打印机漏洞等受限于各种.net环境,很容易出现各种意料之外的情况。
约束委派
微软在很早的时候就意识到非约束委派不是特别安全,于是在Windows2003上发布了约束委派。它由一组拓展协议组成(S4U2Self和S4U2Proxy)配置了约束委派的服务1只能代表用户访问特定的服务2,且此时用户不再发送自己的TGT认证。
配置约束委派需要SeEnableDelegation权限,该权限很敏感,通常授予域管账户S4U2Self:负责协议转换。它允许用户通过Kerberos以外的身份进行认证(例如web、证书),并在用户的身份验证通过之后以自己的名义向KDC请求访问自己的票据(S4U2Self票据),然后响应用户请求。
注:此处用户只需要向服务1提供身份认证、向KDC请求时提供部分信息即可。
S4U2Proxy:负责代理访问。尽管S4U2Self可以达到模拟用户访问,但是此拓展不允许服务1向其他服务申请资源,而S4U2Proxy很好的解决了这个问题。在用户向服务1请求服务2时,服务1利用S4U2Self生成的针对自己的票据来向KDC请求访问服务2的票据,得到返回的票据之后利用票据访问服务2,此时对于服务2来说等同于被用户访问。
利用:
在S4U2Self认证这一步,用户只需要向服务1证明身份而无需访问KDC。因此当我们拿下服务1时,我们可以伪造任意用户来向KDC请求票据,从而以任意用户来访问被配置约束委托的服务2。
基于资源的约束委派
前面提到配置约束委派时必须拥有SeEnableDelegation特权,该特权通常授予域管理员。为了使用户和资源更加独立,微软引入了基于资源的约束委派。基于资源的约束委派只能在运行 Windows Server 2012 R2 和 Windows Server 2012 及以上的域控制器上配置,但可以在混合模式林中应用。
和前面的约束委派过程类似,主要区别在于约束委派在服务1的msDS-AllowedToDelegateTo属性中配置服务2,并定义委派由服务1—>服务2。
而基于资源的约束委派则在服务2msDS-AllowedToActOnBehalfOfOtherIdentity属性中配置服务1,定义服务1—>服务2。因为基于资源的约束委派仅仅需要修改自身的属性,所以我们只需要机器用户的修改权限即可。
利用:
利用方法和约束委派类似,同时更加方便。因为约束委派只能控制固定的机器,而基于资源的约束委派可以控制所有我们拥有修改权限的机器。
本篇文章,我们从无凭据场景、拥有账户名和密码场景、拥有账户名和hash场景、拥有票据场景4个维度分析了AD攻击面。希望这些内容,能对你有所帮助。
《ITDR之集权设施攻击》技术白皮书,点击公众号下方“阅读原文”获取!
原文始发于微信公众号(网星安全):集权系列科普 | 想了解AD&攻击面?独家干货放送(下)