Преглед изворни кода

Set NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY if applicable and improve code readability

Tal Aloni пре 8 година
родитељ
комит
29828befb4

+ 9 - 1
SMBLibrary/Server/SMB1/NegotiateHelper.cs

@@ -72,7 +72,15 @@ namespace SMBLibrary.Server.SMB1
         private static NegotiateMessage CreateNegotiateMessage()
         {
             NegotiateMessage negotiateMessage = new NegotiateMessage();
-            negotiateMessage.NegotiateFlags = NegotiateFlags.UnicodeEncoding | NegotiateFlags.OEMEncoding | NegotiateFlags.Sign | NegotiateFlags.LanManagerKey | NegotiateFlags.NTLMKey | NegotiateFlags.AlwaysSign | NegotiateFlags.Version | NegotiateFlags.Use128BitEncryption | NegotiateFlags.Use56BitEncryption;
+            negotiateMessage.NegotiateFlags = NegotiateFlags.UnicodeEncoding |
+                                              NegotiateFlags.OEMEncoding |
+                                              NegotiateFlags.Sign |
+                                              NegotiateFlags.LanManagerKey |
+                                              NegotiateFlags.NTLMKey |
+                                              NegotiateFlags.AlwaysSign |
+                                              NegotiateFlags.Version |
+                                              NegotiateFlags.Use128BitEncryption |
+                                              NegotiateFlags.Use56BitEncryption;
             negotiateMessage.Version = Authentication.Version.Server2003;
             return negotiateMessage;
         }

+ 16 - 4
SMBLibrary/Server/SMB1/SessionSetupHelper.cs

@@ -171,13 +171,25 @@ namespace SMBLibrary.Server.SMB1
             return response;
         }
 
-        private static AuthenticateMessage CreateAuthenticateMessage(string accountNameToAuth, byte[] lmResponse, byte[] ntlmResponse)
+        private static AuthenticateMessage CreateAuthenticateMessage(string accountNameToAuth, byte[] lmChallengeResponse, byte[] ntChallengeResponse)
         {
             AuthenticateMessage authenticateMessage = new AuthenticateMessage();
-            authenticateMessage.NegotiateFlags = NegotiateFlags.UnicodeEncoding | NegotiateFlags.OEMEncoding | NegotiateFlags.Sign | NegotiateFlags.LanManagerKey | NegotiateFlags.NTLMKey | NegotiateFlags.AlwaysSign | NegotiateFlags.Version | NegotiateFlags.Use128BitEncryption | NegotiateFlags.Use56BitEncryption;
+            authenticateMessage.NegotiateFlags = NegotiateFlags.UnicodeEncoding |
+                                                 NegotiateFlags.OEMEncoding |
+                                                 NegotiateFlags.Sign |
+                                                 NegotiateFlags.LanManagerKey |
+                                                 NegotiateFlags.NTLMKey |
+                                                 NegotiateFlags.AlwaysSign |
+                                                 NegotiateFlags.Version |
+                                                 NegotiateFlags.Use128BitEncryption |
+                                                 NegotiateFlags.Use56BitEncryption;
+            if (ntChallengeResponse.Length >= 48)
+            {
+                authenticateMessage.NegotiateFlags |= NegotiateFlags.ExtendedSecurity;
+            }
             authenticateMessage.UserName = accountNameToAuth;
-            authenticateMessage.LmChallengeResponse = lmResponse;
-            authenticateMessage.NtChallengeResponse = ntlmResponse;
+            authenticateMessage.LmChallengeResponse = lmChallengeResponse;
+            authenticateMessage.NtChallengeResponse = ntChallengeResponse;
             authenticateMessage.Version = Authentication.Version.Server2003;
             return authenticateMessage;
         }