windows域为了集中资源,有效地对资源访问控制权限进行细粒度分配,提高网络资源统一分配的管理.域内的每种资源分配了不同的服务主体名称(SERVICE Pricipal Name,SPN)

相关概念

keberos协议进行身份验证的网络中,内置账号或者用户账号下为服务器注册SPN.对于内置账号,SPN进行自动注册

如果在域用户账号下运行服务,必须要为使用账号手动注册SPN.

域环境中的每台服务器都需要在kerberos身份验证服务中注册SPN,攻击者可以直接向域控制器发送查询请求,从而知道需要使用的服务资源在哪台机器上.

根据kerberos协议,用户输入自己的账号密码登录活动目录的时候,域控制器会对账号和密码进行验证.验证通过后,密钥分发中心(KDC)会将服务授权的票据TGT发送给用户作为用户访问资源的身份凭据

例子

当用户访问mssql服务,系统以当前身份向域控查询SPN=mssql的记录.找到SPN后,再次与KDC通信,将KDC发放的TGT作为身份平局发送给DKC,并将访问的SPN发送给KDC.KDC中的身份验证服务AS对TGT进行解密.再用TGS将一张允许访问该SPN对应的服务票据和该SPN所对应的服务地址发送给用户.用户根据此票据访问相应的mssql服务

SPN命令格式

SPN= serviceclass "/" hostname [":"port} "/" servicename]

serviceclass 服务组件名称  必选参数

hostname 计算机的FQDN  必选参数

port :冒号分隔,该服务监听的端口号

mssql服务实例

MSSQLSVC/computer1.pentest.com:1433

exchange服务 -- exchangeMDB/EXCAS01.pentest.com

RDP --- TERMSERV/EXCAS01.tentest.com

用于SPN扫描的powershell脚本

在活动目录中发现服务的最佳方法就是SPN扫描.SPN扫描通过请求特定SPN类型的服务主体名称查找服务.与网络端口扫描相比,SPN扫描主要特点是不需要通过链接网络中的每个IP地址来检查服务端口(不会出发内网中的IPS和IDS而产生告警)

Powershell-AD-Re工具提供了服务与服务登录账号,运行服务的主机之间的对应,包括但不限于mssql,exchange,rdp,winrm.

1.利用SPN发现域内所有mssql服务
import-module .\Discover-SMSSQLServers.ps1
Discover-SMSSQLServers
2.扫描域中的所有SPN信息
import-module .\discover-psinterrestingServices
Discover-PSInterestingServices

不使用脚本列出windows存在的spn信息

setspn -T domain */*

kerberoast攻击

需要使用某个特定资源向TGS发送kerveros服务票据请求,用户首先得具有有效身份权限的TGT向TGS请求相应服务的票据.当TGT被验证有效并且具有该服务权限时,会向用户发送一张票据.

这张票据使用与SPN相关俩的计算机服务账号的NTLM HASH (RC4_HMAC_MD5)也就是说,攻击者通过kerberoast尝试使用不同的ntlm hash打开票据.如果ntlm hash正确 就可以打开

成因:大多数是因为域环境策略不够严格(没有给计算机服务账号设置密码过期时间服务账号的权限过高;计算机账号的密码与普通域用户账号密码相同),因此计算机服务账号的密码很容易收到keberoast的攻击

实验

1.手动配置spn服务

setspn -A 服务名称(可以在services.msc中查看服务属性后的服务名称看到)/域的FQDN:port 运行用户

setspn -A TermService/computer1.hacktb.com:7778(选填) hacktb(运行账户的名称)   
#查看用户运行了什么服务
setspn -L hacktb.com/hacktb
#列出所有spn服务
setspn -T domain -q */*

2.配置指定服务的登录权限

修改组策略的windows-安全选项/本地策略 用户权限分配 ---以服务登录

3.修改加密类型

windows-安全选项/本地策略 安全选项 --服务选项 网络安全

4.powershell请求票据

add-type -assemblyName system.identitymodel
#解析

使用add-type -assemblyName system.identitymodel可以将IdentityModel程序集引入当前脚本或会话中,以便在脚本中使用其中的类和方法。这通常用于开发需要身份验证、身份验证和授权的应用程序。

该命令由以下两个部分组成:

- add-type:PowerShell命令,用于将指定程序集添加到当前会话的运行时中。
- -assemblyName system.identitymodel:指定需要添加的程序集名称,这里是IdentityModel程序集。通过此参数,PowerShell可以找到并加载程序集。

此命令的目的是将IdentityModel程序集加载到PowerShell中,以便在脚本中使用其中的类和方法。

new-object system.identitymodel.tokens.kerberosRequestor securitytoken -argumentlist "TermService/computer1.hacktb.com"
#解析

new-object system.identitymodel.tokens.kerberosRequestor securitytoken -argumentlist "TermService/computer1.hacktb.com" 是一个PowerShell命令,用于创建一个kerberosRequestor对象,该对象可用于在Windows身份验证确认协议中请求Kerberos令牌。此命令的参数解释如下:

