域内用户枚举和密码喷洒

2024-06-02 08:04
文章标签 密码 用户 枚举 喷洒

本文主要是介绍域内用户枚举和密码喷洒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 域内用户枚举原理和流量

1. 原理

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

不同之处主要是在返回数据包中的状态码不同,根据不同的状态码来区分账号在目标主机上的情况!

状态码主要分为四种:

KRB5DC_ERR_PREAUTH_REQUIRED 需要额外的预认证(用户存在)但是没有提供密码
KRB5DC_ERR_CLIENT_REVOKED 客户端凭证已被吊销(禁用)
KRB5DC_ERR_C_PRINCIPAL_UNKNOWN 在Kerberos数据库中找不到客户端(不存在)
KRB5KDC_ERR_PREAUTH_FAILED(用户存在密码错误)

官方文档中还有对应的状态码
微软地址: https://learn.microsoft.com/zh-cn/windows/security/threat-protection/auditing/event-4771

在这里插入图片描述

2. 流量分析

根据上面的四种状态码进行测试和流量分析:

用户存在,但是没有提供密码(test)

使用kerbrute工具输入下面命令并抓包

kerbrute.exe userenum --dc 192.168.41.10 -d hack.com 1.txt

在这里插入图片描述
先看AS-REQ包,里面只传输了我们要请求的用户名,而没有写密码
在这里插入图片描述
再看AS-REP包里的状态码

在这里插入图片描述

客户端凭证已被吊销(Guest(禁用))

我们使用kekeo工具输入下面命令申请用户的TGT票据

Tgt::ask /user:域用户 /domain:域名 /password:密码,

在这里插入图片描述
AS-REQ
在这里插入图片描述
AS-REP
在这里插入图片描述
可以看到请求的用户名是Guest,返回时的
数据是disabled禁用

test2在Kerberos数据库中找不到客户端(不存在)
用上面方法抓包分析
在这里插入图片描述
AS-REQ
在这里插入图片描述
AS-REP
在这里插入图片描述
可以看到请求的用户名是qwe,返回是的
数据是unknown

用户存在密码错误(test)
用上面方法抓包分析
在这里插入图片描述
AS-REQ

AS-REP
在这里插入图片描述
可以看到请求的用户名是ls,但是提供了错误的密码

3. 总结

域内用户枚举的原理是利用这两个都可以证明用户的存在:

    1. 正确的用户名,没有提供密码
    1. 正确的用户名,密码错误

这俩种都是根据AS-REP返回的error-code值来判断枚举的用户是否存在

比如利用kerbrute测试,在用户字典中添加几个用户
在这里插入图片描述

二. 域内密码喷洒原理和流量

利用kerbrute测试并抓包分析

kerbrute.exe passwordspray --dc 192.168.41.10 -d hack.com 1.txt qwe123!@#

test用户存在,密码错误
在这里插入图片描述
这里与上面不同,有四个数据包,原理是它先验证用户名是否存在,然后再进行密码验证

AS-REQ
在这里插入图片描述

AS-REP
在这里插入图片描述
在这里插入图片描述
test用户存在,密码正确
在这里插入图片描述
AS-REQ
在这里插入图片描述

AS-REP
在这里插入图片描述

三. 枚举和喷洒工具的使用

原理搞明白后接下来介绍来个工具

1. kerbrute工具

kerbrute使用Go语言开发,github提供了编译好的文件

地址: https://github.com/ropnop/kerbrute/releases

使用方法:
在这里插入图片描述
域内用户枚举

kerbrute.exe userenum--dc 域控IP -d 域名 用户字典

在这里插入图片描述

域内密码喷洒

kerbrute.exe passwordspray--dc 域控IP -d 域名 用户字典 密码(单密码)(有锁定策略使用)
kerbrute.exe bruteuser --dc 域控IP -d 域名 密码字典 用户名(没有锁定策略使用)

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

2. pykerbute工具

该工具是使用python2编写,支持tcp和udp俩种协议来用户枚举

用户枚举
EnumADUser.py 192.168.41.10 hack.com 1.txt tcp密码喷洒
hash值:
ADPwdSpray.py 192.168.41.10 hack.COM 1.txt ntlmhash e00045bd566a1b74386f5c1e3612921b udp
明文密码:
ADPwdSpray.py 192.168.41.10 hack.COM 1.txt clearpassword Admin@123 udp

四. 工作组和域内 – 喷洒和枚举

1. 不同环境下使用密码喷洒的场景

工作组环境
(1) 可以使用本地账号进行hash碰撞,找到可以登录的机器进行PTH认证,然后横向过去

(2) 如果通过信息收集,发现了域控的IP还有域名,可以直接使用工作组机器对域内用户进行密码喷洒,如果知道了域用户的密码可以生成票据,进行PTT,然后横向攻击上线

域环境
(1) 在域环境中一般不需要进行域内用户枚举,因为可以使用 net user /domain 可以直接查看。
(2) 在域环境中我们可以使用密码喷洒找到域用户的密码然后进行横向。

2. 工作组喷洒和域内主机喷洒的区别
工作组:工作组--工作组:可以使用NTLM协议:IPC,明文密码,PTH工作组--域内主机kerberos协议:用户枚举,密码喷洒NTLM协议:IPC,PTH
域内机器:域内机器-域内机kerberos协议:密码喷洒,IPC,PTH,PTT,PTK,明文密码域内机器-工作组机器NTLM协议:IPC,PTH

五. 通过喷洒控制域内主机

由上可知要喷洒用户由如下特点:

工作组:administrator用户 普通管理员(有UAC)但是只能上线低版本机器
域用户:administrator或者普通域管理员用户都可以
1. 工作组喷洒域内主机
前提条件:域控IP域名域内用户(需要枚举)
前俩个条件可以通过信息收集得到,但查看域内用户不行,除非控制的是域内用户,可以使用net user /domain 查看,所以需要枚举
  • 需要注意的是:上线的时候一定要把DNS修改不然PTT会失败
    在这里插入图片描述
    不然无法与域控通信

第一步成功上线内网一台工作组机器,利用CS插件上传FSCAN扫描C段
在这里插入图片描述
看到有DC的IP
第二步开始用户枚举,先上传工具kerbrute
在这里插入图片描述
输入命令开始用户枚举

kerbrute.exe userenum --dc 192.168.41.10 -d hack.com 1.txt

在这里插入图片描述
枚举到DC的用户,开始对administrator用户进行密码喷洒

kerbrute.exe bruteuser --dc 192.168.41.10 -d hack.com 2.txt administrator

在这里插入图片描述
得到DC的超管用户和明文密码使用之前的任意横向技术即可上线!

2. 域内主机进行喷洒,上线域控
前提:
域控IP
域名
域内用户(不需要枚举,使用net user /domain)

查看域内成员
在这里插入图片描述
上传工具,进行密码喷洒
在这里插入图片描述
接下来横向推荐使用PTT,因为得到票据,将超管票据打入内存后,可以上线任意域内成员机

3. 工作组hash碰撞或者密码喷洒

只能使用IPC,明文密码或者是pth认证,认证通过之后,可以使用copy命令将木马copy到目标机器,还可以使用服务或者是计划任务上线CS!

这篇关于域内用户枚举和密码喷洒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023397

相关文章

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi