AD域渗透

AD域渗透

环境搭建

1.1 AD域介绍

Active Directory通过维护一个集中式数据库来实现集中管理,该数据库存储了有关用户、计算机、策略、权限等的所有信息。例如,IT 团队可以连接到该数据库并为新来的同事创建新用户,并为他们分配权限,只允许他们读取其部门特定服务器的指定目录中的文件,然后,当其中一名同事尝试登录到Active Directory网络内的一台计算机时,该计算机会查询中央数据库以检查该同事的用户是否存在以及密码是否正确。这样,用户可以登录到公司的任何计算机(如果他们有权限),允许员工仅使用一个用户在所有公司计算机(可以是工作站、数据库服务器、文件服务器、等等).

🔑 我们所说的 Active Directory 网络就是通常所说的域。域是在同一网络中连接的计算机,它们共享一个 Active Directory 数据库,该数据库由域的中央服务器管理,称为域控制器。

域名

🔑 每个域都有一个 DNS。在许多公司中,域名跟他们的网站相同,例如`fsec.com`,有的公司则有不同的内部域名,例如`fsec.domain`。 除了DNS外,每个域还可以通过 NetBIOS 名称来识别。例如,域`fsec.com`可以具有NetBIOS 名称 `fsec`。可以看到在登录操作中使用的 NetBIOS 名称,其中用户标识为类似`fsec\Administrator`,其中第一部分是 NetBIOS 名称,第二部分是用户名。 最后,一个域可以通过它的SID(安全标识符)来识别。SID 被程序(Windo ws API)使用的比用户多。

域森林

域森林是一组或多个不形成连续名称空间的域树。
使用 DNS还是比较有用的,因为它可以创建用于管理目的的子域。例如,一家公司可以有一个名为的根域fsec.com(也就是林),然后是不同大部门或者分公司的子域,例如fsarmsec.fsec.com或it.fsec.com。
AD域提供了多种组织基础结构的方法,因此公司使用子域的方式各不相同,一些公司为部门创建子域,而另一些公司则将它们用于分公司。
一般域森林结构如下,也叫域树:
            fsec.com
                |
        .-------'--------.
        |                |
        |                |
 farmsec.fsec.com it.fsec.com
        | 
        |
        |
 web.farmsec.fsec.com

这种域树称为森林。森林的名称与树的根域的名称相同。
在域森林中,每个域都有自己的数据库和域控制器。但是,林中域的用户也可以访问林中的其他域 。一个域可以是自行配置的,不需要与其他域交互,从安全角度来看它也不是独立的,因为默认一个域的用户可以访问同一森林中其他域的资源)。但是一个林的用户默认是不能访问其他林的资源的,所以能够提供安全隔离的逻辑结构就是林。

域信任

1.2 环境介绍

主机名
IP地址
系统版本
域名
功能

2022-1

172.16.0.201

windows 2022

fsec.io

AD域控

2022-2

172.16.0.202

windows 2022

fsec.io

文件服务器

10-1

172.16.0.203

windows 10

fsec.io

客户机

2008-1

172.16.0.101

windows 2008

fsec.cn

AD域控

2008-2

172.16.0.102

windows 2008

fsec.cn

文件服务器

7-1

172.16.0.103

windows 7

fsec.cn

客户机

建立环境的大致步骤如下:

  1. 安装操作系统后,配置IP地址及网络的相关信息,DNS信息需要指定至各自域控。并开启远程访问

  2. 域控主机添加AD域控服务,并建立好域名等信息

  3. 其他主机加入域

  4. 配置fsec.io与fsec.cn的双向信任

  5. 建立域用户(userio/usercn)

  6. 文件服务器主机建立文件共享服务

基础信息搜集

当我们通过任意的手段进入到内网时,我们对其内网的架构一无所知。此时在这种情况下,我们则需要进行对其整个所处环境进行分析。 此时我们需要进行的则是信息收集,此处与我们在互联网渗透是一个道理,信息收集的越多越全则对我们进行内网渗透时则越方便。

假设我们通过钓鱼手段,获取到一台pc用户机的控制权限,那么我们第一步需要进行的则是信息收集。

2.1 判断主机所在环境

通常我们获取到一台PC机时,第一时间或去判断该机器所处的网络,目前正在与其通信的网络,是否加域等等。 根据不同情况进行进一步收集以及渗透。

一般windows机器,会有两种环境:

信息搜集的相关指令:

指令
作用
细节点

ipconfig /all

查看当前机器网卡以及ip信息

主DNS后缀中会显示域名

nslookup

使用nslookup解析域名

查看域名解析出来的地址是否是与dns服务器是否一致

systeminfo

查看本机系统详细信息

在域这一列显示域名

net config workstation

查看当前登录域及域用户

域环境下的机器,那么在工作站域这一列显示的则是域名

net time /domain

查看域内时间

whoami /user

当前用户权限

whoami /priv

当前用户权限

不同的用户拥有不同的权限

