集权攻击-无权限条件下AD域凭据获取与利用分析

news2024/12/28 20:40:00

前言

对AD域攻击的前期,在没有任何域内据点或域用户凭据时,攻击者往往会使用用户名枚举、密码爆破、密码喷洒、Roasting等手段进行域用户凭据的窃取,本篇文章将针对AD域攻击时无权限环境下对域用户的信息收集及凭据窃取进行分析。

用户名枚举&密码爆破/喷洒

在 Kerberos 协议认证的 AS-REQ 阶段,cname 的值是用户名。当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的响应内容不一样。所以可以利用这点,对域内进行域用户枚举和密码喷洒等攻击。

用户枚举

正常域用户登录主机,我们可以通过 net user /domain来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 net user /domain这条命令的。而当主机不在域内但是能与域控通信时,我们可以通过域内用户枚举来探测域内的用户。

在AS-REQ阶段客户端向KDC发送用户名,KDC对用户名进行验证,用户存在和不存在返回的数据包不一样。

当用户名存在,密码错误:返回KRB5DC_ERR_PREAUTH_REQUIRED,并携带e-data数据。

当用户名不存在:返回KRB5DC_ERR_C_PRINCIPAL_UNKNOWN,不携带e-data数据。

密码喷洒/密码爆破

在大多数域内会使用密码策略,密码错误尝试次数超过指定次数后会导致账号被锁定,因此在实战环境中密码爆破应用较少,我们在此不展开做过多的介绍。

密码喷洒顾名思义是用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题,因此可以通过用户名枚举获取到域内用户后,使用通用密码进行喷洒攻击。

在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回 KRB5KDC_ERP_PREAUTH_FAILED

密码正确:

密码错误:

kerberoasting

我们简单回顾服务票据的请求流程,当域内用户去请求域内某个服务资源时,先会通过AS-REQ进行身份认证,通过后会返回TGT给用户,用户使用TGT发起TGS请求,KDC会返回一个用对应服务账户的Hash加密的服务票据。那么如果我们有一个域用户的凭据可以正常申请TGT,就可以申请指定服务的TGS票据,因该票据使用服务账户的Hash进行加密,当获取到加密后的TGS票据后,即可根据离线爆破得到服务账户的密码,这样请求服务账号票据进行离线爆破的攻击手法叫做Kerberoasting。

在Kerberoasting攻击的两个关键点:

1、服务账户,服务账户分为两种,一种是计算机账号,一种是配置了SPN的用户账户。计算机账号的口令由系统随机设置,而且每30天自动变更一次,几乎不能被破解。而服务账号存在很大的特殊性,口令在应用软件安装时由软件自动设定或由用户自己配置,复杂度远低于主机账号,由于该账户被应用在某些服务上,为了保障服务的不间断运行,口令也几乎不会更改。所以在利用时优先选择服务账号。

2、弱加密算法。windows2008和vista操作系统之后,大部分报文采用AES加密,同时也会因为保证兼容支持rc4_hmac_nt加密,使用哪一种由客户端和与服务器协商,因此我们可以通过指定弱加密算法进行协商,以便我们进行破解。

请求服务票据

通过impacket工具包中的getuserspns.py来自动请求具有kerberoasting条件账户的票据。

请求票据过程的数据包:

TGS-REQ数据包:正在请求http://CS.COM域中的MSSQLSvc/http://sql.cs.com:1433 SPN

TGS-REP数据包

AS- REP Roasting

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账号设置 Do not require Kerberos preauthentication (不需要kerberos预身份验证) 。而该属性默认是没有勾选上的。

预身份验证是Kerberos身份验证的第一步(AS_REQ & AS_REP),它的主要作用是防止密码脱机爆破。默认情况下,预身份验证是开启的,KDC会记录密码错误次数,防止在线爆破。

当关闭了预身份验证后,攻击者可以使用指定用户去请求票据,此时域控不会作任何验证就将 TGT票据 和 该用户Hash加密的Session Key返回。因此,攻击者就可以对获取到的用户Hash加密的Session Key进行离线破解,如果破解成功,就能得到该指定用户的明文密码。

AS-REP Roasting攻击条件

域用户设置了Do not require Kerberos preauthentication(不需要kerberos预身份验证) 。

请求用户票据

通过impacket工具包中的getuserspns.py来自动请求具有kerberoasting条件账户的票据。

我们通过流量包对比,可以很明显看出开启预身份验证的流量包中直接返回了该用户的TGT票据。

工具分析

我们选择用户名枚举、爆破、喷洒应用比较多的一款工具“kerbrute”以及Kerberoasting、AS-REP Roasting应用比较多的“Impacket”两款工具进行分析,从代码上实现对于这几种攻击方式的利用。

用户名枚举

首先通过gokrb5库中NewKerbruteSession()函数构建krb5的一些必要配置结构体。

使用NewClientWithPassword() 函数,传入用户名、域名、域配置等信息创建客户端实例。

