域内攻击手法——域内用户枚举和密码喷洒

一、域内用户枚举

1、域内用户枚举原理

域内用户枚举可以在无域内有效凭据的情况下,枚举出域内存在的用户名,并对其进行密码喷洒攻击,以此获得域内的有效凭据,在 Kerberos 协议认证的 AS-REQ 阶段,客户端向 AS 发送的请求包中,cname字段对应的值是用户名,AS对用户名进行验证,当用户状态分别为用户存在且启用(需要密码认证)、用户存在但被禁用、用户不存在时,AS-REP返回的数据包各不相同,如下图所示,会产生3种状态的数据包,利用这一点,可以对目标与域进行域内用户枚举。

用户状态AS-REP返回包信息
用户存在且启用,但是没有提供密码KRB5DC_ERR_PREAUTH_REQUIRED(需要额外的预认证)
用户存在但禁用KRB5DC_ERR_CLIENT_REVOKED NT Status: STATUS_ACCOUNTDISADLED(用户状态不可用)
用户不存在KRB5DC_ERR_C_PRINCIPAL_UNKNOWN(在Kerberos数据库中找不到此用户)

2、域内用户枚举抓包分析

为了更直观的查看各种用户状态,接下来对各种状态的用户使用工具向AS请求TGT票据,在该过程中使用WireShark进行抓包,查看对于不同用户状态其AS-REP返回包信息。这里用域内用户枚举工具kerbrute针对以下用户进行枚举,并抓包分析

用户用户状态
Mary用户存在且启用,但是没有提供密码
Guest用户存在但禁用
Unknow用户不存在

在用户字典中放入Mary、Guest、Unknow3个用户名使用用户枚举工具kerbrute进行用户名枚举,在该过程使用WireShark抓包,kerbrute该工具使用方法如下:

kerbrute.exe userenum -d god.org usernames.txt
# 参数
username    	# 用户枚举模式
-d        		# 指定域名
usernames.txt   # 用户名字典文件,用户名可以不加域名后缀

kerbrute工具项目地址:https://github.com/ropnop/kerbrute

使用kerbrute工具进行用户名枚举,指定的域名为god.org,枚举的用户名字典为usernames.txt,可以看到枚举出的有效域用户名Mary

在这里插入图片描述通过WireShark在枚举过程中抓包,数据包如下:
在这里插入图片描述138、139两个数据包是用户Unknow的枚举,从AS-REP包可以看到返回状态为KRB5DC_ERR_C_PRINCIPAL_UNKNOWN,对应的是用户不存在状态。
在这里插入图片描述在这里插入图片描述140、142两个数据包是用户Mary的枚举,从AS-REP包可以看到返回状态为KRB5DC_ERR_PREAUTH_REQUIRED,对应的是用户存在且启用,但是没有提供密码,需要额外的预认证。
在这里插入图片描述在这里插入图片描述141、143两个数据包是用户Guest的枚举,从AS-REP包可以看到返回状态为KRB5DC_ERR_CLIENT_REVOKED NT Status: STATUS_ACCOUNTDISADLED,对应的是用户存在但禁用状态。

在这里插入图片描述在这里插入图片描述

3、域内用户枚举工具

  • kerbrute
    Kerbrute是一款使用Go语言编写的域内用户名枚举和密码喷洒工具,上面已经使用过了。

    kerbrute.exe userenum --dc <域控IP> -d <域名> <用户名字典>
    
  • pyKerbrute
    pyKerbrute是一款使用Python编写的域内用户名枚举和密码喷洒工具。它可以通过TCP和UDP两种模式进行工作,用户名字典中的用户名格式不需要加域名后缀。域内用户名枚举命令如下:

    python2 EnumADUser.py <域控IP> <域名> <用户名字典> udp     # UDP模式
    python2 EnumADUser.py <域控IP> <域名> <用户名字典> tcp     # TCP模式
    

    在这里插入图片描述

