Windows认证/白银票据

2024-02-21 12:10
文章标签 windows 认证 白银 票据

本文主要是介绍Windows认证/白银票据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Window认证学习笔记

(by 12306Bro)

前言

因为疫情导致在家办公,正好可以利用这段时间提升一下自己,所以打算学习一下Windows认证。

windows认证

    Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

整个认证过程需要以下设备:
客户端(Client)
服务端(Server)
认证端(KDC) kerberos认证服务器称KDC,它是由 Authentication Service 和 Ticket Granting Service 组成,但是它会访问 AD数据库,在认证中会需要到。
在这里插入图片描述

  1. 客户端向AS请求

    首先client会先向DC(KDC>AS)发送请求,但是为了保证传输安全,客户端会使用已登录用户(user1)的Hash加密请求包中的timestamp(时间戳)部分,而域中所有用户的信息(包括hash)都保存在AD(NTDS.DIT)中,这样就只有DC和客户端可以对请求包进行解密,请求包中需要包含的内容有:
    发送内容① :[Pre-authentication data(client is ntlm_hash for Timestamp),Client name & realm(DomainName\Username),Server Name(KDC TGS NAME)]

    Pre-authentication data:被客户端加密的timestamp内容
    Client name & realm:客户端用户名,如user1/h0r2yc.cn
    Server Name:KDC、TGS 的 Server Name。

  1. AS认证通过后发送TGT给客户端

    DC(KDC>AS)接收到client发来的请求包后,会根据请求包中的用户名(user1)向AD请求user1对应的hash,然后用hash解密出timestamp,如果解密出的timestamp和当前时间未超过5min,验证通过,KDC会生成一个使用user1的hash加密的logon session key,以及一个用krbtgt(用于 Kerberos 身份验证的账户) hash加密的TGT,然后发送给客户端,TGT的有效期为8个小时。

    发送内容②:[Client_ntlm_hash(K(c,tgs))],[Krbtgt_ntlm_hash(k(c,tgs),Client_name(DomainName\Username),TGT_EndTime)]

    Logon Session Key:会话凭证
    Client name & realm:客户端用户,如user1
    End time: TGT到期的时间

    客户端接收到数据,使用user1 hash解密出logon session key,但是TGT使用krbtgt hash加密,客户端没有对应的hash所以没办法解密。有了logon session key就可以进行第三步。
    TGT里面包含PAC,PAC包含Client的sid,Client所在的组。注释:PAC的全称是Privilege Attribute Certificate(特权属性证书)。不同的账号有不同的权限,PAC就是为了区别不同权限的一种方式。
    大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以完全伪造PAC。

  1. 客户端向TGS发送TGS请求包

    client接收到DC(KDC>AS)发送回来的数据后,client拿着自己加密的Session_key和TGT凭证向票据生成服务器(TGS)发起一个认证请求(KRB_TGS_REQ)。

    发送内容③ :[Session_key(Authenticator([DomainName\Username,ServerName(DomainName\Server)]))],[TGT]

    TGT:通过向AS请求获得的TGT
    Authenticator:客户端使用logon session key加密的联络暗号
    Client name & realm:客户端用户,如user1
    Server name & realm:客户端要访问的服务端的用户名
    Pre-authentication data:被客户端加密的timestamp内容

  1. TGS认证通过后发送Ticket以及session key
        TGS接收到client发来的请求后,使用krbtgt hash解密TGT得到logon session key,在使用logon session key解密Authenticator得到联络暗号,认证通过。认证通过后TGS生成使用logon session key加密的session key(session key用于客户端和server进行通讯),再生成一个使用user2 hash加密的ticket,然后发送给客户端。

    发送内容④ :k(c,tgs)加密[Session_key],[Server_ntlm_hash(Tiket(K(c,s),Client_Name(domainName\Username),TGT_EndTime))]

    Session Key:用于客户端和server通讯的key。
    Client name & realm: 客户端用户,如user1
    End time: Ticket的到期时间

  1. 客户端向server发送请求

    client接收到数据后,使用logon session key解密出session key,有了session key和Ticket后,就可以直接与server进行交互,无需再通过KDC认证。这时候client创建一个使用session key加密的Authenticator和timestamp(时间戳),然后client将加密过的timestamp、Authenticator以及ticket,还有一个询问是否需要双向验证的flag发送给server。

    发送内容⑤:K(c,s)加密[Authenticator([DomainName\Username,ServerName(DomainName\Server)])],[Tiket]

  1. server验证通过允许访问

    server接收到请求包后,使用user2 hash解密Ticket得到session key,再使用session key解密Authenticator和timestamp,如果timestamp和当前时间不超过5min,验证通过,允许访问。

    发送内容⑥:K(c,s)加密[Authenticator]

