0%

THM学习日寄12-域学习Breaching Active Directory

  • Introduction to AD Breaches

    攻击 AD 的办法有多种,而此则秘传讲述了关于获得 AD 凭证之隐秘。。。

  • OSINT and Phishing

    获取第一组 AD 凭据的常见办法有 OSINT 和钓鱼:

    • OSINT

      AD 而言,其信息主要泄露在:

      • Stackall 提问但披露敏感信息(如凭证)
      • 硬编码凭据将脚本上传至 github 的开发人员
      • 员工使用工作账户注册外部网站,而外部网站被数据泄露,如HaveIBeenPwnedDeHashed
    • 钓鱼

      就嗯钓,没讲什么重要的

  • NTLM Authenticated Services 丑陋的爆破

    LAN 管理器:NTLM 是用于在 AD 中验证用户身份的安全协议,使用称为 NetNTML 的基于质询-相应的方案进行身份验证,而使用 NetNTML 的服务也可以暴露在互联网上,比如:

    • 公开 Outlool Web App 的登录门户的内部托管 Exchange 服务器
    • 暴露在互联网的的服务器的远程桌面协议 RDP 服务
    • AD 集成的公开 VPN 端点
    • 面向互联网并使用 NetNTMLWeb 应用程序

      NetNTML 允许应用程序扮演客户端和 AD 之间的中间人角色,所有所有身份验证材料以质询的形式转发到域控制器,如果成功完成,应用程序将对用户进行身份验证。

      这意味着应用程序代表用户进行身份验证,而不是直接在应用程序本身上对用户进行身份验证。 以此防止应用程序存储 AD 凭据,该凭据应仅存储在域控制器上:

    • 丑陋的密码爆破

      由于大多数 AD 都配置有账户锁定,所以很难对同一个账户爆破密码。相反的,需要执行密码喷射攻击,即使用一个密码尝试登录所有获得的用户名

      但这类攻击仍会导致大量失败日志,所以实战感觉会被逮捕的(逃

      题目的文件提供了用户名列表,密码 Changeme123 ,以及一份写好的爆破脚本

      得到用户 hollie.powell heather.smith gordon.stevens georgina.edwards

      登进去可以看到 hello world

  • LDAP Bind Credentials 拦截LDAP身份验证

    应用程序可使用的另一种 AD 身份验证方法是轻量级目录访问协议 LDAP 。其与 NTLM 类似,但通过 LDAP 应用程序可以直接验证用户凭据。即应用程序使用自身的一对 AD 凭据来查询 LDAP ,然后验证 AD 用户的凭据,如下:

    LDAP 身份验证是与 AD 集成的第三方应用程序的一种机制,如:

    • Gitlab
    • Jenkins
    • Custom-developed web applications
    • Printers
    • VPNs

      如果这些应用程序或服务暴露在互联网上,可以使用类似于攻击 NTLM 身份验证系统的攻击方式。由于使用 LDAP 身份验证需要一组 AD 凭据,那么可以尝试恢复服务使用的 AD 凭据,以获得对 AD 的经过身份验证的访问。

      AD 凭据通常以纯文本形式存储在配置文件中,对其利用详见 Task7

    • LDAP 回传攻击

      当获得对内部网络的初始访问权限时,这是针对网络设备(比如打印机)的常见攻击:

      当可以访问并修改指定 LDAP 参数的设备配置时,可以执行 LDAP 回传攻击:通过更改 LDAP 配置中的主机名/IP为自己的IP,此时再测试 LDAP 配置时可以强制设备对恶意设备进行 LDAP 身份验证,可以拦截此身份验证并尝试恢复 LDAP 凭据

      http://printer.za.tryhackme.com/settings.aspx 为例:

      该网页是网络打印机的管理网站,拿到用户名:

      当点击 Test setting 时,打印机会向域控制器发出身份验证请求来测试其 LDAP 凭据,那么可以尝试利用这点让打印机连接到我们的 IP 以得到其凭据。而 LADP 的默认端口号是 $389$ ,那么监听一下:

      这是因为在发送凭据之前网络打印机会与 LDAP 服务器协商,选择两者都支持的最安全的身份验证方法。

      在足够安全的配置下凭据会以密文形式传输,而对于某些身份验证方法,凭据则根本不会通过网络传输,所以不能简单的 nc 监听到凭据,而需要创建一个恶意的 LDAP 服务器,并更改为不安全的配置以确保凭证以明文形式发送

      安装 OpenLDAP 并配置自己的 LDAP 服务器

      1
      2
      3
      apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

      dpkg-reconfigure -p low slapd

      配置中提供的域名和组织名都应是 za.tryhackme.com

      由于前文说到过的,现在配置过于安全,需要降级其支持的身份验证机制来使其明文传输凭据。那么,我们希望其仅支持 PLAINLOGIN 身份验证方法:

      ​olcSaslSecProps.ldif

      1
      2
      3
      4
      #olcSaslSecProps.ldif
      dn: cn=config
      replace: olcSaslSecProps
      olcSaslSecProps: noanonymous,minssf=0,passcred

      其具有以下属性:

      • olcSaslSecProps: 指定 SASL 安全属性
      • noanonymous: 禁用支持匿名登录的机制
      • minssf: 指定可接受的最小安全强度,$0$ 表示无保护。

        用这个文件来更新 LDAP 服务器的配置:

        1
        ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart

        然后可以用这个命令来检测配置状态:

        1
        ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms

        此时配置完成,用 tcpdump 监听 $389$ 端口:

        tcpdump -SX -i breachad tcp port 389

        得到密码 tryhackmeldappass1@

  • Authentication Relays 中间人攻击服务泄露

    继续研究针对更广泛的网络身份验证协议的攻击。Windows 网络中有大量服务相互通信,允许用户利用网络提供的服务。而这些服务必须使用内置的身份验证方法。

    在这里,我们重点关注 SMB 使用的 NetNTLM 身份验证

    • 服务器消息块 SMB

      SMB 协议允许客户端(如工作站)与服务器(如文件共享)进行通信。在域中, SMB 负责管理包括网络间文件共享到远程管理的所有事物

      然而早期版本的 SMB 存在多个漏洞可用于恢复凭据,以及代码执行。而有些时候,遗留的系统并不支持新版本的更新,导致仍在使用旧版本

      以下是两种用 SMB 进行 NetNTML 身份验证的漏洞:

      • 由于 NTLM Chanllenges 可以被拦截,可以使用离线破解来恢复相关密码,但这种过程很慢
      • 使用设备进行中间人攻击,在客户端与服务端之间进行 SMB 身份验证,来提供已进行过身份认证的会话以及对目标服务器的访问
    • LLMNR,NBT-NS,WPAD

      本地多播链路解析协议 LLMNR 用于在局域网中解析主机名到 IP 。常用于替代基于 DNS 的主机名解析,特别是在没有 DNS 服务器或者 DNS 服务器不可用的情况下。

      NetBIOS名称服务 NBT-NS 用于在 TCP/IP 网络中解析 NetBIOS 名称

      网络代理自动发现协议 WPAD 用于局域网浏览器自动发现内网中的代理服务器并自动设置为该代理连接内网或互联网,找到后会自动下载 PAC 配置文件

      在大型 Windows 网络上,这些协议允许主机为同一本地网络上所有主机执行自己的本地 DNS 服务:先通过发送 LLMNR 请求来查看是否有主机响应,从而确定他们正在查找的主机是否位于同一本地网络上来避免 DNS 服务器等网络资源负担过重。NBT-NSLLMNR 的先驱协议。而发出 WPAD 请求是为了尝试为未来的 HTTP 连接找到代理

      而通过 Responder 工具,其允许我们在 NetNTLM 身份验证期间执行中间人攻击,欺骗客户端与攻击端进行连接。具体来说,以上协议的请求都依赖于本地网络广播,Responder 会监听所有这些请求,并发送恶意相应来尝试连接到客户端

    • 拦截 NetNTLM

      值得注意的是,Responder 在实战情况下会拦截所有正常的身份验证请求,导致用户和服务无法连接到主机和共享,因此具有一定破坏性

      这里由于连接的是 VPN 而非本地网络,靶机模拟了一个 $30mins$ 执行一次的身份验证请求,所以拦截请求会比较耗时

      使用这条命令来连接,其中 breachad 是这里对应的网络接口:

      1
      responder -I breachad

      然后静置一段时间,可能会提示端口被占用,但我这里不用管就行:

      其格式为

      1
      2
      3
      [SMBv2] NTLMv2-SSP Client   : <Client IP>
      [SMBv2] NTLMv2-SSP Username : ZA\<Service Account Username>
      [SMBv2] NTLMv2-SSP Hash : <Service Account Username>::ZA:<NTLMv2-SSP Hash>

      靶机同时下发了密码列表来加速破解

      1
      john --wordlist=./passwordlist-1647876320267.txt hash.txt

      注意 hash 文件要放整个串,即 svcFileCopy::ZA::... 那一串

      得到密码 FPassword1!

  • Microsoft Deployment Toolkit 部署使用的 PXE 文件泄露

    • MDTSCCM

      microsoft部署工具包 MDT 用于自动部署微软的操作系统,大型组织一般使用该服务来更有效的部署新映像,从而方便再中央位置维护和更新基础映像

      系统中心配置管理器 SCCM 用于管理所有微软应用程序,服务和操作系统的所有更新,通常和 MDT集成。二者配合允许 IT 团队预配置和管理启动影响,即需要配置新机器时,只需插入网线即可自动执行

      在这里,将关注预处理执行环境 PXE 启动的配置

    • PXE 启动

      大型组织使用 PXE 引导来允许连接到网络的新设备直接通过网络加载和安装操作系统。而 MDT 用于创建,管理和托管 PXE 启动映像。

      PXE 启动常与 DHCP 集成,即每当 DHCP 分配 IP 租约则允许主机请求 PXE 启动映像并启动网络操作系统安装过程

      PXE 的利用有两种方向:

      • 注入权限提升,以便在 PXE 启动完成后获得对操作系统的管理访问权限
      • 执行密码抓取攻击以获得安装期间的 AD 凭据

        这里将关注后者

    • PXE 启动映像检索

      这里 THM 跳过了从 DHCP 请求 IPPXE 的预配置阶段

      通过网络图可以得到 MDT 服务器的 IP

      而访问 http://pxeboot.za.tryhackme.com 这里列出了所有 BCD 文件的信息,这些文件存储了不同类型体系结构的 PXE 引导相关信息

      这里通常需要使用 TFTP 请求每个 BCD 文件并枚举所有文件的配置。这里选择重点关注 x64 架构的 BCD 文件 x64{E259EB83-3541-4D5F-B0CC-F7326F4E8592}.bcd

      注意文件名每天都会改变

      现在需要连接 ssh 并下载 BCD 文件来读取 MDT 服务器配置:

      1
      ssh thm@THMJMP1.za.tryhackme.com

      密码为 Password1@

      嗯,登录信息是 THM 给定的

      这里需要创建一个用户并复制一个 powerpxe 进去,目的是确保所有网络用户都可以使用 ssh

      这里需要使用 TFTP 来下载 BCD 文件,而其相较于 FTP 来说,没有命令可用于列出文件。所以需要准确的指定目录和文件名,而 BCD 文件始终位于 MDT 服务器的 /Tmp 目录中:

      1
      tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd

      现在在 noone 文件夹得到了恢复的 BCD 文件,将使用 powerpxe 来读取内容,具体来说,使用其 Get-WimFile 函数来从中恢复 PXE 启动映像的位置:

      1
      2
      3
      4
      powershell -executionpolicy bypass
      Import-Module .\PowerPXE.ps1
      $BCDFile = "conf.bcd"
      Get-WimFile -bcdFile $BCDFile

      现在有了启动映像的位置,下一下:

      1
      tftp -i <THMMDT IP> GET "<PXE Boot Image Location>" pxeboot.wim

    • PXE 启动映像中恢复 AD 凭据

      这里已经可以注入本地管理员,当映像启动时就有了管理员权限。那么可以手动安装映像,就有了加入域的计算机,详见这里

      这里只讨论从中窃取 AD 凭据:

      再次使用 powerpxe

      1
      Get-FindCredentials -WimFile pxeboot.wim

      由此得到另一组 AD 凭据: svcMDT:PXEBootSecure1@

  • Configuration Files 配置文件泄露

    如果能访问网络上的主机,那么通过配置文件有很大可能恢复 AD 凭据,具体来说是这几种:

    • Web应用程序配置文件
    • 服务配置文件
    • 注册表项
    • 集中部署的应用程序

      可以使用枚举脚本来自动执行该过程,如 seatbelt

      在这里将集中在从集中部署的应用程序中恢复凭据,通常来说这类程序需要在安装执行阶段对域进行身份验证的方法

      这里以应用程序 McAfee 为例:

      其将凭据存入了 ma.db 文件中,而这个文件存在固定位置: C:\ProgramData\McAfee\Agent\DB

      kali 上面用 scp 复制过来:

      scp thm@THMJMP1.za.tryhackme.com:C:/ProgramData/McAfee/Agent/DB/ma.db /

      使用 sqlitebrowser 打开数据库

      转到 浏览数据-Agent_Repositories 表,关注 DOMAIN AUTH_USER AUTH_PASSWD 条目,而 AUTH_PASSWDMcAfee 使用已知密钥加密,THM 提供了旧版 python2 爆破脚本

      这里直接偷图了

      对应的用户名密码是 svcAV:MyStrongPassword