Установка привилегий

Тема в разделе "WASM.BEGINNERS", создана пользователем yurza, 10 мар 2009.

  1. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
    Что то я малям понять не могу как можно установить привилегию SE_CREATE_TOKEN_NAME;
    делаю так

    Код (Text):
    1. LUID ss;
    2. LookupPrivilegeValue(NULL,SE_CREATE_TOKEN_NAME,&ss);
    3. if (_RtlAdjustPrivilege(ss.LowPart,TRUE,FALSE,&en)==STATUS_PRIVILEGE_NOT_HELD)
    4. {
    5. MessageBoxA(NULL,"Касячок","ds",0);
    6. }
    _RtlAdjustPrivilege получаю динамически;
    Другие привелегии типа SE_DEBUG_NAME нормально получаю а вот SE_CREATE_TOKEN_NAME не могу
    _RtlAdjustPrivilege возврашает C0000061
    ОС win2k Пользователь Администратор
    Объясните пожалуйста.
     
  2. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    OpenProcessToken где?
     
  3. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
    Попытался переписать что то типа такого
    Код (Text):
    1. *(FARPROC *)&_NtOpenProcessToken=GetProcAddress(GetModuleHandle("ntdll"), "NtOpenProcessToken");
    2. *(FARPROC *)&_NtAdjustPrivilegesToken=GetProcAddress(GetModuleHandle("ntdll"), "NtAdjustPrivilegesToken");
    3. TOKEN_PRIVILEGES NewState;
    4. TOKEN_PRIVILEGES OldState;
    5. ULONG ReturnLength;
    6. HANDLE TokenHandle;
    7. NTSTATUS Status;
    8. LUID Privilege;
    9. Status=_NtOpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&TokenHandle);
    10. if (!NT_SUCCESS(Status))
    11.     {
    12.     MessageBoxA(0,"NtOpenProcessToken","",0);
    13.     }
    14. LookupPrivilegeValue(NULL,SE_CREATE_TOKEN_NAME, &Privilege);
    15. OldState.PrivilegeCount = 1;
    16. NewState.PrivilegeCount = 1;
    17. NewState.Privileges[0].Luid=Privilege;
    18. NewState.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
    19. Status = _NtAdjustPrivilegesToken(TokenHandle,FALSE,&NewState,sizeof(TOKEN_PRIVILEGES),&OldState,&ReturnLength);
    20.  
    21. if (Status == STATUS_NOT_ALL_ASSIGNED)
    22.      {
    23.        MessageBoxA(0,"STATUS_NOT_ALL_ASSIGNED","",0);
    24.      }
    Теперь валится _NtAdjustPrivilegesToken в 106 ошибку
     
  4. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    yurza
    Не правильно функциию вызываешь LookupPrivilegeValue,там надо строкой передавать привилегию...

    BOOL LookupPrivilegeValue(

    LPCTSTR lpSystemName, // address of string specifying the system
    LPCTSTR lpName, // address of string specifying the privilege
    PLUID lpLuid // address of locally unique identifier
    );

    вот такого вида она должна быть
    LookupPrivilegeValueA(0,"SeDebugPrivilege",&luid);

    а вообще вот код:
    int ChangePriv()
    {
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tkp;
    DWORD rb;

    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
    LookupPrivilegeValueA(0,"SeDebugPrivilege",&luid);
    tkp.PrivilegeCount=1;
    tkp.Privileges->Luid.HighPart=luid.HighPart;
    tkp.Privileges->Luid.LowPart=luid.LowPart;
    tkp.Privileges->Attributes=SE_PRIVILEGE_ENABLED;
    return AdjustTokenPrivileges(hToken,0,&tkp,sizeof(tkp),&tkp,&rb);
    }
     
  5. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
    а разве в winnt.h
    они не определены как
    #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
    #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
    SeDebugPrivilege у меня нормально вызывается
    а вот SeCreateTokenPrivilege нет
     
  6. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    угу проверил,ошибка NOT_ALL_ASSIGNED...Ну так как Adjust тока включает или выключает привилегии,а не добавляет новые,выходит что данный токен не обладает такой привилегией...Или я не прав?
     
  7. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
    Да я вот тоже к этому скланяюсь смотрю Sysinternals Process Explorer только сервисы имеют SeCreateTokenPrivilege привилегию и то не все будем копать в сторону добавления привелегий если это возможно.
     
  8. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    yurza
    смотрел в поиске пишут вроде как не возможно...Если есть то они есть а если нет то их нет...Но если у тебя что получится то отпишись...
     
  9. yurza

    yurza New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    69
    Если каму интересно Ну вообшем чтобы получить привилегию SeCreateTokenPrivilege покавырял я тут и пришол к выводу что нужно влючить в "gpedit.msc" Груповая палитика->Назначение прав пользователей->Создание маркерного объекта ну к примеру Администратору разрешение и рестарт тогда данная привелегия появится на процессах от админа ну а потом Enable её программно.
     
  10. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    Ну это пользовательски а не программно делается...Поэтому может поковыряешься и программно намутишь?=)