4、域内用户枚举攻击防御

由于域内用户名枚举是发送大量的 AS-REQ 包,根据返回包的内容筛选出存在的域用户,因此可通过以下方法进行检测。

  • 流量层面:可通过检测同一IP在短时间内是否发送了大量的AS-REQ包来判断。如果同一IP在短时间内发送大量的AS-REQ包(如1min内大于30个AS-REQ包),则可判断为异常。
  • 日志层面:默认情况下域内用户名枚举并不会对不存在的用户名发起的AS-REQ包产生任何事件日志,因此日志层面不太好检测。

二、域内密码喷洒

1、域内密码喷洒原理

在Kerberos协议认证的AS-REQ阶段,请求包cname对应的值是用户名。当用户名存在时,在密码正确和密码错误两种情况下,AS-REP的返回包不一样。如下图所示为用户密码错误时的返回包状态,所以可以利用这一点对域用户名进行密码喷洒攻击。
这种针对所有用户的自动密码猜测通常是为了避免账户被锁定,因为如果目标域设置了用户锁定策略,针对同一个用户的连续密码猜测会导致账户被锁定,所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,消除账户被锁定的概率。普通的爆破就是用户名固定来爆破密码,但是密码喷酒是用固定的密码去爆破用户名。

用户状态AS-REP返回包信息
用户存在密码错误KRB5KDC_ERR_PREAUTH_FAILED(用户存在密码错误)

2、域内密码喷洒抓包分析

基于以上原理,我们针对webadmin用户在AS-REQ阶段密码正确和错误的情况下,通过Wireshark抓包看看AS-REP的返回状态。这里使用kekeo工具向AS发起TGT票据申请,发送AS-REQ请求包,在该过程使用WireShark抓包

tgt::ask /user:<域用户名> /domain:<域名> /password:<域用户密码>

在这里插入图片描述第 4个是 AS-REQ 包,它是针对用户 webadmin 进行预认证的,第5个是AS-REP包,由于webadmin用户不存在,因此AS-REP包返回KRB5KDC_ERR_PREAUTH_FAILED错误。

在这里插入图片描述在这里插入图片描述第17个AS-REP包,是针对用户 webadmin 密码正确的情况返回的正常的AS-REP包返里面包含TGT票据。

3、域内密码喷洒工具

当攻击者不在域内时,可以先通过域内用户名枚举来枚举出域内存在的用户,然后再进行域内密码喷洒来尝试喷洒出有效的域用户密码。针对域内密码喷洒攻击,网上有很多开源的项目,下面介绍几款域内密码喷洒工具。

  • kerbrute
    如果通过net accounts /domain可以查询得知目标域不存在密码锁定策略,则可以针对单个用户进行密码字典爆破
    在这里插入图片描述
    该工具的密码喷洒命令如下:
    kerbrute_windows_amd64.exe passwordspray --dc <域控IP> -d <域名> <用户名字典> <单个密码>    # 适用于有锁定策略的情况
    kerbrute_windows_amd64.exe bruteuser --dc <域控IP> -d <域名> <密码字典> <单个用户名>        # 适用于没有锁定策略的情况,严格来说这种是爆破
    # 参数
    passwordspray			# 密码喷酒模式
    --dc					# 指定域控 IP
    -d						# 指定域名
    
    在这里插入图片描述
  • pyKerbrute
    在密码喷洒模式下,可以使用明文密码或密码Hash。密码喷洒命令如下:
    python2 ADPwdSpray.py <域控IP> <域名> <用户名字典> clearpassword <明文密码> tcp/udp
    python2 ADPwdSpray.py <域控IP> <域名> <用户名字典> ntlmhash <ntlmhash> tcp/udp
    

4、域内密码喷洒攻击防御

