• 域内用户枚举和密码喷洒


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

    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!

  • 相关阅读:
    MybatisPlus-环境配置/基本CRUD/常用注解
    java项目之交通事故档案管理系统(源码+文档)
    2022杭电多校九 1003-Fast Bubble Sort(倍增+单调栈)
    docker中使用GPU+rocksdb
    深入网络底层,了解Linux系统收发网络数据包的过程、原理、流程,附图文说明
    Debian11的基本网络配置工具
    SpringBoot整理-Actuator
    .NET Redis限制接口请求频率 滑动窗口算法
    触觉智能分享-SSD20X Ubuntu 20.04 文件系统的移植
    List集合的Stream流式操作实现数据类型转换
  • 原文地址:https://blog.csdn.net/Y22Lee/article/details/139371984