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

相关文章

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

浅析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