由于域内密码喷洒是通过发送大量的AS REQ包,根据返回包的内容判断密码是否正确,因此可通过以下方法进行检测。

  • 流量层面:可通过检测同一 IP 在短时间内是否发送了大量的AS-REQ包来判断。如果同一IP在短时间内发送大量的AS-REQ包(如1min内大于30个 AS-REQ 包),则可判断为异常。
  • 日志层面:当口令爆破成功时,会产生事件ID为4768且结果代码为0x0的审核成功的Kerberos身份验证服务事件日志。而当口令爆破失败时,默认情况下并不记录任何日志,因此日志层面不太好检测。

正常域用户登录主机,我们可以通过 net user /domain来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 net user /domain这条命令的。如果当主机不在域内但是能与域控通信时,这种情况我们可以通过域内用户枚举的方式对进行用户枚举。然后利用枚举获取的域用户进行密码喷洒。

参考文档:
《域渗透攻防指南》(谢兆国 张秋圆)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之优化服务器设置(一)

优化服务器设置 配置MySQL的IO行为 有一些配置影响着MySQL怎样同步数据到磁盘以及如何做恢复操作。这些操作对性能的影响非常大&#xff0c;因为都涉及到昂贵的IO操作。它们也表现了性能和数据安全之间的权衡。通常&#xff0c;保证数据立刻并且一致地写到磁盘是很昂贵的。如…

【文心智能体大赛】迎接属于你的休闲娱乐导师!

迎接属于你的休闲娱乐导师&#xff01; 前言创建智能体发布智能体最后结语 前言 文心智能体平台AgentBuilder 是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&…

AI全栈之logo生成:执文,描摹,妙哉~

前言 前几日体验了国产的AI-Agents产品coze 它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序 并且可以自己去创建属于自己的AIBot&#xff0c;还是很有意思的&#xff0c;大家可以去体验体验 在体验过程中&#xff0c;我发现在创…

肾虚学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 作为一名研究牲&#xff0…

数据库复习——模式分解

模式分解这边主要包括无损分解和保持函数依赖的分解两种形式&#xff0c;简单整理一下。 无损分解 把一个 R R R 分成 ρ { R 1 , R 2 , ⋯ , R k } \rho \{R_1,R_2,\cdots,R_k\} ρ{R1​,R2​,⋯,Rk​}&#xff0c;然后通过自然连接 R 1 ⋈ R 2 ⋈ ⋯ ⋈ R k R_1\bowtie R…

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代&#xff0c;自动机器学习&#xff08;AutoML&#xff09;逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化&#xff0c;传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…

AI创作音乐引发的深思

在最近一个月中&#xff0c;音乐大模型的迅速崛起让素人生产音乐的门槛降到了最低。这一变革引发了关于AI能否彻底颠覆音乐行业的广泛讨论。在初期的兴奋过后&#xff0c;人们开始更加理性地审视AI在音乐领域的应用&#xff0c;从版权归属、原创性、创作质量、道德层面以及法律…

【linux】dup文件描述符复制函数和管道详解

目录 一、文件描述符复制 1、dup函数&#xff08;复制文件描述符&#xff09; ​编辑 2、dup2函数&#xff08;复制文件描述符&#xff09; ​编辑 二、无名管道pipe 1、概述 2、无名管道的创建 3、无名管道读写的特点 4、无名管道ps -A | grep bash实现 三、有名管道FI…

没有超头、最低价的视频号618战况如何?有何趋势变化?| 视频号618观察

转眼618大促已接近尾声&#xff0c;今年的你有剁手哪些好物吗&#xff1f;对618的整体感觉又是如何呢&#xff1f; 这是12年来&#xff0c;第一个电商平台没有预售付定金的618&#xff0c;当然或许此后的双11、每一次大促也将逐渐回归传统&#xff0c;回归本质。 而对于视频号来…

普通变频器位置闭环控制(S7-1200PLC工艺对象模拟量轴)