echo %PROCESSOR_ARCHITECTURE%

判断该系统体系结构

netstat -ano

网络连接以及端口开放情况

route print

路由表判断网络情况

arp -a

ARP表判断网络情况

hostname

查看当前机器名

wmic product Get name,version

查看当前安装的程序及版本

quser

查看在线用户

tasklist

查看当前进程列表

tasklist /v

查看进程对应的用户身份

tasklist /svc

查看是否存在杀软

WMIC /Node:localhost /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List (平替)

wmic startup get command,caption

查看启动程序信息

通过查看启动程序信息可以知道当前机器开机的时候会运行哪些软件,这可以启动劫持。

schtasks /query /fo list /v

查看计划任务

netsh firewall show config

查看防火墙配置

查看防火墙配置判断当前机器是否开了防火墙,以及防火墙配置信息。

2.2 域内信息收集

在攻击 AD域或任意系统时,收集有助于定义谁、什么、何时和何地的有用信息至关重要。

2.2.1 使用nslookup

利用nslookup定位域控:

定位域控:

其它定位域控方法:

2.2.2 端口扫描

在AD域中,可以很容易地发现域控制器,具体取决于它们开启的服务。每个服务通常都可以访问特定的 TCP 和/或 UDP 端口。

使用nmap进行端口扫描:

2.2.3域内的相关命令

指令
作用
细节点

nltest /domain_trusts /all_trusts /v

查询域信任列表

可以查询到有多少个域以及域名

nltest /dsgetdc:fsec

查询域控以及对应ip

快速定位域控机器

net user /do

获取域用户列表

获取到域内所有用户,从此判断域的大小

net group "domain admins" /domain

获取域管理员列表

快速定位域管

net localgroup administrators /domain

登录本机的域管理员

该条命令会显示本地管理员以及域管理员,需要区别一下

net user xxx /domain

查询某个域用户的详细信息

net group /domain

查询域内用户组列表

有的域内可能会有部分的分组,比如信息组,财务组

net group caiwu /domain

查询域内某个组下用户

(查询caiwu这个用户组下的用户)

net accounts /domain

查询域密码策略

net group "domain controllers" /domain

查询所有域控列表

想要知道域控的ip是多少时,那么直接ping机器名即可

net view \ net group "domain computers" /domain

查询域内机器列表

2.2.4 查找机器上保存的敏感密码以及敏感文件

根据文件名称搜索:

2.3 自动化搜集工具

2.3.1 ADRecon

项目地址:

PowerShell中有四种不同类型的执行策略:

  • 受限:在此策略中,不会执行任何脚本。

  • RemoteSigned:在此策略中,仅运行那些脚本,这些脚本是从Internet下载的,并且必须由受信任的发布者签名。

  • 不受限制:Windows PowerShell的所有脚本均已运行。

  • AllSigned:仅可以运行由受信任的发布者签名的那些脚本。

由于Windows PowerShell的默认执行策略受到限制,因此我们无法运行任何脚本,除非对脚本进行更改。 首先,我们使用以下命令将执行策略设置为Unrestricted以执行脚本。

使用ADRecon进行信息搜集

完成后会生成csv文件。

2.3.2 Snaffler

运行此工具需要.net4,为此在2022-2的机器上完成的操作(需要关闭杀软)。

2.3.3 BloodHound

随后命令启动bloodhound

随后在域控内的主机中,使用SharpHound进行信息搜集

将生成的压缩包xxxx_BloodHound.zip上传至bloodhound

剩下的内容即可在里面查看相关的数据。

口令攻击

从7-1主机上线msfshell后(普通域用户),提权至system权限

3.1 密码获取

在windows系统里有一个SAM(安全账户管理器)文件,里面存着所有本地用户的密码hash。 SAM文件在磁盘中的位置在C:\windows\system32\config\sam 主要⽤于 Windows 本地⽤户登录验证,但是因为安全问题,由于所有本地账户的密码 hash 都使⽤的是同⼀个 SYSKEY 进⾏加密,所以我们只需要拿到 SYSKEY 就可以把所有本地⽤户的密码和 hash 都提取出来。 ⼀般在⼀些⽼版本的机器:Windows Server 2003、Windows Server 2008、Windows 7 都能直接获取到明⽂密码 ⽽⼀些⾼版本的机器:Windows Server 2012、Windows 2016、Windows 10 就不能直接获取到明⽂密码,只能通过其他⼿段。 当我们将权限提升到管理员或者system时,此时我们就可以做提取明文密码以及hash的操作了。

lsass.exe是Windows系统的安全机制,主要用于本地安全和登陆策略,通常在我们登陆系统时输入密码后,密码便会存贮在lsass.exe内存中,经过wdigest和tspkg两个模块调用后,对其使用可逆的算法进行加密并存储在内存中,而通过工具对lsass.exe逆算获取到明文密码。

3.1.1 使用msf获取明文密码(win2008系统以下)