- new-object:PowerShell中的内置命令,用于创建一个新的.NET对象。
- system.identitymodel.tokens.kerberosRequestor:KerberosRequestor类的完整名称,表示我们要创建的对象的类型。
- securitytoken:构造函数的参数名称,用于传递从安全性令牌中获得的令牌数据。这个参数是自定义的
- -argumentlist:用于将参数值传递给新对象构造函数的参数名称。

在这个命令中,我们创建了一个KerberosRequestor对象,并将一个由字符串“TermService/computer1.hacktb.com”表示的服务主体名称作为参数传递给它。这将用于创建Kerberos认证请求,以便我们可以获取与此主体相关的Kerberos令牌。这个命令的实际效果取决于您当前的程序集环境,以及在创建时提供的参数值。

5.mimikatz导出票据

kerberos::list /export

导出保存到当前目录下的一个kirbi文件,加密方式为RC6_HMAC_MD5

6.使用kerberoast脚本破解对应账号的ntlm hash

python tgsrepcrack.py 离线破解票据的ntlm hash

python tgsrepcrack.py wordlsit.txt mssql.kirbi

SPN在域环境的应用的更多相关文章

  1. SPN在域环境中的应用

    0X01 SPN    服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称.Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联.如果 ...

  2. 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法

    非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...

  3. 非域环境下使用证书部署数据库(SqlServer2008R2)镜像

    非域环境下使用证书部署数据库(SqlServer2008R2)镜像 前言 部署数据库镜像一般有两种方式域环境下部署http://liulike.blog.51cto.com/1355103/33918 ...

  4. 无域环境下,VCENTER5.5 更改IP后 无法登陆异常修复

    转自http://bbs.vmsky.com/forum.php?mod=viewthread&tid=45593&highlight=vcenter%2Bip 由于没有域环境,SSO ...

  5. 域环境下装SQL SERVER的一次惨痛经历

    SQL SERVER 2008 R2 其实sql server不建议装在域环境下的,但sharepoint必须用域用户来连接.这本来也不是个什么大问题,但是,这一次相当的不顺利哦. 我有单独的域控,单 ...

  6. AD域环境的搭建 基于Server 2008 R2

    AD(Active Directory)即活动目录,微软的基础件.微软的很多产品如:Exchange Server,Lync Server,SharePoint Server,Forefront Se ...

  7. 第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

    本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/ ...

  8. 第三篇——第二部分——第三文 配置SQL Server镜像——域环境

    原文:第三篇--第二部分--第三文 配置SQL Server镜像--域环境 原文出处:http://blog.csdn.net/dba_huangzj/article/details/28904503 ...

  9. 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...

  10. Office 365实现单点登录系列(1)—域环境搭建

    Hello 小伙伴们, 2018新年快乐,作为2018年首篇文章,怎么能不给大家带来点干货呢?这篇文章其实我9月底的时候已经在MSDN上发布过了,为表诚意,我更新了这篇文章,并把它组成了一个系列,2. ...

随机推荐

  1. cookies、session、token

    cookies 当登录的时候这个set-cookies就是把cookies的数据保存到了客户端的application/cookies中 session 表示为会话,存放在服务端,当用户登录,服务器就 ...

  2. 117、商城业务---分布式事务---RabbitMQ延时队列

    1.定时任务存在的问题 即任务过期时间为30min,任务在第31min过期,但是在第60分钟才被扫描到 2.延时队列 是先设置一个过期队列,里面消息过期后不会丢弃而是通过交换机放到另一个队列中.从这个 ...

  3. Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types

    翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论. 类型在内存中的表示 Rust中的每一个值都有自己的类型(Type).在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其 ...

  4. 微信小程序-顶部下拉菜单实现

    最近写的小程序里面需要实现顶部下拉菜单的效果,做一个过滤操作,但是没有找到相关组件,所以动手写了一个. 先看一下这拙劣的效果叭~ 下面就直接看具体实现了嗷! index.wxml <view c ...

  5. linux 打包各种后缀的命令

    01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...

  6. ssh基于主机名访问

    登录一台服务器我们可以用ssh user@IP这种方式 还有一种快捷的方式,就是基于主机名访问,这需要先配置 /etc/hosts文件 假如我们又两台主机 192.168.75.131/165 分别为 ...

  7. 一文快速回顾 Servlet、Filter、Listener

    什么是Servlet? 前置知识: Web 服务器:可以指硬件上的,也可以指软件上的.从硬件的角度来说, Web 服务器指的就是一台存储了网络服务软件的计算机:从软件的角度来说, Web 服务器指的是 ...

  8. 痞子衡嵌入式:盘点国内RISC-V内核MCU厂商(2021年发布产品)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内RISC-V内核MCU厂商(2021). 虽然RISC-V风潮已经吹了好几年,但2019年才是其真正进入主流市场的元年,最近国内大量 ...

  9. linux中查看用户和组信息小结

    查看当前登录用户的组内成员groups 查看当前登录用户名whoami 查看tom用户所在的组,以及组内成员groups tom 查看所有的用户信息cat /etc/passwd 用户名.密码.用户i ...

  10. 中高等DP总结(更新中

    1.CF613D Kingdom and its Cities 题意:给定一棵树,每个询问给出一些关键点,要求删掉最少的点使这些点两两不联通,无解输出-1. 思路:先判无解:只要有一个关键点的父亲也是 ...