接着使用NewASReqForTGT()函数生成AS-REQ结构体。

再使用sendKDCTCP()函数,将AS-REQ发送至KDC。

根据KDC响应的错误信息结构体中的ErrorCode字段,判断响应的Error是否为KDC_ERR_PREAUTH_REQUIRED

KDC_ERR_PREAUTH_REQUIRED标识响应码为25,若检测到响应码为25,则在控制台输出检测到的该用户名,实现枚举用户名的利用。

密码爆破/喷洒

爆破、喷洒相对简单一些,可以直接创建客户端实例,后调用gokrb5中的Login()函数,通过ASReq请求TGT票据,根据响应的Error判断是否登录成功.爆破的逻辑即是如此,喷洒亦然。

对于该函数的实现,无非是序列化结构体、向KDC发送数据,处理响应Error的一些内容,除非在解决一些协议实现上的BUG外,我们可以暂时不用深究。

Kerberoasting

对于Kerberosting,攻击者使用的比较多的就是GetUserSPNs.py这款工具,我们可以从它的代码来分析如何实现攻击

首先可以看到这个工具进行了一次ldap查询:

Ldap查询的过滤语法为

(&(servicePrincipalName=*)(UserAccountControl:1.2.840.113556.1.4.803:=512)(!(UserAccountControl:1.2.840.113556.1.4.803:=2))(!(objectCategory=computer))

从过滤器中可以看到对servicePrincipalName、UserAccountControl、objectCategory三个属性进行了筛选,其中servicePrincipalName=* 和(!(objectCategory=computer)很好理解,就是表示 spn不为空并且不是计算机账户,UserAccountControl的语法比较难理解,这里1.2.840.113556.1.4.803一串字符是被称作oid,这个oid是ldap里面的拓展匹配规则,微软也在文档中列出了oid和匹配规则名的对应关系。

从名称可以看出1.2.840.113556.1.4.803这个oid表示的是与运算,至于后面的512和2可以参考UserAccountControl属性的各个比特位的含义。

所以这里(UserAccountControl:1.2.840.113556.1.4.803:=512)表示的是查询一个普通用户账户,(!(UserAccountControl:1.2.840.113556.1.4.803:=2))表示账户未被禁用。

在加入-request参数之后又去请求查询到的带spn的用户账户TGS票据。

最后输出成hashcat可以破解的格式。

这里拼接的使用到的参数有加密类型、用户名、域名、spn以及TGS-REP中的ticke,也就是用带spn用户的密码加密的密文部分。

AS-REP Roasting

ASRepRoasting攻击在impacket工具中也有相应的实现,GetNPUsers.py

和GetUserSpns.py工具类似,GetNPUsers.py

在开始也是进行ldap查询。

这里写的比较清晰,查询的是不需要预认证并且没有被禁用的非计算机账户,再判断request参数是否为True,如果是的话就去请求查询到账户的TGT。

getTGT方法直接返回了hastcat或者jtr可以破解的格式。

可以看到这里拼接使用的是加密类型、用户名、域名、以及最关键的AS-REP中的encpart中的密文部分(由用户的密码加密)。

结语

通过对用户名枚举、密码爆破、密码喷洒、Kerberoasting、AS-REP Roasting进行分析,可以比较清晰地看到这几种攻击的原理,以及目前攻击者常用的攻击工具对这几类攻击手法的实现方式,以便我们对此类攻击进行更深入的分析和检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、CNNs网络架构-深度可分离卷积

《A review of convolutional neural network architectures and their optimizations》论文指出一些高性能的卷积神经网络方法不可避免地带来巨大的计算成本,往往需要高性能GPU或高度优化的分布式CPU架构的支持。尽管CNNs应用向移动终端扩展,但大多数移…

如何在Spring Boot服务端实现公网远程调试并进行HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Go语言 -- Web开发基础学习 net/http包

前言 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go语言最擅长的领域就是Web开发,此贴是本人入门完go语法基础后学习Web开发的学习笔记。 第一个Go Web 新建go文件hello_world.go 写入: package mainimport (&…

企业级信息系统开发——初探Spring AOP

文章目录 一、提出游吟诗人唱赞歌任务(一)采用传统方式实现(二)采用传统方式实现的缺点 二、采用配置方式使用AOP(一)创建本讲所需子包(二)创建杀龙任务类(三&#xff09…

VESD静电监控系统:提高静电防护效果与管理效率

随着科学技术不断发展,现代的工业对静电防护的要求越来越高。因为静电的存在可能会对产品质量、工作环境、甚至是人身产生威胁。静电监控系统是一项高效的管理工具,能够有效地控制和监测静电产生的情况,提高静电防护效果和管理效率。 VESD静电…

群晖DS920 video station使用教程

群晖DS920 video station使用教程 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 安装video station在群晖套件里点一下就好,这里不说了。 一、添加视频库 可以添加电视剧、电视节目等类型。 比如我在国产剧这个视频…

写出诗一样代码的灵丹妙药: const与assert

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C知识系统分享》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

网络安全好就业吗?会不会容易被淘汰?

网络安全发展前景好吗?好就业吗?会不会容易被淘汰?很多刚入门或者想入门的小伙伴都会有这样的疑问 今天就在这里给大家介绍一下。我就在这个行业,目前湖南,薪资就没必要说了,高就对了。 这个行业优势就是工…

互联网营销推荐算法理论-30分钟理解协同过滤

一、协同过滤概念 不论在淘宝还是京东,你浏览了/购买了某个商品A,后面几天你在该app内总是会在首页看到商品A和商品A相似的商品,背后支撑这种能力的就是推荐系统,而其推荐算法可能就是协同过滤。(注:app内…

Scala学习(九)---List集合

文章目录 1.List1.1 不可变List集合1.2 可变集合ListBuffer 1.List List集合默认为不可变集合,List集合在实例化的时候,无法通过new关键字进行实例化,只能通过伴生apply方法来对其进行实例化 1.1 不可变List集合 创建一个不可变list集合 …

真题详解(树的结点)-软件设计(八十四)

真题详解(汇总)-软件设计(八十三)https://blog.csdn.net/ke1ying/article/details/130856130?spm1001.2014.3001.5501 COCOMOII估算不包括_____。 对象点 B.功能点 C.用例数 D.源代码行 答案:C 语法翻译是一种&#xff…

【vue3】 实现 公共搜索组件,在当前页搜索的路由跳转不能改变当前值的操作,使用bus / event-emitter 派发器

一、安装 bus 插件 cnpm install --save event-emitter 二、创建 bus.ts 文件 1、在utils下创建bus.ts 2、bus.ts 代码如下 import ee from event-emitter export default ee() 三、页面使用 1、搜索的公用组件页面&#xff0c;search.vue <el-input v-model.trim&qu…

全网最详细实现微信小程序小程序支付功能【前端部分】

文章目录 功能描述&#xff1a;准备工作申请微信支付接口权限 微信支付api需要的参数说明示例代码 需要传入后端接口的参数说明&#xff1a;接口返回的参数说明&#xff1a;支付逻辑代码&#xff08;只包含支付功能&#xff09;以下是功能完整代码确认订单页面结构部分逻辑部分…

【阿里云】文本转语音方言— 阿里云语音合成,文本转语音方言工具类

目录 一、导入SDK坐标 二、文本转语音方言 —步骤和工具类 1.登录阿里云账号&#xff0c;创建一个语音合成项目和创建用户并设置权限。 2.获取appKey、accessKeyId、accessKeySecret在相应位置进行填写。 3.相应位置填写自己需要保存的本地路径。意思就是说&#xff0c;自…

【HarmonyOS】低代码元服务开发中的地图实现

在元服务开发过程中&#xff0c;大家可能需要在应用中使用地图&#xff0c;如果使用SDK集成的方式&#xff0c;地图SDK包体积大小很大&#xff0c;集成后元服务大小可能会超过10M&#xff0c;这就超出了HAP包的大小限制。那么是否有其他途径可以在元服务中使用地图呢&#xff1…

视频理解学习笔记(一):双流卷积神经网络

视频理解学习笔记&#xff08;一&#xff09;&#xff1a;双流卷积神经网络 两句话总结双流卷积神经网络论文概览方法详解Spatial stream ConvNetTemporal stream ConvNet测试方法 光流什么是光流怎么预处理光流 数据集UCF101&#xff08;已被刷爆&#xff09;HMDB51 Experimen…

安装包UI美化之路-Electron打包出界面美观,功能完善的安装包,这三步就够了

这篇文章应该说是《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》的延伸与进一步应用&#xff0c;在可视配置的基础之上&#xff0c;生成供electron-builder打包的脚本&#xff01; 一直有朋友反馈&#xff0c;不知道如何将nsNiuniuSkin与Electron打包结合起来&am…

Real-Time C++ 嵌入式C++ 程序设计(二)

翻译自 Real-Time C Efficient Object-Oriented and Template Microcontroller Programming 4th Edition - Kormanyos, Christopher&#xff0c;这书涉及了从C11 到C20 的内容&#xff0c;主要介绍使用C 的模板、面向对象等特性设计嵌入式程序。书里的示例代码都是公开的&#…

【OpenCV DNN】Flask 视频监控目标检测教程 03

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 03 3.3 上传本地图片进行人脸检测3.3.1 OpenCV 级联分类器类 cv::CascadeClassifier3.3.2 cvFlask03 项目的构建步骤 本系列从零开始&#xff0c;详细讲解使用 Flask 框架…

Unity3D :运行时 UI 的性能注意事项

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 运行时 UI 的性能注意事项 本页介绍如何提高运行时的性能用户界面 . 优化数据存储 您可以使用 usageHints 来设置元素在运行时的使用方式&#xff0c;以便相应地优化数据存储。例…