在msf中,如果获取到主机的system权限后,直接在meterpreter中执行相关指令即可直接尝试读取明文密码

3.1.2 使用mimikatz获取明文密码(win2008系统以下)

Mimikatz 是一款功能强大的后渗透工具,最具出名的功能就是从 lsass.exe 中抓取密码,当然它还可以⽤作提权、进程注入,读取进程内存,伪造票据等一些操作。

项目地址:

如果懒得下载最新版,kali中直接提供,直接访问/usr/share/windows-resources/mimikatz路径即可。

直接上传mimikatz至目标主机并使用

3.1.3 通过注册表获取hash后进行解密

在目标机器上获取到两个文件,然后使用mimikatz获取hash后,再进行解密.

先把当前系统注册表 SAM、SYSTEM 获取:

ps:能够解密的前提是密码的在彩虹表当中。

3.1.4 通过Procdump抓取lsass中的明文密码

Procdump 是微软官⽅发布的⼯具,使⽤该⼯具可以把lsass的内存dump下来,此方法可绕过防护软件 Procdump下载地址:

ProcDump - Sysinternals

使用Procdump把lsass的内存dump下来

使用mimikatz读取密码

在低版本中我们可以通过此类方法获取到明文密码及hash,但是在更高版本中就无法通过这些方法获取到。 在win10以及win2012系统及以上,默认情况下已禁⽤在内存缓存中存系统用户明文密码,再使用mimikatz获取时,在password字段显示null,所以在更高版本的操作系统时,需要利用其它方法。

3.1.5 win2012以上系统获取明文及hash

虽然在win10以及win2012系统及以上,默认情况下已禁⽤在内存缓存中存系统⽤户明⽂密码,但是当我们获取到了管理员权限后,我们可以通过修改注册表的方式来抓取明文,但是这个方法需要用户重新登录才能够抓取。 系统默认是没有我们需要的那个值的,我们需要添加。

关于win10的提权可尝试使用msf的windows/local/cve_2020_17136模块。

可先自行查看是否存在:

此时我们需要进行添加,添加完之后再进行查看,即可看到成功添加。

这样我们需要等目标机器重启或者注销,重新登录后就可以抓取到目标机器的明文密码了。

使用mimikatz的方式也同样的逻辑,就不在赘述。但是在实际的操作中,需要考虑更多的因素,诸如:

3.2 密码喷洒攻击

3.2.1 超级弱口令工具对域内进行密码喷洒

3.2.2 CrackMapExec 对域内进行密码喷洒

CrackMapExec(CME)是一款域内后渗透利用工具,使用方法比较多,此处只演示密码喷洒功能。在 Kali当中默认已经安装好。

指定用户名及哈希进行喷洒:之前我们读取到一个无法解密的NTLM的值,可以通过密文的方式进行碰撞。

3.2.3 metasploit对域内进⾏密码喷洒

可以使用scanner/smb/smb_login模块进行尝试。

其他类似的工具还有crack、kerbrute、Hydra

AD通用漏洞

4.1 CVE-2014-6324 (ms14-068)

漏洞原理:

前提条件:

利用过程:

获取到win7的权限后,搜集相关信息(命令片段)

梳理得到的信息:

生成对应的票据

4.2 CVE-2020-1472

4.3 CVE-2021-42287&42278

4.4 CVE-2019-1040

hash攻击

5.1 Kerberos 协议

Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 /服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos作为一 种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

Kerberos的三大要素:

Kerberos认证协议的基础概念:

KDC负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由以下服务组成:

如何想了解的更为细致可参阅帖子:

5.2 hash传递攻击

哈希传递(Pass The Hash)即PTH,也是内网渗透中较常见的一个术语,就是通过传递Windwos 本地账户或者域用户的hash值,达到控制其他服务器的目的,该⽅法通过找到与账户相关的密码 Hash(通常是 NTLM Hash)来进⾏攻击。在域环境中,⽤户登录计算机时使⽤的⼤概都是域账号,⼤量计算机在安装时会使⽤相同的本地管理员账户密码,因此如果计算机的本地管理员账户和密码相同的话,攻击者就能使⽤哈希传递攻击的⽅法登录内⽹中的其他计算机。 适用于无法获取到明文,且哈希值无法解密

坑:跨域使用hash传递,无法成功。怀疑问题出自2008与2022的smb版本不匹配。

5.3 黄金票据与白银票据

黄金票据:

白银票据:

简单来说,黄金票据具有所有服务的权限,而白银票据只有单一服务的权限。

Kerberos黄金票据是有效的TGT Kerberos票据,因为它是由域Kerberos帐户(KRBTGT)加密和签名的 。TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。 黄金票据的条件要求:

相关的信息搜集:

使用metasploit制作票据:

使用impacket进行测试:(测试前将kali指向至AD域的DNS)

其他攻击

约束委派与非约束委派

ipc$

ntds.dit 包括卷影复制 ...

最后更新于

这有帮助吗?