c# 实现whoami /priv命令 不使用Process
时间: 2024-03-11 16:49:18 浏览: 89
whoami-priv:我在Romhack 2018上的演讲“ whoami priv”的幻灯片
如果不使用 `Process` 类来启动新进程,我们可以使用 `System.Management` 命名空间中的 `ManagementObjectSearcher` 类和 `Win32_LogonSession` WMI 类来获取当前用户的权限信息。具体实现如下:
```csharp
using System.Management;
public static void WhoAmIWithPriv()
{
string query = "SELECT * FROM Win32_LogonSession WHERE LogonType = 2";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection results = searcher.Get();
foreach (ManagementObject result in results)
{
string sessionId = result["LogonId"].ToString();
string accountName = result["UserName"].ToString();
// Get the privilege information for the session.
ManagementObjectSearcher privilegeSearcher =
new ManagementObjectSearcher(
"root\\CIMV2",
"SELECT * FROM Win32_LogonSession WHERE LogonId = '" + sessionId + "'");
foreach (ManagementObject privilegeResult in privilegeSearcher.Get())
{
ManagementObjectCollection privilegeCollection = privilegeResult.GetRelated("Win32_Privileges");
foreach (ManagementObject privilege in privilegeCollection)
{
Console.WriteLine("{0}: {1}", privilege["DisplayName"], privilege["Status"]);
}
}
}
}
```
该方法中,我们首先使用 WMI 查询获取当前用户的登录会话信息,包括会话 ID 和用户账户名。然后再使用 WMI 查询获取该会话的权限信息,并将权限的名称和状态打印到控制台上。
需要注意的是,使用 WMI 查询获取信息的方式相对于启动新进程来说会更加安全和稳定,但是同时也会更加复杂和耗时。因此,如果只需要简单地执行 `whoami /priv` 命令并获取其结果,建议使用前面提到的 `Process` 类方法。
阅读全文