public static bool Add(TransportInstance transport, int sessionExpiry = 0) { Tlv tlv = new Tlv(); tlv.Pack(TlvType.TransUrl, transport.Url); if (sessionExpiry > 0) { tlv.Pack(TlvType.TransSessExp, sessionExpiry); } if (transport.CommTimeout > 0) { tlv.Pack(TlvType.TransCommTimeout, transport.CommTimeout); } if (transport.RetryTotal > 0) { tlv.Pack(TlvType.TransRetryTotal, transport.RetryTotal); } if (transport.RetryWait > 0) { tlv.Pack(TlvType.TransRetryWait, transport.RetryWait); } if (!string.IsNullOrEmpty(transport.UserAgent)) { tlv.Pack(TlvType.TransUa, transport.UserAgent); } if (!string.IsNullOrEmpty(transport.ProxyHost)) { tlv.Pack(TlvType.TransUa, transport.ProxyHost); } if (!string.IsNullOrEmpty(transport.ProxyUser)) { tlv.Pack(TlvType.TransUa, transport.ProxyUser); } if (!string.IsNullOrEmpty(transport.ProxyPass)) { tlv.Pack(TlvType.TransUa, transport.ProxyPass); } if (transport.CertHash != null && transport.CertHash.Length > 0) { tlv.Pack(TlvType.TransCertHash, transport.CertHash); } var result = Core.InvokeMeterpreterBinding(true, tlv.ToRequest("core_transport_add")); if (result != null) { System.Diagnostics.Debug.Write("[PSH BINDING] List result returned"); var responseTlv = Tlv.FromResponse(result); if (responseTlv[TlvType.Result].Count > 0 && (int)responseTlv[TlvType.Result][0] == 0) { return true; } } return false; }
internal UdpEndpoint(TransportInstance instance, string endpointString, Dictionary <string, string?> options, bool oaEndpoint) : base(instance, endpointString, options, oaEndpoint) { if (options.TryGetValue("-c", out string?argument)) { if (argument != null) { throw new FormatException( $"unexpected argument `{argument}' provided for -c option in `{endpointString}'"); } _connect = true; options.Remove("-c"); } if (options.TryGetValue("-z", out argument)) { if (argument != null) { throw new FormatException( $"unexpected argument `{argument}' provided for -z option in `{endpointString}'"); } HasCompressionFlag = true; options.Remove("-z"); } if (options.TryGetValue("--ttl", out argument)) { if (argument == null) { throw new FormatException($"no argument provided for --ttl option in endpoint `{endpointString}'"); } try { McastTtl = int.Parse(argument, CultureInfo.InvariantCulture); } catch (FormatException ex) { throw new FormatException($"invalid TTL value `{argument}' in endpoint `{endpointString}'", ex); } if (McastTtl < 0) { throw new FormatException($"TTL value `{argument}' out of range in endpoint `{endpointString}'"); } options.Remove("--ttl"); } if (options.TryGetValue("--interface", out argument)) { McastInterface = argument ?? throw new FormatException( $"no argument provided for --interface option in endpoint `{endpointString}'"); if (McastInterface == "*") { if (oaEndpoint) { McastInterface = ""; } else { throw new FormatException($"`--interface *' not valid for proxy endpoint `{endpointString}'"); } } options.Remove("--interface"); } }
internal UdpEndpoint(TransportInstance instance, InputStream s) : base(instance, s) { _connect = false; HasCompressionFlag = s.ReadBool(); }
internal TcpEndpointFactory(TransportInstance instance) => _instance = instance;
public IEndpointFactory Clone(TransportInstance instance) => new TcpEndpointFactory(instance);
internal TcpEndpoint(TransportInstance instance, InputStream s) : base(instance, s) { Timeout = s.ReadInt(); HasCompressionFlag = s.ReadBool(); }
public static SessionDefinition List() { Tlv tlv = new Tlv(); var result = Core.InvokeMeterpreterBinding(true, tlv.ToRequest("core_transport_list")); if (result != null) { System.Diagnostics.Debug.Write("[PSH BINDING] List result returned"); var responseTlv = Tlv.FromResponse(result); if (responseTlv[TlvType.Result].Count > 0 && (int)responseTlv[TlvType.Result][0] == 0) { System.Diagnostics.Debug.Write("[PSH BINDING] List succeeded"); var expirySeconds = Tlv.GetValue<int>(responseTlv, TlvType.TransSessExp); var session = new SessionDefinition(DateTime.Now.AddSeconds(expirySeconds)); foreach (var transportObj in responseTlv[TlvType.TransGroup]) { var transportDict = (Dictionary<TlvType, List<object>>)transportObj; var transport = new TransportInstance { Url = Tlv.GetValue<string>(transportDict, TlvType.TransUrl, string.Empty), CommTimeout = Tlv.GetValue<int>(transportDict, TlvType.TransCommTimeout), RetryTotal = Tlv.GetValue<int>(transportDict, TlvType.TransRetryTotal), RetryWait = Tlv.GetValue<int>(transportDict, TlvType.TransRetryWait), UserAgent = Tlv.GetValue<string>(transportDict, TlvType.TransUa, string.Empty), ProxyHost = Tlv.GetValue<string>(transportDict, TlvType.TransProxyHost, string.Empty), ProxyUser = Tlv.GetValue<string>(transportDict, TlvType.TransProxyUser, string.Empty), ProxyPass = Tlv.GetValue<string>(transportDict, TlvType.TransProxyPass, string.Empty), CertHash = Tlv.GetValue<byte[]>(transportDict, TlvType.TransCertHash) }; session.Transports.Add(transport); } return session; } System.Diagnostics.Debug.Write("[PSH BINDING] List failed"); } else { System.Diagnostics.Debug.Write("[PSH BINDING] List result was null"); } return null; }
internal WSEndpointFactory(TransportInstance instance, EndpointType type) : base(instance, type) { }
public override IEndpointFactory CloneWithUnderlying(TransportInstance instance, EndpointType underlying) => new WSEndpointFactory(instance, underlying);
internal WSEndpoint(TransportInstance instance, Endpoint del, string res) { _instance = instance; _delegate = del; Resource = res; }
public static bool Add(TransportInstance transport, int sessionExpiry = 0) { Tlv tlv = new Tlv(); tlv.Pack(TlvType.TransUrl, transport.Url); if (sessionExpiry > 0) { tlv.Pack(TlvType.TransSessExp, sessionExpiry); } if (transport.CommTimeout > 0) { tlv.Pack(TlvType.TransCommTimeout, transport.CommTimeout); } if (transport.RetryTotal > 0) { tlv.Pack(TlvType.TransRetryTotal, transport.RetryTotal); } if (transport.RetryWait > 0) { tlv.Pack(TlvType.TransRetryWait, transport.RetryWait); } if (!string.IsNullOrEmpty(transport.UserAgent)) { tlv.Pack(TlvType.TransUa, transport.UserAgent); } if (!string.IsNullOrEmpty(transport.ProxyHost)) { tlv.Pack(TlvType.TransUa, transport.ProxyHost); } if (!string.IsNullOrEmpty(transport.ProxyUser)) { tlv.Pack(TlvType.TransUa, transport.ProxyUser); } if (!string.IsNullOrEmpty(transport.ProxyPass)) { tlv.Pack(TlvType.TransUa, transport.ProxyPass); } if (!string.IsNullOrEmpty(transport.CertHash)) { var hash = new byte[transport.CertHash.Length / 2]; for (var i = 0; i < hash.Length; ++i) { hash[i] = Convert.ToByte(transport.CertHash.Substring(i * 2, 2), 16); } tlv.Pack(TlvType.TransCertHash, hash); } var result = Core.InvokeMeterpreterBinding(true, tlv.ToRequest(CommandId.CoreTransportAdd)); if (result != null) { System.Diagnostics.Debug.Write("[PSH BINDING] List result returned"); var responseTlv = Tlv.FromResponse(result); if (responseTlv[TlvType.Result].Count > 0 && (int)responseTlv[TlvType.Result][0] == 0) { return(true); } } return(false); }
internal WSAcceptor(WSEndpoint endpoint, TransportInstance instance, IAcceptor del) { _endpoint = endpoint; _instance = instance; _delegate = del; }