public override Server creack(string ip, int port, string username, string password, int timeOut) { Server server = new Server(); try { if ("".Equals("空")) { password = ""; } UniAddress ud = UniAddress.GetByName(ip); NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(ip, username, password); SmbConstants.DefaultConnTimeout = timeOut * 1000; SmbConstants.DefaultResponseTimeout = timeOut * 1000; SmbConstants.DefaultSoTimeout = timeOut * 1000; SmbSession.Logon(ud, port, auth);//验证是否能够成功登录 server.isSuccess = true; } catch (SmbAuthException fe) { server.isSuccess = false; } catch (Exception e) { throw e; } return(server); }
private TaskStatus SendFileSmb(string file) { SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137"); var auth = new NtlmPasswordAuthentication(_shareFolder.Domen, _shareFolder.UserName, _shareFolder.Password); var address = Path.Combine(@"smb://", _shareFolder.Address, Path.GetFileName(file)); var smb = new SmbFile(address, auth); try { if (smb.Exists()) { smb.Delete(); } smb.CreateNewFile(); using (var writeStream = smb.GetOutputStream()) { writeStream.Write(GetCopiedFile(file)); } _logger.LogInformation("Успешно"); return(TaskStatus.Completed); } catch (SmbException smbException) { FailedCopyingFiles.WithLabels("Ошибка при подключении").Set(1); _logger.LogError(smbException, "Ошибка при подключении"); return(TaskStatus.Error); } catch (Exception ex) { FailedCopyingFiles.WithLabels("Ошибка при копировании файла").Set(1); _logger.LogError(ex, "Ошибка при копировании файла"); return(TaskStatus.Error); } }
public void startSMBRelay(Queue <byte[]> ntlmQueue, String cmd) { Config.setNtlmContextFactory(new Config.QueuedNtlmContextFactoryImpl()); NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(".", "", ""); auth.additionalData = ntlmQueue; Console.WriteLine("Setting up SMB relay..."); /* * SmbFile f = new SmbFile("smb://127.0.0.1/C$/Windows/System32/utilman.exe", auth); * SmbFileOutputStream os = new SmbFileOutputStream(f); * os.Write(System.Text.Encoding.Unicode.GetBytes("start cmd.exe /k \"whoami\"")); * os.Close();*/ bool status = doPsexec("C:\\Windows\\System32\\cmd.exe", auth, cmd); if (status) { Console.WriteLine("Successfully started service"); ntlmQueue.Enqueue(new byte[] { 99 }); Config.signalHandlerClient.Set(); } else { Console.WriteLine("Failed"); } }
public static void Main(string[] args) { if (!Secrets.HasSecrets) { Console.WriteLine("F**K OFF!!!!"); } Info.ServerName = Secrets.Get("ServerName"); Info.ServerIP = Secrets.Get("ServerIp"); Info.UserName = Secrets.Get("UserName"); Info.Password = Secrets.Get("Password"); Auth = new NtlmPasswordAuthentication(null, Info.UserName, Info.Password); //**Change local port for NetBios. // In many cases, use of the well-known port is restricted. ** SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "2137"); BigFileTranferTest(); Program.NameResolutionTest2(); Program.NameResolutionTest(); Program.LanScanTest(); var end = 1; }
private Bitmap PegarImagensServidor(RegistroDeReforma registroDeReforma, int index) { Bitmap imagem = null; indexAtual = index; try { var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1); var fullClientName = registroDeReforma.NomeCliente.RemoveSpecialCaracters(); var apelido = registroDeReforma.NomeFantasia.RemoveSpecialCaracters(); var cityName = registroDeReforma.Cidade.RemoveSpecialCaracters(); var dateRR = DateTime.Now; var nf = registroDeReforma.NotaFiscal; var rr = registroDeReforma.DescricaoRR; var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters(); var smbPath = ConfigurationBase.Instance.SmbPath; var filePath = string.Format(ConfigurationBase.Instance.FilePath, firstLetterClient, fullClientName, apelido, cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd()); var auth2 = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword); var pathConfirm = new SmbFile(string.Format("{0}/{1}", smbPath, filePath), auth2); //Create file. if (pathConfirm.Exists()) { SmbFile file = pathConfirm.ListFiles().ToList()[index]; if (file.IsFile()) { //Get readable stream. var readStream = file.GetInputStream(); //Create reading buffer. var memStream = new MemoryStream(); //Get bytes. ((Stream)readStream).CopyTo(memStream); //Dispose readable stream. readStream.Dispose(); byte[] byteImage = memStream.ToArray(); imagem = BitmapFactory.DecodeByteArray(byteImage, 0, byteImage.Length); } } else { throw new Exception("Diretório não encontrado"); } } catch (Exception ex) { Program.Main.ShowMessage(ex.Message, Android.Widget.ToastLength.Long, Base.Enums.ToastMessageType.Error); } return(imagem); }
/// <exception cref="UnknownHostException"></exception> /// <exception cref="System.UriFormatException"></exception> /// <exception cref="SharpCifs.Dcerpc.DcerpcException"></exception> public DcerpcPipeHandle(string url, NtlmPasswordAuthentication auth) { Binding = ParseBinding(url); url = "smb://" + Binding.Server + "/IPC$/" + Runtime.Substring(Binding.Endpoint , 6); string @params = string.Empty; string server; string address; server = (string)Binding.GetOption("server"); if (server != null) { @params += "&server=" + server; } address = (string)Binding.GetOption("address"); if (server != null) { @params += "&address=" + address; } if (@params.Length > 0) { url += "?" + Runtime.Substring(@params, 1); } Pipe = new SmbNamedPipe(url, (unchecked (0x2019F) << 16) | SmbNamedPipe.PipeTypeRdwr | SmbNamedPipe.PipeTypeDceTransact, auth); }
/// <exception cref="UnknownHostException"></exception> /// <exception cref="System.UriFormatException"></exception> /// <exception cref="WinrtCifs.Dcerpc.DcerpcException"></exception> public static DcerpcHandle GetHandle(string url, NtlmPasswordAuthentication auth) { if (url.StartsWith("ncacn_np:")) { return(new DcerpcPipeHandle(url, auth)); } throw new DcerpcException("DCERPC transport not supported: " + url); }
/// <summary> /// Constructs the NT response to the given Type-2 message using /// the supplied password. /// </summary> /// <remarks> /// Constructs the NT response to the given Type-2 message using /// the supplied password. /// </remarks> /// <param name="type2">The Type-2 message.</param> /// <param name="password">The password.</param> /// <returns>A <code>byte[]</code> containing the NT response.</returns> public static byte[] GetNTResponse(Type2Message type2, string password) { if (type2 == null || password == null) { return(null); } return(NtlmPasswordAuthentication.GetNtlmResponse(password, type2.GetChallenge())); }
private void InserirImagensServidor(RegistroDeReforma registroDeReforma) { foreach (var item in registroDeReforma.ListaDeImagens) { try { //Remover Caracteres Especiais, Nome, NomeFantasia, Descricao do Equipamento e Cidade // //Primeira Letra nome Cliente/Nome -- //NomeFantasia /Unidade {Cidade}/Ano/NF NroNota R.R. NroRRConsulta DescricaoEquipamento/ //NomeImagem DataComUnderline //Get the SmbFile specifying the file name to be created. var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1); var fullClientName = registroDeReforma.NomeCliente.RemoveSpecialCaracters(); var apelido = registroDeReforma.NomeFantasia.RemoveSpecialCaracters(); var cityName = registroDeReforma.Cidade.RemoveSpecialCaracters(); var dateRR = DateTime.Parse(registroDeReforma.DataCadastro); var nf = registroDeReforma.NotaFiscal; var rr = registroDeReforma.DescricaoRR; var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters(); var smbPath = ConfigurationBase.Instance.SmbPath; var filePath = string.Format(ConfigurationBase.Instance.FilePath, firstLetterClient, fullClientName, apelido, cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd()); var fileName = string.Format("{0}.{1}", DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff").Replace('/', '_').Replace(':', '_').Replace(' ', '_'), "jpg"); var auth2 = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword); var pathConfirm = new SmbFile(string.Format("{0}/{1}", smbPath, filePath), auth2); //Create file. if (!pathConfirm.Exists()) { pathConfirm.Mkdirs(); } var file = new SmbFile(string.Format("{0}/{1}/{2}", smbPath, filePath, fileName), auth2); file.CreateNewFile(); //Get writable stream. var writeStream = file.GetOutputStream(); //Write bytes. writeStream.Write(Helpers.Helpers.GetImageArray(item)); //Dispose writable stream. writeStream.Dispose(); } catch (Exception ex) { throw new Exception(ex.Message); } } }
public static byte[] GetLMv2Response(Type2Message type2, string domain, string user , string password, byte[] clientChallenge) { if (type2 == null || domain == null || user == null || password == null || clientChallenge == null) { return(null); } return(NtlmPasswordAuthentication.GetLMv2Response(domain, user, password, type2.GetChallenge (), clientChallenge)); }
private void CreateConnection() { if (_cifsOptions is SmbCifsBasicOptions optionsBasic) { if (optionsBasic.Hostname == null) { throw new ArgumentNullException(nameof(optionsBasic.Hostname)); } if (optionsBasic.Domain == null) { throw new ArgumentNullException(nameof(optionsBasic.Domain)); } if (optionsBasic.Username == null) { throw new ArgumentNullException(nameof(optionsBasic.Username)); } if (optionsBasic.UserPassword == null) { throw new ArgumentNullException(nameof(optionsBasic.UserPassword)); } _auth = new NtlmPasswordAuthentication(optionsBasic.Domain, optionsBasic.Username, optionsBasic.UserPassword); } else if (_cifsOptions is SmbCifsExtendedOptions optionsExtended) { if (optionsExtended.Hostname == null) { throw new ArgumentNullException(nameof(optionsExtended.Hostname)); } if (optionsExtended.Domain == null) { throw new ArgumentNullException(nameof(optionsExtended.Domain)); } if (optionsExtended.Username == null) { throw new ArgumentNullException(nameof(optionsExtended.Username)); } if (optionsExtended.Challenge == null) { throw new ArgumentNullException(nameof(optionsExtended.Challenge)); } if (optionsExtended.AnsiHash == null) { throw new ArgumentNullException(nameof(optionsExtended.AnsiHash)); } if (optionsExtended.UnicodeHash == null) { throw new ArgumentNullException(nameof(optionsExtended.UnicodeHash)); } _auth = new NtlmPasswordAuthentication(optionsExtended.Domain, optionsExtended.Username, optionsExtended.Challenge, optionsExtended.AnsiHash, optionsExtended.UnicodeHash); } }
public static byte[] GetNtlMv2Response(Type2Message type2, byte[] responseKeyNt, byte[] clientChallenge) { if (type2 == null || responseKeyNt == null || clientChallenge == null) { return(null); } long nanos1601 = (Runtime.CurrentTimeMillis() + MillisecondsBetween1970And1601 ) * 10000L; return(NtlmPasswordAuthentication.GetNtlMv2Response(responseKeyNt, type2.GetChallenge (), clientChallenge, nanos1601, type2.GetTargetInformation())); }
static void Main(string[] args) { var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()). AddJsonFile("appsettings.json") .Build(); var auth = new NtlmPasswordAuthentication(string.Format("{0}:{1}", config["UserName"], config["Password"])); var folder = new SmbFile(string.Format("smb://{0}", config["NetworkPath"]), auth); Console.WriteLine(folder.GetPath()); var writeStream = folder.GetOutputStream(); writeStream.Write(Encoding.UTF8.GetBytes("Hello!")); writeStream.Dispose(); Console.WriteLine("hi"); }
private static void NameResolutionTest2() { var naddr = NbtAddress.GetByName($"COCO4"); Out($"{naddr.GetHostName()}"); var auth = new NtlmPasswordAuthentication("", Info.UserName, Info.Password); var namedServer = new SmbFile($"smb://{Info.ServerIP}/", auth); var exists = namedServer.Exists(); var list = namedServer.ListFiles(); foreach (var smb in list) { Out($"{smb.GetName()}"); } }
public bool doPsexec(String binPath, NtlmPasswordAuthentication auth, String cmd) { Random rnd = new Random(); int randInt = rnd.Next(1, 10000000); String host = "127.0.0.1"; DcerpcHandle handle = DcerpcHandle.GetHandle("ncacn_np:" + host + "[\\pipe\\svcctl]", auth); // Open the SCManager on the remote machine and get a handle // for that open instance (scManagerHandle). Rpc.PolicyHandle scManagerHandle = new Rpc.PolicyHandle(); svcctl.OpenSCManager openSCManagerRpc = new svcctl.OpenSCManager("\\\\" + host, null, (0x000F0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020), scManagerHandle); handle.Sendrecv(openSCManagerRpc); if (openSCManagerRpc.retval != 0) { throw new SmbException(openSCManagerRpc.retval, true); } Rpc.PolicyHandle svcHandle = new Rpc.PolicyHandle(); svcctl.OpenService openServiceRpc = new svcctl.OpenService(scManagerHandle, "GetShell" + randInt, svcctl.SC_MANAGER_ALL_ACCESS, svcHandle); handle.Sendrecv(openServiceRpc); // If the service didn't exist, create it. if (openServiceRpc.retval == 1060) { // Create a new service. svcHandle = new Rpc.PolicyHandle(); //code 272 is for an interactive, own process service this was originally svcctl.SC_TYPE_SERVICE_WIN32_OWN_PROCESS svcctl.CreateServiceW createServiceWRpc = new svcctl.CreateServiceW( scManagerHandle, "GetShell" + randInt, "GetShell" + randInt, svcctl.SC_MANAGER_ALL_ACCESS, 272, svcctl.SC_START_TYPE_SERVICE_DEMAND_START, svcctl.SC_SERVICE_ERROR_NORMAL, cmd, null, null, null, 0, null, null, 0, svcHandle); handle.Sendrecv(createServiceWRpc); if (createServiceWRpc.retval != 0) { throw new SmbException(createServiceWRpc.retval, true); } } svcctl.StartService startServiceRpc = new svcctl.StartService(svcHandle, 0, new String[0]); handle.Sendrecv(startServiceRpc); return(true); }
private SmbFolder(SmbFile parent, String subPath) { try { if (!subPath.EndsWith("/")) { subPath = subPath + "/"; } if (parent == null || String.IsNullOrEmpty(parent.Server)) { #if DEBUG_SAMBA Android.Util.Log.Debug("SmbClient", "Create file with root path: " + "smb://" + subPath); #endif if (parent.Principal == null || String.IsNullOrEmpty(((NtlmPasswordAuthentication)parent.Principal).Username)) { NtlmPasswordAuthentication auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication("LAST_USED_AUTH", null); if (auth != null) { mSmbFile = new SmbFile("smb://" + subPath, auth); } else { mSmbFile = new SmbFile("smb://" + subPath, new NtlmPasswordAuthentication(String.Empty, "GUEST", String.Empty)); } } else { mSmbFile = new SmbFile("smb://" + subPath, (NtlmPasswordAuthentication)parent.Principal); } } else { #if DEBUG_SAMBA Android.Util.Log.Debug("SmbClient", "Create file with sub path: " + parent.Path + "/" + subPath); #endif mSmbFile = new SmbFile(parent, subPath); } } catch (SmbException ex) { LogException(ex); throw new System.IO.IOException(ex.Message, ex); } }
public void AuthTest() { var auth1 = new NtlmPasswordAuthentication($"{this.UserName}:{this.Password}"); var startTime = default(DateTime); var file = new SmbFile(this.GetUriString("FreeArea/SharpCifsTest/test.txt")); Assert.IsTrue(file.Exists()); startTime = DateTime.Now; for (var i = 0; i < 5; i++) { var file1 = new SmbFile($"smb://{this.ServerName}/FreeArea/SharpCifsTest/test.txt", auth1); Assert.IsTrue(file1.Exists()); } this.Out($"use auth1: {(DateTime.Now - startTime).TotalMilliseconds} msec"); var auth2 = new NtlmPasswordAuthentication(null, this.UserName, this.Password); startTime = DateTime.Now; for (var i = 0; i < 5; i++) { var file1 = new SmbFile($"smb://{this.ServerName}/FreeArea/SharpCifsTest/test.txt", auth2); Assert.IsTrue(file1.Exists()); } this.Out($"use auth2: {(DateTime.Now - startTime).TotalMilliseconds} msec"); startTime = DateTime.Now; for (var i = 0; i < 5; i++) { var file1 = new SmbFile( $"smb://{this.UserName}:{this.Password}@{this.ServerName}/FreeArea/SharpCifsTest/test.txt"); Assert.IsTrue(file1.Exists()); } this.Out($"use url : {(DateTime.Now - startTime).TotalMilliseconds} msec"); }
private int PegaQuantidadeImagensServidor(RegistroDeReforma registroDeReforma) { int quantidadeImagens = 0; try { var firstLetterClient = registroDeReforma.NomeCliente.Substring(0, 1); var fullClientName = registroDeReforma.NomeCliente.RemoveSpecialCaracters(); var apelido = registroDeReforma.NomeFantasia.RemoveSpecialCaracters(); var cityName = registroDeReforma.Cidade.RemoveSpecialCaracters(); var dateRR = DateTime.Now; var nf = registroDeReforma.NotaFiscal; var rr = registroDeReforma.DescricaoRR; var eqDesc = registroDeReforma.Equipamento.RemoveSpecialCaracters(); var smbPath = ConfigurationBase.Instance.SmbPath; var filePath = string.Format(ConfigurationBase.Instance.FilePath, firstLetterClient, fullClientName, apelido, cityName, dateRR.Year, nf, rr, eqDesc.TrimEnd()); var auth2 = new NtlmPasswordAuthentication(ConfigurationBase.Instance.NetworkDomain, ConfigurationBase.Instance.NetworkUser, ConfigurationBase.Instance.NetworkPassword); var pathConfirm = new SmbFile(string.Format("{0}{1}", smbPath, filePath), auth2); //Create file. if (pathConfirm.Exists()) { quantidadeImagens = pathConfirm.ListFiles().Length; } else { quantidadeImagens = 0; } } catch (Exception ex) { Program.Main.ShowMessage(ex.Message, Android.Widget.ToastLength.Long, Base.Enums.ToastMessageType.Error); } return(quantidadeImagens); }
private async Task GetData() { try { Trace.WriteLine(Invariant($"Connecting to {DeviceIP}")); ClearSmbState(); DateTime localTime = DateTime.Now.ToLocalTime(); string path = Invariant($"smb://{DeviceIP}/airvisual/{localTime.Year}{localTime.Month:00}_AirVisual_values.txt"); var auth = new NtlmPasswordAuthentication(null, credentials.UserName, credentials.Password); string lastString = null; var smbFile = new SmbFile(path, auth, SmbFile.FileShareRead | SmbFile.FileShareWrite); smbFile.Connect(); using (Stream fileStream = smbFile.GetInputStream()) { var length = fileStream.Length; Trace.WriteLine(Invariant($"Reading from {path} with size {length} Bytes")); int bufferSize = 512; fileStream.Seek(-Math.Min(bufferSize, length), SeekOrigin.End); var pos = fileStream.Position; using (var reader = new StreamReader(fileStream, Encoding.ASCII, false, bufferSize)) { string lastData = await reader.ReadToEndAsync().ConfigureAwait(false); foreach (var reading in lastData.Split('\n')) { if (!string.IsNullOrWhiteSpace(reading)) { lastString = reading; } } } } if (string.IsNullOrWhiteSpace(lastString)) { throw new IOException("Last String Read From file is empty"); } Trace.WriteLine(Invariant($"Found data {lastString} from {path}")); var tokens = lastString.Split(';'); SensorData sensorData = new SensorData { //Date;Time;Timestamp;PM2_5(ug/m3);AQI(US);AQI(CN);PM10(ug/m3);Outdoor AQI(US);Outdoor AQI(CN);Temperature(C);Temperature(F);Humidity(%RH);CO2(ppm);VOC(ppb) updateTime = new DateTime(DateTimeOffset.FromUnixTimeSeconds(ParseLong(tokens, 2)).Ticks) }; if (lastUpdate != sensorData.updateTime) { sensorData.PM25 = ParseValue(tokens, 3); sensorData.PM25AQI = ParseValue(tokens, 4); sensorData.PM25AQICN = ParseValue(tokens, 5); sensorData.PM10 = ParseValue(tokens, 6); sensorData.OutsidePM25AQI = ParseValue(tokens, 7); sensorData.OutsidePM25AQICN = ParseValue(tokens, 8); sensorData.TemperatureC = ParseValue(tokens, 9); sensorData.TemperatureF = ParseValue(tokens, 10); sensorData.Humidity = ParseValue(tokens, 11); sensorData.CO2 = ParseValue(tokens, 12); UpdateDelta(sensorData); lastUpdate = sensorData.updateTime; Trace.TraceInformation(Invariant($"Updated data for device {DeviceIP} for time {sensorData.updateTime}")); } } catch (Exception ex) { if (ex.IsCancelException()) { throw; } Trace.TraceError(Invariant($"Failed to get data from {DeviceIP}. {ex.GetFullMessage()}.")); } }
/// <summary>Creates a Type-3 message in response to the given Type-2 message.</summary> /// <remarks>Creates a Type-3 message in response to the given Type-2 message.</remarks> /// <param name="type2">The Type-2 message which this represents a response to.</param> /// <param name="password">The password to use when constructing the response.</param> /// <param name="domain">The domain in which the user has an account.</param> /// <param name="user">The username for the authenticating user.</param> /// <param name="workstation"> /// The workstation from which authentication is /// taking place. /// </param> public Type3Message(Type2Message type2, string password, string domain, string user, string workstation, int flags) { SetFlags(flags | GetDefaultFlags(type2)); if (workstation == null) { workstation = GetDefaultWorkstation(); } SetWorkstation(workstation); SetDomain(domain); SetUser(user); switch (LmCompatibility) { case 0: case 1: { if ((GetFlags() & NtlmsspNegotiateNtlm2) == 0) { SetLmResponse(GetLMResponse(type2, password)); SetNtResponse(GetNTResponse(type2, password)); } else { // NTLM2 Session Response byte[] clientChallenge = new byte[24]; //RANDOM.NextBytes(clientChallenge); Arrays.Fill(clientChallenge, 8, 24, unchecked ((byte)unchecked (0x00))); // NTLMv1 w/ NTLM2 session sec and key exch all been verified with a debug build of smbclient byte[] responseKeyNt = NtlmPasswordAuthentication.NtowFv1(password); byte[] ntlm2Response = NtlmPasswordAuthentication.GetNtlm2Response(responseKeyNt, type2.GetChallenge(), clientChallenge); SetLmResponse(clientChallenge); SetNtResponse(ntlm2Response); if ((GetFlags() & NtlmsspNegotiateSign) == NtlmsspNegotiateSign) { byte[] sessionNonce = new byte[16]; Array.Copy(type2.GetChallenge(), 0, sessionNonce, 0, 8); Array.Copy(clientChallenge, 0, sessionNonce, 8, 8); Md4 md4 = new Md4(); md4.Update(responseKeyNt); byte[] userSessionKey = md4.Digest(); Hmact64 hmac = new Hmact64(userSessionKey); hmac.Update(sessionNonce); byte[] ntlm2SessionKey = hmac.Digest(); if ((GetFlags() & NtlmsspNegotiateKeyExch) != 0) { _masterKey = new byte[16]; //RANDOM.NextBytes(masterKey); byte[] exchangedKey = new byte[16]; Rc4 rc4 = new Rc4(ntlm2SessionKey); rc4.Update(_masterKey, 0, 16, exchangedKey, 0); SetSessionKey(exchangedKey); } else { _masterKey = ntlm2SessionKey; SetSessionKey(_masterKey); } } } break; } case 2: { byte[] nt = GetNTResponse(type2, password); SetLmResponse(nt); SetNtResponse(nt); break; } case 3: case 4: case 5: { byte[] responseKeyNt1 = NtlmPasswordAuthentication.NtowFv2(domain, user, password); byte[] clientChallenge1 = new byte[8]; //RANDOM.NextBytes(clientChallenge_1); SetLmResponse(GetLMv2Response(type2, domain, user, password, clientChallenge1)); byte[] clientChallenge2 = new byte[8]; //RANDOM.NextBytes(clientChallenge2); SetNtResponse(GetNtlMv2Response(type2, responseKeyNt1, clientChallenge2)); if ((GetFlags() & NtlmsspNegotiateSign) == NtlmsspNegotiateSign) { Hmact64 hmac = new Hmact64(responseKeyNt1); hmac.Update(_ntResponse, 0, 16); // only first 16 bytes of ntResponse byte[] userSessionKey = hmac.Digest(); if ((GetFlags() & NtlmsspNegotiateKeyExch) != 0) { _masterKey = new byte[16]; //RANDOM.NextBytes(masterKey); byte[] exchangedKey = new byte[16]; Rc4 rc4 = new Rc4(userSessionKey); rc4.Update(_masterKey, 0, 16, exchangedKey, 0); SetSessionKey(exchangedKey); } else { _masterKey = userSessionKey; SetSessionKey(_masterKey); } } break; } default: { SetLmResponse(GetLMResponse(type2, password)); SetNtResponse(GetNTResponse(type2, password)); break; } } }
public void GetCanonicalPathTest() { var stopHere = 1; var auth = new NtlmPasswordAuthentication($"{this.UserName}:{this.Password}"); string url; string path; SmbFile smb; //ファイル名 - 加工なし url = $"smb://{this.ServerName}/Apps/Others/[BinaryEditor] Stirling.zip"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual(url, path); //フォルダ名 - 加工なし url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual(url, path); //不正なフォルダ名だが、加工なし url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual(url, path); //相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path); //相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/.././"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path); //相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../."; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path); //相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/.."; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/FreeArea/", path); //相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../../Apps/./Others/[BinaryEditor] Stirling.zip"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/Apps/Others/[BinaryEditor] Stirling.zip", path); //実際に存在するかどうかは検証せず、相対パスを絶対化 url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest/../../NOT-EXISTS-SHARE/NOT-EXISTS-FILE.txt"; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/NOT-EXISTS-SHARE/NOT-EXISTS-FILE.txt", path); //末尾にスペースを入れる url = $"smb://{this.ServerName}/FreeArea/SharpCifsTest "; smb = new SmbFile(url, auth); path = smb.GetCanonicalPath(); Assert.AreEqual($"smb://{this.ServerName}/FreeArea/SharpCifsTest", path); //スペースが無くなるはず }
public SmbFileOperationHelper(IConfiguration iconfiguration) { this.iconfiguration = iconfiguration; InitializeFromAppSettings(); authenticationObject = new NtlmPasswordAuthentication(Domain, User, Password); }
public Task <List <String> > GetSubFolderNames() { if (mSmbFile == null) { return(Task.FromResult(new List <String>())); } return(Task.Factory.StartNew(() => { var result = new List <String>(); try { bool hasTriedLastAuth = false; SmbOperations.WithRetries(() => { result.Clear(); try { #if DEBUG_SAMBA Android.Util.Log.Debug("SmbClient", "Getting sub folders"); #endif var subList = mSmbFile.ListFiles(); foreach (var element in subList) { try { if (!element.IsFile) { switch (element.Type) { case SmbFile.TypeFilesystem: case SmbFile.TypeWorkgroup: case SmbFile.TypeServer: case SmbFile.TypeShare: result.Add(element.Name); break; default: break; } } } catch (SmbException) { } catch (Java.IO.IOException) { } } return result; } catch (SmbAuthException ex) { NtlmPasswordAuthentication auth = null; if (!hasTriedLastAuth) { auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication("LAST_USED_AUTH", ex); hasTriedLastAuth = true; } else { auth = NtlmAuthenticator.RequestNtlmPasswordAuthentication(mSmbFile.Path, ex); } if (auth != null) { mSmbFile = new SmbFile(mSmbFile.Path, auth); throw; } else { return result; } } }, 5); } catch (SmbException ex) { LogException(ex); throw new System.IO.IOException(ex.Message, ex); } catch (Java.IO.IOException ex) { throw new System.IO.IOException(ex.Message, ex); } return result; })); }
public INtlmContext create(NtlmPasswordAuthentication auth, bool doSigning) { return(new QueuedNtlmContext((Queue <byte[]>)auth.additionalData)); }
public INtlmContext create(NtlmPasswordAuthentication auth, bool doSigning) { return(new SharpCifs.Smb.NtlmContext(auth, doSigning)); }