1、S7-1200PLC控制V90总线伺服通过工艺对象实现定位控制 S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)_1200报文3控制v90-CSDN博客文章浏览阅读182次。V90伺服驱动器调试软件SINAMICS V-ASSISTANT Commissioning tool下载地址如下:西门子官网选型|资料CS…

linux下的进程通讯

一. 实验内容 1&#xff0e;编写一个程序&#xff0c;实现在两个进程之间运用管道进行通讯。程序中创建一个子进程&#xff0c;然后父、子进程各自独立运行。父进程不断地在标准输入设备上读入小写字母&#xff0c;写入管道。子进程不断地从管道中读取字符&#xff0c;转换为大…

Qt坐标系统

目录 概述 渲染 逻辑表示 锯齿绘制 坐标转换 模拟时钟示例 Window-Viewport转换 概述 坐标系统由QPainter类控制。与QPaintDevice和QPaintEngine类一起&#xff0c;QPainter构成了Qt绘画系统的基础。QPainter用于执行绘制操作&#xff0c;QPaintDevice是一个二维空间的抽…

10地!2024年一级造价师报名通知发布!

各位考生注意&#xff0c;西藏、四川、江西、新疆&#xff0c;辽宁、江苏、云南、新疆兵团、海南10个地区已经发布了关于2024年度一级造价工程师职业资格考试报名工作的通知&#xff1a; 浙江 辽宁 江苏 云南 报名时间&#xff1a;6月28日9:00—7月8日17:00&#xff1b; 缴费时…

基于Python+Django+MySQL+HTML的创新创业平台

DjangoMySQLHTML 基于PythonDjangoMySQLHTML的创新创业平台 用户管理 系统监控 角色管理 资源管理 参数设置 角色管理 简介 学生创新创业平台是一个功能丰富的在线教育或协作系统&#xff0c;支持中文语言环境。它提供用户管理、系统监控、多角色权限控制、资源管理、参…

手写方法实现字符串例如:“123“与整型例如:123相互转化(面试必会)

目录 二、字符串类型转化为整型 1. 初始化变量 2.定义字符串索引值 3.思考如何将字符1转化为数字1 4. 转化思路 5.考虑字符串转化负数例&#xff1a;-123456 6.完整代码 四、最后 一、前言 在c语言和c中&#xff0c;有许许多多的数据类型相互转化的方法&#xff0c;这里…

算法篇-排序

快排 算法思想&#xff1a;每次找一个基数&#xff0c;然后对数组左右遍历&#xff0c;将小于基数的数据放到左边&#xff0c;大于基数的数放到右边&#xff0c;然后将基数左边&#xff0c;右边进行迭代再排序。 public static void quickSort(int[] nums, int left, int ri…

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境&#xff1a;LS1046A arm64 系统环境&#xff1a;openEuler release 22.03 (LTS-SP1) Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核&#xff0c;在适配的过程中…

phar反序列化及绕过

目录 一、什么是phar phar://伪协议格式&#xff1a; 二、phar结构 1.stub phar&#xff1a;文件标识。 格式为 xxx; *2、manifest&#xff1a;压缩文件属性等信息&#xff0c;以序列化存 3、contents&#xff1a;压缩文件的内容。 4、signature&#xff1a;签名&#…

开放式耳机哪个品牌质量比较好?五大公认性能之王推荐!

作为一名热爱音乐的DJ爱好者&#xff0c;我当然知道一款适合DJ使用的开放式耳机应该具备哪些特点。最近&#xff0c;我深入评测了几款热门开放式耳机&#xff0c;从音质、舒适度、耐用性到混音功能等方面进行了全面评估。今天&#xff0c;我想为大家分享我的评测结果&#xff0…

【jdk】jdk11 jdk17 jdk21的新特性

前言&#xff1a;按照博主的个人理解&#xff0c;一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性&#xff0c;之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢&#xff1f; 比如jdk11新特性&#xff0c;一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…