Windows管理员权限思考

您所在的位置:网站首页 管理员有哪些权限 Windows管理员权限思考

Windows管理员权限思考

2024-07-10 10:18| 来源: 网络整理| 查看: 265

进程以管理员权限和非管理员权限运行有很大的特权差别,具体怎么检查当前进程是否以管理员权限运行,代码如下:

#include #include #include int main() { BOOL IsMember; PSID l_pSid=NULL; SID_IDENTIFIER_AUTHORITY IdentifierAuthority=SECURITY_NT_AUTHORITY; //#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} // 生成一个当前进程的PSID AllocateAndInitializeSid(&IdentifierAuthority,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,&l_pSid); // 检查当前进程的PSID是否是管理员权限 CheckTokenMembership(NULL,l_pSid,&IsMember); FreeSid(l_pSid); if(IsMember==TRUE) { printf("当前用户是以管理员权限运行\n"); } else printf("当前用户不是以管理员权限运行\n"); system("pause"); return 0; }

Windows10下使用不同方式运行,结果如下图:

恶意代码往往也喜欢知道自身进程的运行权限,汇编代码如下:

续一(通过系统漏洞升级为管理员权限):

管理员权限和非管理员权限到底有哪些区别,可以通过使用不同身份的cmd窗口输入whoami/ALL查看,Windows10中测试如下图:

非管理员权限只有5个特权,其中包括更改时区、关机;管理员权限有n个特权,包括更改时间、远程强制关机、调试程序。

如果一个恶意进程想要从非管理员升级到管理员,在操作系统看来是不合法的,这样的恶意进程会绞尽脑汁利用操作系统的漏洞来获得管理员权限(XP系统没有区分这2个概念,都是管理员权限;WIndows7区分的有点模糊,也可能我用的是盗版系统),至于获得管理员权限后,恶意进程如何利用管理员那些特权、做了哪些坏事,见续二。

续二(启用管理员权限的SeDebugPrivilege特权):

恶意进程从非管理员权限到获取管理员权限,也就有了n个特权,其中SeDebugPrivilege特权特别重要,看MSDN中如何描述:If the caller has enabled the SeDebugPrivilege privilege, the requested access is granted regardless of the contents of the security descriptor。

SeDebugPrivilege特权在续一的图片有看到,但是状态时禁用的,就需要激活或者说时启用(很多地方都说是提权,很不恰当,而且容易和上面的提权概念搞混),启用代码如下:

#include #include BOOL SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege) { TOKEN_PRIVILEGES tp; LUID luid; if( !LookupPrivilegeValue(NULL,lpszPrivilege,&luid) ) { printf("LookupPrivilegeValue error: %u\n", GetLastError() ); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; if( bEnablePrivilege ) tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes=0; if( !AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL) ) { printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); return FALSE; } if( GetLastError()==ERROR_NOT_ALL_ASSIGNED ) { printf("The token does not have the specified privilege. \n"); return FALSE; } return TRUE; } int main( ) { HANDLE hToken; BOOL bRet=OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken); SetPrivilege(hToken,SE_DEBUG_NAME,TRUE); return 1; }

续三(启用SeDebugPrivilege特权的管理员权限进程):

现在好了,管理员权限有了,SeDebugPrivilege特权也启用了,可以做那些事呢?

恶意进程常用的就是控制其他进程,比如ReadProcessMemory( )、WriteProcessMemory()、CreateRemoteThread( )、ExitProcess( )

如果进程不是管理员权限或者没有启用SeDebugPrivilege特权,这些函数调用写的再正确,权限不允许,白废功夫。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3