2011-11-03 57 views
0

任何人都知道我會如何做一個手動netlogon或任何其他方式來驗證遠程域上的用戶?我需要測試身份驗證。手冊netlogon

現在我們正在使用模擬和調用任意函數。問題是將會登錄的任意winapi函數。問題是有些域允許通過空會話調用該函數,從而導致誤報。

這樣做的唯一目標是針對本地計算機未添加到的遠程域獲得可靠,快速的身份驗證,所以我不會否認另一種方法。

這是我們從提交MSDN票據獲得的解決方案。

if(!LogonUser(username.c_str(), domain.c_str(), password.c_str(), LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &token)) 
{ 
    debug->DebugMessage(Error::GetErrorMessageW(GetLastError())); 
    CloseHandle(token); 
    RevertToSelf(); 
    return false; 
} 

if(!ImpersonateLoggedOnUser(token)) 
{ 
    debug->DebugMessage(Error::GetErrorMessageW(GetLastError())); 
    CloseHandle(token); 
    RevertToSelf(); 
    return false; 
} 
... 

int err = NetUserModalsGet .... 

if (err != ERROR_SUCCESS) logged_on = false; 
RevertToSelf(); 
+0

請解釋您正在使用的一些術語。 「手動」網絡登錄?你是什​​麼意思?另外,什麼是誤報,什麼是空會話? –

+0

空會話是不需要身份驗證的登錄。 – Bluebaron

+0

我只想要一個netlogon而不調用一個需要netlogon的winapi函數。 – Bluebaron

回答

1

如果您要做的就是回答「這些憑據對於我可能不是成員的給定域有效嗎?那麼你可能會在現有的東西中看到一些篡改。許多Linux/UNIX應用程序針對沒有域成員資格的任意域提供NTLM身份驗證。大多數使用winbindd,我懷疑在Windows系統上運行將會有問題。

值得注意的是,雖然有一個apache module爲此,它可以運行沒有任何外部依賴。您可能會通過其源查找某些運氣,尤其是mod_ntlm.c並查看它們如何爲域控制器製作請求數據包並解析響應。

+0

我認爲[mod-auth-sspi](http://sourceforge.net/projects/mod-auth-sspi/)可能與mod_ntlm – Hasturkun

+0

@Hasturkun稍有關係 - 好點,它取決於某個版本的Windows有問題的域控制器正在運行。 – Flexo

+0

是的。我正在尋找這個問題的答案。我希望有一種方法可以用WINAPI做到這一點,但我會考慮手動雕刻數據包。不過,我並不喜歡這種前景。 – Bluebaron

0

不確定您是否考慮過在遠程域上使用Windows集成安全性時存在許多基礎結構配置問題。信託政策是否適當?您使用NTLM,Kerberos,PKU2U,DPA等的哪個SSPI?

這些配置是否適合您的使用場景?

好的......在聽說了更多關於您的情況後,您是否考慮過利用定製的GINA?

http://msdn.microsoft.com/en-us/library/aa380543(v=VS.85).aspx

+0

我正在嘗試使用NTLM。那麼我設置協商。 Wireshark的以下內容: 如果 如果 NetUserModalsGet(L 「remotepc」,3(LogonUser的(L 「XXX」 L 「XXX」 L 「XXX」,LOGON32_LOGON_NEW_CREDENTIALS,LOGON32_PROVIDER_WINNT50,與令牌)!)(ImpersonateLoggedOnUser(標記)!) ,&b); 你得到一個NTLMSSP_NEGOTIATE包。 – Bluebaron

+0

GINAs不再被支持。 – Bluebaron