Windows環境下提升程式的許可權
有時候我們需要對程式的許可權進行提升,從而使程式能進行某種操作,如開啟系統程式等等。
在Windows環境下,程式許可權的種類定義如下(定義在winnt.h
):
#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
#define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME TEXT("SeDelegateSessionUserImpersonatePrivilege")
提升程式許可權的流程如下:
- 使用
OpenProcessToken
獲取需要提升許可權的程式的“令牌”。 - 使用
LookupPrivilegeValue
函式,根據許可權的“名稱字串”查詢到許可權在對應系統上的LUID。同一個許可權在不同系統上的LUID不同。 - 使用
AdjustTokenPrivileges
函式,向指定程式的“令牌”新增或刪除許可權。
將上面流程封裝到EnablePrivilege
函式,szPrivilege
傳入許可權名稱字串,新增許可權時fEnable
傳TRUE
, 移除許可權時fEnable
傳FALSE
:
BOOL EnablePrivilege(LPCTSTR szPrivilege, BOOL fEnable) {
BOOL fOk = FALSE;
HANDLE hToken = NULL;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, szPrivilege, &tp.Privileges[0].Luid);
tp.Privileges->Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
fOk = (GetLastError() == ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOk;
}
相關文章
- 利用PATH環境變數 - 提升linux許可權~?變數Linux
- Guest許可權突破——許可權提升方法總結(轉)
- 許可權概念、許可權提升概念以及許可權提升的分類和目的 Windows 提權的基礎原理是瞭解作業系統的安全機制和許可權管理 Windows提權攻擊的進一步知識概念Windows作業系統
- 超過40個Windows裝置驅動程式包含提升許可權的漏洞Windows
- Linux 下程式許可權分析Linux
- Windows許可權維持Windows
- Metasploit許可權提升全劇終
- windows下程式設計中的多使用者、許可權問題Windows程式設計
- 解決Python虛擬環境virtualenv下不能使用sudo提升許可權問題Python
- Windows環境下ORA-12638錯誤及SYS使用者登陸許可權驗證Windows
- Android程式保活(二):利用 Notification 提升許可權Android
- 在Windows低許可權下利用服務進行提權Windows
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 研究發現超過 40 個 Windows 裝置驅動程式包含提升許可權的漏洞Windows
- Windows環境下的Nginx環境搭建WindowsNginx
- Docker安全:通過Docker提升許可權Docker
- vscode在Linux環境下執行“許可權不夠”的解決方法VSCodeLinux
- .NET 程式許可權控制、獲得管理員許可權程式碼
- 基於Linux許可權提升的資訊收集Linux
- 紅客必學:Windows下的許可權設定詳解Windows
- Linux 下許可權的管理Linux
- Solaris下控制ftp的許可權FTP
- windows環境下Django環境搭建WindowsDjango
- Windows許可權設定詳解Windows
- windows7管理員許可權Windows
- 使用LDAP查詢快速提升域許可權LDA
- AIX 的許可許可權(轉)AI
- MySQL 如何快速複製使用者許可權到其他環境MySql
- C#不提升自己程式的許可權實現操作登錄檔C#
- FreeBSD程式的許可權(轉)
- 許可權之選單許可權
- 許可權控制下的SQL寫法SQL
- Windows環境下的資訊收集Windows
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- windows server許可權對tomcat的影響WindowsServerTomcat
- Shiro許可權管理框架(二):Shiro結合Redis實現分散式環境下的Session共享框架Redis分散式Session