白银票据分析及利用

    白银票据是一个有效的票据授予服务(TGS)Kerberos票据,因为Kerberos验证服务运行的每台服务器都对服务主体名称的服务帐户进行加密和签名。
    白银票据主要是发生在第五步骤上。

  1. 首先我们尝试访问目标服务器根目录
    在这里插入图片描述
        访问主域控文件共享,可以看到是无法访问的,说明当前用户密码存在问题,也可以理解为无权限。

  2. 用域管理账号登录主域控,使用工具mimikatz.exe执行命令抓取hash(在域控中执行):

#mimikatz.exe “privilege::debug” “sekurlsa::logonpasswords” exit>log.txt

在这里插入图片描述

  1. 在Client端查看SID号(在Cient端执行),复制并保存,也可以根据上一步mimikatz导出的文件中找到。
    在这里插入图片描述

  2. 将在域控上抓取的hash也就是NTML值的复制到Client端,打开mimikatz.exe工具(在Cient端执行),创建票据命令:

#kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt

在这里插入图片描述

kerberos::golden:使用minikatz中票据的功能
/domain:指定域名
/sid:Client端查询的sid号,在域控中查询也可以,都是一样的
/target:主域控中的计算机全名
/rc4:在域控中抓取的hash(NTLM)
/service:需要伪造的服务(cifs只是其中的一种服务,可伪造的服务很多)
/user:需要伪造的用户名(可自定义)
/ppt:伪造了以后直接写入到内存中
  1. 执行了后如果提示successfully表示伪造的白银票据成功写入到内存中。可以通过kerberos::list来查看
    在这里插入图片描述
  2. 打开Client的cmd来执行共享文件查看,可以看到是可以成功查看域控c盘下的文件,并且此时权限也是最高的权限。
    在这里插入图片描述
    白银票据可伪造服务类型
服务注释服务名
WMIHOST、RPCSS
Powershell RemoteingHOST、HTTP
WinRMHOST、HTTP
Scheduled TasksHOST
WMIHOST、RPCSS
LDAP 、DCSyncLDAP
Windows File Share (CIFS)CIFS
Windows Remote Server Administration ToolsRPCSS、LDAP、CIFS

检测白银票据利用行为

银票活动可能具有以下问题之一:
帐户域字段应为DOMAIN时为空白
帐户域字段应为DOMAIN时为DOMAIN FQDN。
事件ID:4624(帐户登录)
帐户域是FQDN,应为短域名
帐户域:LAB.ADSECURITY.ORG [ADSECLAB]
事件ID:4634(帐户注销)
帐户域为空,应为短域名
帐户域:_______________ [ADSECLAB]
事件ID:4672(管理员登录)
帐户域为空,应为短域名
帐户域:_______________ [ADSECLAB]

不过根据本人测试采集到的日志信息,未发现此类异常日志。可能是哪里存在问题,欢迎大佬们指点

白银/黄金区别

  1. 访问权限不同
    Golden Ticket: 伪造 TGT,可以获取任何 Kerberos 服务权限
    Silver Ticket: 伪造 TGS,只能访问指定的服务

  2. 加密方式不同
    Golden Ticket 由 Kerberos 的 Hash 加密
    Silver Ticket 由服务账号(通常为计算机账户)Hash 加密

  3. 认证流程不同
    Golden Ticket 的利用过程需要访问域控,而 Silver Ticket 不需要

参考链接

白银票据与黄金票据探究:
http://sh1yan.top/2019/06/03/Discussion-on-Silver-Bill-and-Gold-Bill/

windows认证-白银票据、黄金票据分析及利用
http://www.h0r2yc.cn/2019/08/17/windows认证-白银票据、黄金票据分析及利用/

[域渗透] - Pass the Ticket之金票&银票
http://www.test666.me/archives/264/

这篇关于Windows认证/白银票据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731729

相关文章

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议