LogonUserA 和 ImpersonateLoggedOnUser 是强大的 Windows API,允许程序以指定用户的身份操作。攻击者利用这些函数可模拟合法用户权限,用于横向移动或访问敏感资源。
Sharp4NoPSExec.exe 便是一款利用 Windows API 提供的用户令牌登录与模拟功能,通过提供有效的凭据,在目标主机上执行指定的命令的红队工具。
01. 验证用户凭据
Windows API 中 LogonUserA 函数用于验证用户的凭据,包含用户名、密码、域,并创建一个新的用户令牌 Token。该令牌可用于模拟用户权限或在当前进程中执行该用户上下文的操作,函数签名如下所示。
BOOL LogonUserA(
LPCSTR lpszUsername, // 用户名
LPCSTR lpszDomain, // 域名
LPCSTR lpszPassword, // 密码
DWORD dwLogonType, // 登录类型
DWORD dwLogonProvider, // 登录提供程序
PHANDLE phToken // 返回的用户令牌
);
dwLogonType参数的值,LOGON32_LOGON_INTERACTIVE 表示交互式登录。最终函数返回的 phToken 是用于后续用户模拟操作的关键句柄。
在 .NET 中使用 DllImport 特性将其从 advapi32.dll 动态链接库导入调用的方法如下所示。
[DllImport("advapi32.dll&#