diff --git a/SMBLibrary/Authentication/AuthenticateMessage/AuthenticateMessage.cs b/SMBLibrary/Authentication/AuthenticateMessage/AuthenticateMessage.cs index a156453..354858e 100644 --- a/SMBLibrary/Authentication/AuthenticateMessage/AuthenticateMessage.cs +++ b/SMBLibrary/Authentication/AuthenticateMessage/AuthenticateMessage.cs @@ -27,7 +27,7 @@ namespace SMBLibrary.Authentication public string WorkStation; public byte[] EncryptedRandomSessionKey; public NegotiateFlags NegotiateFlags; - public Version Version; + public NTLMVersion Version; // 16-byte MIC field is omitted for Windows NT / 2000 / XP / Server 2003 public AuthenticateMessage() @@ -53,7 +53,7 @@ namespace SMBLibrary.Authentication NegotiateFlags = (NegotiateFlags)LittleEndianConverter.ToUInt32(buffer, 60); if ((NegotiateFlags & NegotiateFlags.Version) > 0) { - Version = new Version(buffer, 64); + Version = new NTLMVersion(buffer, 64); } } diff --git a/SMBLibrary/Authentication/AuthenticateMessage/ChallengeMessage.cs b/SMBLibrary/Authentication/AuthenticateMessage/ChallengeMessage.cs index d73ad7a..d9a6305 100644 --- a/SMBLibrary/Authentication/AuthenticateMessage/ChallengeMessage.cs +++ b/SMBLibrary/Authentication/AuthenticateMessage/ChallengeMessage.cs @@ -23,7 +23,7 @@ namespace SMBLibrary.Authentication public byte[] ServerChallenge; // 8 bytes // Reserved - 8 bytes public byte[] TargetInfo; // sequence of AV_PAIR structures - public Version Version; + public NTLMVersion Version; public ChallengeMessage() { @@ -42,7 +42,7 @@ namespace SMBLibrary.Authentication TargetInfo = AuthenticationMessageUtils.ReadBufferPointer(buffer, 40); if ((NegotiateFlags & NegotiateFlags.Version) > 0) { - Version = new Version(buffer, 48); + Version = new NTLMVersion(buffer, 48); } } diff --git a/SMBLibrary/Authentication/AuthenticateMessage/Version.cs b/SMBLibrary/Authentication/AuthenticateMessage/NTLMVersion.cs similarity index 75% rename from SMBLibrary/Authentication/AuthenticateMessage/Version.cs rename to SMBLibrary/Authentication/AuthenticateMessage/NTLMVersion.cs index c4e765e..49bc0e0 100644 --- a/SMBLibrary/Authentication/AuthenticateMessage/Version.cs +++ b/SMBLibrary/Authentication/AuthenticateMessage/NTLMVersion.cs @@ -11,7 +11,10 @@ using Utilities; namespace SMBLibrary.Authentication { - public class Version + /// + /// [MS-NLMP] 2.2.2.10 - VERSION + /// + public class NTLMVersion { public const byte NTLMSSP_REVISION_W2K3 = 0x0F; @@ -21,7 +24,7 @@ namespace SMBLibrary.Authentication // Reserved - 3 bytes public byte NTLMRevisionCurrent; - public Version(byte majorVersion, byte minorVersion, ushort build, byte ntlmRevisionCurrent) + public NTLMVersion(byte majorVersion, byte minorVersion, ushort build, byte ntlmRevisionCurrent) { ProductMajorVersion = majorVersion; ProductMinorVersion = minorVersion; @@ -29,7 +32,7 @@ namespace SMBLibrary.Authentication NTLMRevisionCurrent = ntlmRevisionCurrent; } - public Version(byte[] buffer, int offset) + public NTLMVersion(byte[] buffer, int offset) { ProductMajorVersion = ByteReader.ReadByte(buffer, offset + 0); ProductMinorVersion = ByteReader.ReadByte(buffer, offset + 1); @@ -45,19 +48,19 @@ namespace SMBLibrary.Authentication ByteWriter.WriteByte(buffer, offset + 7, NTLMRevisionCurrent); } - public static Version WindowsXP + public static NTLMVersion WindowsXP { get { - return new Version(5, 1, 2600, NTLMSSP_REVISION_W2K3); + return new NTLMVersion(5, 1, 2600, NTLMSSP_REVISION_W2K3); } } - public static Version Server2003 + public static NTLMVersion Server2003 { get { - return new Version(5, 2, 3790, NTLMSSP_REVISION_W2K3); + return new NTLMVersion(5, 2, 3790, NTLMSSP_REVISION_W2K3); } } } diff --git a/SMBLibrary/Authentication/AuthenticateMessage/NegotiateMessage.cs b/SMBLibrary/Authentication/AuthenticateMessage/NegotiateMessage.cs index 5cd7b8e..d810ae1 100644 --- a/SMBLibrary/Authentication/AuthenticateMessage/NegotiateMessage.cs +++ b/SMBLibrary/Authentication/AuthenticateMessage/NegotiateMessage.cs @@ -21,7 +21,7 @@ namespace SMBLibrary.Authentication public NegotiateFlags NegotiateFlags; public string DomainName; public string Workstation; - public Version Version; + public NTLMVersion Version; public NegotiateMessage() { @@ -40,7 +40,7 @@ namespace SMBLibrary.Authentication Workstation = AuthenticationMessageUtils.ReadAnsiStringBufferPointer(buffer, 24); if ((NegotiateFlags & NegotiateFlags.Version) > 0) { - Version = new Version(buffer, 32); + Version = new NTLMVersion(buffer, 32); } } diff --git a/SMBLibrary/SMBLibrary.csproj b/SMBLibrary/SMBLibrary.csproj index 622ac4c..cb007be 100644 --- a/SMBLibrary/SMBLibrary.csproj +++ b/SMBLibrary/SMBLibrary.csproj @@ -40,7 +40,7 @@ - + diff --git a/SMBLibrary/Server/IndependentUserCollection.cs b/SMBLibrary/Server/IndependentUserCollection.cs index cd3b153..9d9a499 100644 --- a/SMBLibrary/Server/IndependentUserCollection.cs +++ b/SMBLibrary/Server/IndependentUserCollection.cs @@ -147,7 +147,7 @@ namespace SMBLibrary.Server message.TargetName = Environment.MachineName; message.ServerChallenge = serverChallenge; message.TargetInfo = AVPairUtils.GetAVPairSequence(Environment.MachineName, Environment.MachineName); - message.Version = Authentication.Version.Server2003; + message.Version = NTLMVersion.Server2003; return message; } diff --git a/SMBLibrary/Server/SMB1/NegotiateHelper.cs b/SMBLibrary/Server/SMB1/NegotiateHelper.cs index d52290b..f2a1e62 100644 --- a/SMBLibrary/Server/SMB1/NegotiateHelper.cs +++ b/SMBLibrary/Server/SMB1/NegotiateHelper.cs @@ -81,7 +81,7 @@ namespace SMBLibrary.Server.SMB1 NegotiateFlags.Version | NegotiateFlags.Use128BitEncryption | NegotiateFlags.Use56BitEncryption; - negotiateMessage.Version = Authentication.Version.Server2003; + negotiateMessage.Version = NTLMVersion.Server2003; return negotiateMessage; } } diff --git a/SMBLibrary/Server/SMB1/SessionSetupHelper.cs b/SMBLibrary/Server/SMB1/SessionSetupHelper.cs index b359c56..6819b9b 100644 --- a/SMBLibrary/Server/SMB1/SessionSetupHelper.cs +++ b/SMBLibrary/Server/SMB1/SessionSetupHelper.cs @@ -191,7 +191,7 @@ namespace SMBLibrary.Server.SMB1 authenticateMessage.UserName = accountNameToAuth; authenticateMessage.LmChallengeResponse = lmChallengeResponse; authenticateMessage.NtChallengeResponse = ntChallengeResponse; - authenticateMessage.Version = Authentication.Version.Server2003; + authenticateMessage.Version = NTLMVersion.Server2003; return authenticateMessage; } } diff --git a/SMBLibrary/Tests/AuthenticationTests.cs b/SMBLibrary/Tests/AuthenticationTests.cs index bb627af..164a6dd 100644 --- a/SMBLibrary/Tests/AuthenticationTests.cs +++ b/SMBLibrary/Tests/AuthenticationTests.cs @@ -96,7 +96,7 @@ namespace SMBLibrary byte[] serverChallenge = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; ChallengeMessage message = new ChallengeMessage(); message.ServerChallenge = serverChallenge; - message.Version = new Authentication.Version(6, 0, 6000, 15); + message.Version = new NTLMVersion(6, 0, 6000, 15); message.NegotiateFlags = NegotiateFlags.UnicodeEncoding | NegotiateFlags.OEMEncoding | NegotiateFlags.Sign | NegotiateFlags.Seal | NegotiateFlags.NTLMKey | NegotiateFlags.AlwaysSign | NegotiateFlags.TargetTypeServer | NegotiateFlags.ExtendedSecurity | NegotiateFlags.TargetInfo | NegotiateFlags.Version | NegotiateFlags.Use128BitEncryption | NegotiateFlags.KeyExchange | NegotiateFlags.Use56BitEncryption; message.TargetName = "Server"; byte[] serverAVPair = AVPairUtils.GetAVPairSequence("Domain", "Server"); @@ -138,7 +138,7 @@ namespace SMBLibrary AuthenticateMessage message = new AuthenticateMessage(); message.EncryptedRandomSessionKey = sessionKey; - message.Version = new Authentication.Version(5, 1, 2600, Authentication.Version.NTLMSSP_REVISION_W2K3); + message.Version = new NTLMVersion(5, 1, 2600, Authentication.NTLMVersion.NTLMSSP_REVISION_W2K3); message.NegotiateFlags = NegotiateFlags.UnicodeEncoding | NegotiateFlags.TargetNameSupplied | NegotiateFlags.Sign | NegotiateFlags.Seal | NegotiateFlags.NTLMKey | NegotiateFlags.AlwaysSign | NegotiateFlags.ExtendedSecurity | NegotiateFlags.TargetInfo | NegotiateFlags.Version | NegotiateFlags.Use128BitEncryption | NegotiateFlags.KeyExchange | NegotiateFlags.Use56BitEncryption; message.DomainName = "Domain"; message.WorkStation = "COMPUTER";