Чтение памяти процесса не имея прав администратора

Тема в разделе "WASM.WIN32", создана пользователем MirrorBlack, 4 июн 2009.

  1. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Надо узнать по PID имя процесса под учёткой пользователя (абсолютно бесправного).
    Набросал следующее:

    HMODULE hMod;
    DWORD cbNeeded;
    HANDLE hToken;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
    return FALSE;
    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
    CloseHandle(hToken);

    !!!!Валится здесь, на открытии процесса ERROR_ACCESS_DENIED
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwParentPID);
    if (!hProcess)
    return FALSE;
    if (EnumProcessModules(hProcess, &hMod, sizeof (hMod), &cbNeeded))
    {
    if (GetModuleFileNameEx(hProcess, hMod, szParentProcessPath, sizeof( szParentProcessPath))) //Путь и имя
    {
    CloseHandle(hProcess);
    return TRUE;
    }
    }
    CloseHandle(hProcess);
    return FALSE;

    Заранее отвечаю - да, под админом всё нормально.
     
  2. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    эксплоитом повышения привилегий если только.
     
  3. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    угу сплоетом, для какойнибудь winxp sp2 и ниже можно найти известные баги в апи ф-циях позволяющие читать память чужого процесса
     
  4. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    А цивмлизованные методы не существуют?
     
  5. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    А целевизованные методы узнать пароль админа, например, существуют? :LOL:
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    MirrorBlack
    А CreateToolhelp32Snapshot + Module32First не катит ?
     
  7. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Ursus
    Пароль админа знаю. Не догоняю, что мне это даёт. Запускать программу (или создавать процесс) от учётки админа?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    Ну так да.
     
  9. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    leo
    Не, не катит :dntknw:

    HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwParentPID);
    if (!pSnap)
    return FALSE;
    MODULEENTRY32 me;
    me.dwSize = sizeof MODULEENTRY32;
    if (!Module32First(pSnap, &me))
    return FALSE;

    CreateToolhelp32Snapshot возвращает INVALID_HANDLE_VALUE.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Имперсонация.
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    CreateProcessAsUser()
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Partner
    Тогда уж проще CreateProcessWithLogonW
     
  13. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Great
    Согласен, так проще. Не надо вызывать LogonUser()
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Зачем процесс создавать, вроде автору только токен нужен подходящий. Получаем его через LogonUser(), затем копируем себе посредством NtDuplicateToken и назначаем текущему треду(кл. ThreadImpersonationToken), для этого есть готовая апи ImpersonateLoggedOnUser() и на васме статья.
     
  15. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Спасибо за ответы.
    К варианту предложенному Clerk уже сам подбирался.
    И всё же странно, почему нельзя прочесть память процесса, зато можно его завершить.
    Вариант с SE_SHUTDOWN_NAME прокатывает на ура.
     
  16. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    MirrorBlack
    В висте есть процессы, которые в юзер-моде даже с полными админскими правами не прочитать.
    Например audiodg.