• XSS.stack #1 – первый литературный журнал от юзеров форума

Добавляемся в авторан | Task Scheluder COM

Jeffs

(L1) cache
Забанен
Регистрация
28.12.2018
Сообщения
611
Реакции
358
Пожалуйста, обратите внимание, что пользователь заблокирован
В общем-то, был в поисках актуального метода закрепа в системе. CurrentVersion\Run(Once) такая себе затея, решил попробовать через планировщик закрепиться.
Но, как оказалось, без админ-прав задание не создать, хотя если создавать через schtasks.exe - можно и из-под юзера.
C:
HRESULT SetStartupTask(LPCWSTR path, LPCWSTR taskName)
{
    HRESULT hRes = S_OK;
    ITaskService* taskService = nullptr;
    ITaskFolder* taskFolder = nullptr;
    ITaskDefinition* taskDef = nullptr;
    IActionCollection* actions = nullptr;
    ITriggerCollection* triggers = nullptr;
    IRegisteredTask* task = nullptr;

    do
    {
        hRes = CoInitialize(nullptr,);
        if (FAILED(hRes)) break;

        hRes = CoCreateInstance(CLSID_TaskScheduler, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskService, (LPVOID*)&taskService);
        if (FAILED(hRes)) break;

        hRes = taskService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
        if (FAILED(hRes)) break;

        hRes = taskService->GetFolder(_bstr_t(L"\\"), &taskFolder);
        if (FAILED(hRes)) break;

        hRes = taskService->NewTask(0, &taskDef);
        if (FAILED(hRes)) break;

        hRes = taskDef->get_Actions(&actions);
        if (SUCCEEDED(hRes))
        {
            IAction* action = nullptr;
            hRes = actions->Create(TASK_ACTION_EXEC, &action);
            if (SUCCEEDED(hRes))
            {
                IExecAction* execAction = nullptr;
                hRes = action->QueryInterface(IID_IExecAction, (void**)&execAction);
                if (SUCCEEDED(hRes))
                {
                    hRes = execAction->put_Path(_bstr_t(path));
                    execAction->Release();
                }
                action->Release();
            }
            actions->Release();
        }

        hRes = taskDef->get_Triggers(&triggers);
        if (SUCCEEDED(hRes))
        {
            ITrigger* trigger = nullptr;
            hRes = triggers->Create(TASK_TRIGGER_LOGON, &trigger);
            if (SUCCEEDED(hRes))
            {
                ILogonTrigger* logonTrigger = nullptr;
                hRes = trigger->QueryInterface(IID_ILogonTrigger, (void**)&logonTrigger);
                if (SUCCEEDED(hRes))
                {
                    hRes = logonTrigger->put_Id(_bstr_t(L"Default"));
                    logonTrigger->Release();
                }
                trigger->Release();
            }
            triggers->Release();
        }

        hRes = taskFolder->RegisterTaskDefinition(_bstr_t(taskName), taskDef, TASK_CREATE_OR_UPDATE, _variant_t(), _variant_t(), TASK_LOGON_INTERACTIVE_TOKEN, _variant_t(), &task);
    } while (FALSE);

    if (taskService) taskService->Release();
    if (taskFolder) taskFolder->Release();
    if (taskDef) taskDef->Release();
    if (task) task->Release();
    CoUninitialize();

    return hRes;
}

P.S советую обратить внимание на COM Hijaking.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Но, как оказалось, без админ-прав задание не создать, хотя если создавать через schtasks.exe - можно и из-под юзера.
Ну это странно, ты что-то не так делаешь значит, тк schtasks.exe тоже через этот COM-интерфейс работает.
 
актуального метода закрепа в системе
Это не актуальный закреп. Можно ещё лучше. Тут например проблема может быть в том, что NOD32 сагрится на таску, если в путях к запуску сомнительное приложение лежит.
Ну это странно, ты что-то не так делаешь значит, тк schtasks.exe тоже через этот COM-интерфейс работает.
Тут плюсую. Через COM можно и с под юзера прописаться.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это не актуальный закреп. Можно ещё лучше. Тут например проблема может быть в том, что NOD32 сагрится на таску, если в путях к запуску сомнительное приложение лежит
Не знал об этом. Мне нужно было создать таск на запуск explorer.exe с аргументами, так что не критично. Реализовал по другому.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Всё там создаётся и без прав админа, можешь глянуть как делать правильно в сорцах Карберпа
Потестил (win10 1909+updates, win7 sp1+updates), тоже без админ прав валится с ошибкой E_ACCESSDENIED.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Можно ещё лучше.
Например взять какой-нибудь need.dll, который идет подключается к VeryImportProgram.exe, которая прописана в авторане.
В этот самый need.dll впихнуть в ресурсы наш dll, после дизасмить need.dll и в точке входа прописать шелл, который создает новый тред, в котором из ресура берет нашу вредонос dll и мапирует в память и запускает.

