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

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

C++实现俄罗斯方块(Windows控制台版)

C++实现俄罗斯方块(Windows控制台版) 在油管上看到一个使用C++控制台编写的俄罗斯方块小游戏,源代码200多行,B站上也有相关的讲解视频,非常不错,值得学习。 B站讲解视频地址为:【百万好评】国外技术大神C++游戏编程实战教程,油管580W收藏,新手10小时入门,并快速达到游戏开发能力(中英字幕) B站 CSDN博主千帐灯无此声还为此写了一篇博客:C++实现俄罗斯方块(源码+详解),讲

Windows下php扩展开发c++动态库

PHP扩展开发,从零了解到初步完成一个小项目,经过三天的仔细研究,现整理如下 一、需求介绍 PHP扩展开发,调用自己之前的c++动态库,完成功能 二、项目之前 系统:windows xp  开发工具:vs 2008 web环境:apache2.4  PHP5.3.29-VC9-ts-x86 aphach和PHP 环境之前已经搭建完成 PHP源码:去官网http://www.php.n

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版