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

NtCreateProcessEx

CCod

(L3) cache
Пользователь
Регистрация
08.01.2022
Сообщения
280
Реакции
60
Всем привет,пытаюсь заюзать NtCreateProcessEx для процесс холовинга с пид спуфингом.
код выглядит както так:

HANDLE pH = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid); // открываем хэндл для пид спуфинга
NtCreateProcessEx(&newPH, PROCESS_ALL_ACCESS, NULL, pH, 0, NULL, NULL, NULL, 0); // тк мы передаем хэндл процесса NtCreateProcessEx копирует процесс на который указывает pH

Но когда пытаюсь создать поток ничего не происходит. GetLastError возвращает 0.
Пеб абсолютно такой же как как в клонируемом процессе. Следовательно мне не надо расставлять параметры процесса.

Что я делаю не так?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
GetLastError возвращает 0
Nt* функции возвращают NT_STATUS, его и проверяй. LastError в PEB устанавливают только более "высокие" по уровню абстракции функции. В PEB есть LastNtStatus или как-то так, но нет смысла его считывать из PEB, если функция сама статус возвращает.
 
Nt* функции возвращают NT_STATUS, его и проверяй. LastError в PEB устанавливают только более "высокие" по уровню абстракции функции. В PEB есть LastNtStatus или как-то так, но нет смысла его считывать из PEB, если функция сама статус возвращает.
ntcreatethreadex возвращает отрицательное число,таких статусов в мсдн нет
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ntcreatethreadex возвращает отрицательное число,таких статусов в мсдн нет
Открой виндовый калькулятор перейди в режим программист, выстави числа как 4 байта(dword), поставь десятичную систему счисления, введи свое отрицательное число и переключить на шестнадцатиричную систему. И ты получишь свой статус
 
ntcreatethreadex возвращает отрицательное число,таких статусов в мсдн нет
Так что возвращает?
Кстати, PROCESS_ALL_ACCESS в юзер моде может не работать, но это не точно
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
ntcreatethreadex возвращает отрицательное число,таких статусов в мсдн нет
Лол, выведи его как unsigned int (ну мы теперь как минимум знаем, что это ошибочный статус, так как 0xC0******, что в signed int естественно отрицательное число).
 
Лол, выведи его как unsigned int (ну мы теперь как минимум знаем, что это ошибочный статус, так как 0xC0******, что в signed int естественно отрицательное число).
Тупанул,
Статус c000010a .В мсдн написано :An attempt was made to duplicate an object handle into or out of an exiting process.

Еще в одном месте написано : Попытка доступа к процессу, выполняющему процедуру завершения
 
Тупанул,
Статус c000010a .В мсдн написано :An attempt was made to duplicate an object handle into or out of an exiting process.

Еще в одном месте написано : Попытка доступа к процессу, выполняющему процедуру завершения
C++:
#define THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE 0x00000040 // NtCreateThreadEx only

^ в CreateFlags параметр NtCreateThreadEx
 
C++:
#define THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE 0x00000040 // NtCreateThreadEx only

^ в CreateFlags параметр NtCreateThreadEx
не помогло,тот же статус
 
STATUS_PROCESS_IS_TERMINATING

Тут есть рабочий пример:
 
Пожалуйста, обратите внимание, что пользователь заблокирован
не помогло,тот же статус
Поток может в нем создать, не?
 
Тут есть рабочий пример:
Да примеры много где есть,но у меня чето не работает.
Тут точно не рабочая версия так как они поток не создают
 
Поток может в нем создать, не?
так это статус NtCreateThreadEx , сам процесс создается я его вижу в проц хакере
хэндл на него тоже валидный
 
Пожалуйста, обратите внимание, что пользователь заблокирован
так это статус NtCreateThreadEx , сам процесс создается я его вижу в проц хакере
хэндл на него тоже валидный
Приведи весь код.
 
Приведи весь код.
unsigned char my_payload[] = "";

HANDLE nTh = NULL;
size_t pid = 3384;
HANDLE pH = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid);
HANDLE newPH = NULL;
ULONG wB = 0;

UNICODE_STRING victim_path;
PRTL_USER_PROCESS_PARAMETERS proc_parameters = 0;

NtCreateProcessEx(&newPH, GENERIC_ALL, NULL, pH, 4, NULL, NULL, NULL, 0);

LPVOID addr = VirtualAllocEx(newPH, NULL, sizeof(my_payload), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(newPH,addr,my_payload,sizeof(my_payload),(PSIZE_T)& wB);

NTSTATUS success = NtCreateThreadEx(&nTh, THREAD_ALL_ACCESS, NULL, newPH, (PUSER_THREAD_START_ROUTINE)addr, NULL, 0x00000040 NULL, NULL, NULL, NULL);
 
Приведи весь код.
в этом примере https://github.com/jxy-s/herpaderping дописывали некоторые переменные среды в пеб создаваемого проццесса,но я не понимаю зачем(пеб у процесса pH такой же как и у создаваемого ).
Когда я пробовал сделать также у меня не писалось в пеб
 
Внимательней изучайте, как сейчас создается процесс в современных виндах
CreateProcessW -> CreateProcessInternalW -> NtCreateUserProcess -> NtResumeThread
И между этими вызовами еще порядка 10-15 вызовов вспомогательных апишек настраивающих окружение процесса

NtCreateProcess/Ex напрямую работал в XP и то достаточно криво без доп. настроек процесса.

Что бы понять, что ты делаешь не так, поставь бряк на CreateProcessW, вызови ее в своей программе, когда брякнешься, проследи весь путь до NtCreateUserProcess и NtResumeThread, посмотри какие аргументы кладутся, на что указывают, какие флаги, структуры и тд используются.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
но я не понимаю зачем
Ну, мне не приходилось делать то, что ты делаешь, поэтому утверждать я не берусь, но логично предположить, что если этот пример работает, а твой код нет, и отличаются они только этим, то тебе нужно делать так, как в рабочем примере, не?
 
Ну, мне не приходилось делать то, что ты делаешь, поэтому утверждать я не берусь, но логично предположить, что если этот пример работает, а твой код нет, и отличаются они только этим, то тебе нужно делать так, как в рабочем примере, не?
Контекст. В одном контексте что то работает а в другом не будет. Возьми нечто простое CreateEvent и посмотри какой путь до NtCreateEvent оно проходит в Xp, W7, W10. А для прцесса все еще сложнее.
 


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