Как думаете коллеги, есть подвох?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Например взять какой-нибудь need.dll, который идет подключается к VeryImportProgram.exe, которая прописана в авторане.
В этот самый need.dll впихнуть в ресурсы наш dll, после дизасмить need.dll и в точке входа прописать шелл, который создает новый тред, в котором из ресура берет нашу вредонос dll и мапирует в память и запускает.

Как думаете коллеги, есть подвох?
Обрати внимание на COM Hijaking, есть где разгуляться.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Обрати внимание на COM Hijaking, есть где разгуляться.
ну, такое себе
Например в твоем случае ты же сбрасываешь свою прогу куда-то, чтоб таску создать? (или я не правильно понял)
Недавно читал по СОМу, есть методы канеш, но все что видел - сбрасывается на диск.

Тот же длл хайджекинг.

В моем случае можно и зашифрованный dll в стаб поместить легетимного приложения и он будет декриптить. Например:
1. в нерабочем состоянии дамп проги тебе ничего не покажет.
2. Ничто не сбрасывается на диск.
3. Не используются ком интерфейсы, запуск других задач. Одним словом берешь дизасмишь и добавляешь шелл.
4. Авер скорее всего придаст в доверенный список такую прогу вместе с их dll, а в случае нахождения малвари, то юзер подумает, что авер тупит.

Никаких подвохов в своем методе не вижу(если ток Рел меня не вгонит в депресуху).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как вы без админа-то делаете? Не пойму. В %windir%\tasks можно писать лишь админу, хоть на десятке, хоть на семерке;
 
ну, такое себе
Например в твоем случае ты же сбрасываешь свою прогу куда-то, чтоб таску создать? (или я не правильно понял)
Недавно читал по СОМу, есть методы канеш, но все что видел - сбрасывается на диск.

Тот же длл хайджекинг.

В моем случае можно и зашифрованный dll в стаб поместить легетимного приложения и он будет декриптить. Например:
1. в нерабочем состоянии дамп проги тебе ничего не покажет.
2. Ничто не сбрасывается на диск.
3. Не используются ком интерфейсы, запуск других задач. Одним словом берешь дизасмишь и добавляешь шелл.
4. Авер скорее всего придаст в доверенный список такую прогу вместе с их dll, а в случае нахождения малвари, то юзер подумает, что авер тупит.

Никаких подвохов в своем методе не вижу(если ток Рел меня не вгонит в депресуху).
Если подразумевается патчинг точки входа для прыжка на твой шеллкод, то я тебя разочарую, ты изобрел файловый инфектор. И это выпалит почти любой АВ.
По поводу COM Hijacking, это вообще не лучший метод, больше подходит для малобюджетных APT
 
Пожалуйста, обратите внимание, что пользователь заблокирован
По поводу COM Hijacking, это вообще не лучший метод, больше подходит для малобюджетных APT
Хотелось бы услышать аргументы.
 
 
Как вы без админа-то делаете? Не пойму. В %windir%\tasks можно писать лишь админу, хоть на десятке, хоть на семерке;

Earlier you could do it as normal user, or in some cases you could add via RPC bug which was fixed earlier this year
 
Хотелось бы услышать аргументы.
1) Сброс DLL на диск.
2) DLL должны быть x86/64 для того, чтобы подтягиваться в соотв. процессы.
3) Нужда в запуске таргет процесса, для того чтобы он подтянул твою DLL.
4) Банальное палево АВ при попытке залезть в популярные процессы, от работы внутри которых есть profit
 
Пожалуйста, обратите внимание, что пользователь заблокирован
1) Сброс DLL на диск.
2) DLL должны быть x86/64 для того, чтобы подтягиваться в соотв. процессы.
3) Нужда в запуске таргет процесса, для того чтобы он подтянул твою DLL.
4) Банальное палево АВ при попытке залезть в популярные процессы, от работы внутри которых есть profit
У меня реализовано чуть по другому, без длл вообще. Лично я вижу один недостаток - требуется запуск системного процесса (в моем случае это explorer.exe). Но в любом случае, лучше техник я не знаю.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сброс DLL на диск.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как вы без админа-то делаете? Не пойму. В %windir%\tasks можно писать лишь админу, хоть на десятке, хоть на семерке;
А как schtasks.exe это делает от юзера?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Если подразумевается патчинг точки входа для прыжка на твой шеллкод, то я тебя разочарую, ты изобрел файловый инфектор. И это выпалит почти любой АВ.
Не, ни каких джампов и прочей ереси. Там свои тонкости были. Не хочу палить
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх