Winapi 使用SSPI时如何获得权限?
当您使用安全支持提供程序接口(SSPI)API验证用户的凭据时,服务器最终会有一个句柄 然后,您可以使用函数查询有关安全上下文句柄的信息:Winapi 使用SSPI时如何获得权限?,winapi,kerberos,sspi,Winapi,Kerberos,Sspi,当您使用安全支持提供程序接口(SSPI)API验证用户的凭据时,服务器最终会有一个句柄 然后,您可以使用函数查询有关安全上下文句柄的信息: QueryContextAttributes(句柄,) tsStart:建立上下文的时间 tsExpiry:上下文将过期的时间 QueryContextAttributes(句柄,) sAuthorityName:验证机构的名称(如果可用) QueryContextAttributes(句柄,) tsPasswordExpires:当安全上下文的
QueryContextAttributes(句柄,
)
- tsStart:建立上下文的时间
- tsExpiry:上下文将过期的时间
QueryContextAttributes(句柄,
)
- sAuthorityName:验证机构的名称(如果可用)
QueryContextAttributes(句柄,
)
- tsPasswordExpires:当安全上下文的凭据过期时李>
QueryContextAttributes(句柄,
)
- 名称:安全包的名称
- 注释:这可以是包传回的任何附加字符串
QueryContextAttributes(句柄,
)
- sClientName:出站票证中客户端的主体名称
- sServerName:出站票证中服务器的主体名称
QueryContextAttributes(句柄,
)
- sTargetName:初始目标的SPN
- 上下文句柄:
0x04CC9F4000AC8B80
- 用户名:
STACKOVERFLOW\ian
- 本机客户端名称:
ian@STACKOVERFLOW.COM
- 本机服务器名称:
ian@STACKOVERFLOW.COM
- 用户SID:
S-1-5-21-1708537768-844245398-2146844275-1109
- 客户端指定的目标:
ian
- 权限:
请求的功能不受支持(80090302)
- 密码过期(UTC):
- 寿命开始:
2019年10月23日11:03ᴀᴍ代码>
- 使用期限到期:
2019年10月23日7:32ᴘᴍ代码>
- 包名称:
Kerberos
- 软件包注释:
MicrosoftKerberos V1.0
- 包功能:
0x028F3BBF
- 软件包版本:
0001
- 包Rpc ID:
0010
- 包最大令牌长度:
48000
SECPKG\u ATTR\u AUTHORITY
调用QueryContextAttributes(和QueryContextAttributesEx)失败,错误如下:
// MessageId: SEC_E_UNSUPPORTED_FUNCTION
//
// MessageText:
//
// The function requested is not supported
//
SEC_E_UNSUPPORTED_FUNCTION = HRESULT($80090302);
你在干什么
我可以使用命令行找到它:
C:\Users\Ian>SET
LOGONSERVER=\\HYDROGEN
但我使用的是API
背景:SSPI的工作原理
SSPI被设计成围绕不同安全算法的通用包装器。使用API的方法非常简单:
- 客户端:
- 调用
,并得到一个blobInitializeSecurityContext
- 客户端将该blob发送到服务器
- 调用
- 服务器:
- 调用AcceptSecurityContext(blob),并返回一个blob
- 服务器将该blob发送回客户端
- 客户端:
- 调用
,并返回一个blobInitializeSecurityContext(blob)
- 客户端将该blob发送回服务器
- 调用
- 服务器:
- 调用AcceptSecurityContext(blob),并返回一个blob
- …不断重复,直到被告知停止
// Open connection to server
sockConnect(162.210.196.166, 1433);
blob = null;
Boolean bContinue = InitializeSecurityContext(ref blob);
while (bContinue)
{
sockWrite(blob); //send the blob to the server
blob = sockRead(); //wait for the server to return a blob
bContinue = InitializeSecurityContext(ref blob);
}
如果您是通过http执行此操作:
blob = null;
Boolean bContinue = InitializeSecurityContext(ref blob);
while (bContinue)
{
http = new HttpRequest("http://4chan.org/default.aspx");
http.AddHeader("X-SSPI-Blob", blob.ToBase64());
http.Send();
blob = http.ReasponseHeader["X-SSPI-Blob"];
if (blob.IsEmpty())
break;
bContinue = InitializeSecurityContext(ref blob);
}
你甚至可以通过信鸽发送它们
额外阅读
SSPI是的Windows实现的名称
通用安全服务应用程序接口(GSS-API)
奖金
- “我应该将TargetName设置为什么?”
SECPKG\u ATTR\u AUTHORITY
属性,导致参数无效错误。并导致链接错误。它似乎在Secur32.lib
中丢失了。因此,您可以显示可复制的演示和步骤吗?我在Windows 10 1903上进行了测试。@RitaHan MSFT如果您使用C/C++;SDK,链接失败是有意义的.lib文件不正确。请确保加载SspiCli.dll和导出的QueryContextAttributesExW(或Ansi等效)函数。但我不会太努力:QueryContextAttributesEx
也会失败。感谢您指导我找到方法。是的,我复制了此问题。(错误0x80090302)我将就此问题咨询相关工程师,并在此处尽快更新。顺便问一下,您的Windows版本是什么?@RitaHan MSFT>ver
:Microsoft Windows[version 10.0.18362.418]
不支持SECPKG\u ATTR\u AUTHORITY
属性,导致参数对我无效。请重新安装